+sub webdav_symlink_basename {
+ my ($self, $name) = @_;
+
+ $name = $name || $self->name || '';
+ $name =~ s:/+:_:g;
+
+ return $name;
+}
+
+sub ensure_webdav_symlink_correctness {
+ my ($self, $old_name) = @_;
+
+ return unless $::lx_office_conf{features}->{webdav};
+
+ croak "Need object ID" unless $self->id;
+
+ my $new_symlink = $self->webdav_symlink_basename;
+
+ croak "Need name" unless $new_symlink;
+
+ my $base_path = 'webdav/links';
+
+ if ($old_name) {
+ my $old_symlink = $self->webdav_symlink_basename($old_name);
+ return if $old_symlink eq $new_symlink;
+
+ if (-l "${base_path}/${old_symlink}") {
+ rename "${base_path}/${old_symlink}", "${base_path}/${new_symlink}";
+ return;
+ }
+ }
+
+ File::Path::make_path('webdav/' . $self->id);
+ symlink '../' . $self->id, "${base_path}/${new_symlink}";
+}
+