+use File::Path;
+use List::Util qw(max);
+use Time::HiRes qw(gettimeofday);
+
+sub _get_export_path {
+ $main::lxdebug->enter_sub();
+
+ my ($a, $b) = gettimeofday();
+ my $path = get_path_for_download_token("${a}-${b}-${$}");
+
+ mkpath($path) unless (-d $path);
+
+ $main::lxdebug->leave_sub();
+
+ return $path;
+}
+
+sub get_path_for_download_token {
+ $main::lxdebug->enter_sub();
+
+ my $token = shift;
+ my $path;
+
+ if ($token =~ m|^(\d+)-(\d+)-(\d+)$|) {
+ $path = $::lx_office_conf{paths}->{userspath} . "/datev-export-${1}-${2}-${3}";
+ }
+
+ $main::lxdebug->leave_sub();
+
+ return $path;
+}
+
+sub get_download_token_for_path {
+ $main::lxdebug->enter_sub();
+
+ my $path = shift;
+ my $token;
+
+ if ($path =~ m|.*datev-export-(\d+)-(\d+)-(\d+)/?$|) {
+ $token = "${1}-${2}-${3}";
+ }
+
+ $main::lxdebug->leave_sub();
+
+ return $token;
+}
+
+sub clean_temporary_directories {
+ $main::lxdebug->enter_sub();
+
+ foreach my $path (glob($::lx_office_conf{paths}->{userspath} . "/datev-export-*")) {
+ next unless (-d $path);
+
+ my $mtime = (stat($path))[9];
+ next if ((time() - $mtime) < 8 * 60 * 60);
+
+ rmtree $path;
+ }
+
+ $main::lxdebug->leave_sub();
+}
+
+sub _fill {
+ $main::lxdebug->enter_sub();
+
+ my $text = shift;
+ my $field_len = shift;
+ my $fill_char = shift;
+ my $alignment = shift || 'right';
+
+ my $text_len = length $text;
+
+ if ($field_len < $text_len) {
+ $text = substr $text, 0, $field_len;
+
+ } elsif ($field_len > $text_len) {
+ my $filler = ($fill_char) x ($field_len - $text_len);
+ $text = $alignment eq 'right' ? $filler . $text : $text . $filler;
+ }
+
+ $main::lxdebug->leave_sub();
+
+ return $text;
+}