notepadfree_to_txt.pl 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #!/usr/bin/perl
  2. # Convert Android Notepad Free backup notes to text files.
  3. use utf8;
  4. use 5.014;
  5. use autodie;
  6. use warnings;
  7. use JSON qw(from_json);
  8. use File::Slurper qw(read_text write_text);
  9. use File::Spec::Functions qw(catfile updir);
  10. use File::Compare qw();
  11. my $output_dir = 'Text files';
  12. my $meta_json = from_json(read_text('notes_meta_data.json'));
  13. if (not -d $output_dir) {
  14. mkdir($output_dir);
  15. }
  16. OUTER: foreach my $note (@{$meta_json->{notes}}) {
  17. my $title = $note->{title};
  18. my $file = $note->{file};
  19. my $lastEditDate = $note->{lastEditDate};
  20. $title =~ s{/}{÷}g; # replace '/' with '÷'
  21. my $input_file = catfile(updir, $file);
  22. my $content = read_text($input_file);
  23. my $output_file = catfile($output_dir, $title . '.txt');
  24. for (my $k = 1 ; (-f $output_file) ; ++$k) {
  25. if (File::Compare::compare($input_file, $output_file) == 0) {
  26. say "File `$output_file` already exists... Skipping...";
  27. next OUTER; # files are equal
  28. }
  29. else {
  30. $output_file = catfile($output_dir, $title . '_' . $k . '.txt');
  31. }
  32. }
  33. say "Creating: `$output_file`...";
  34. write_text($output_file, $content);
  35. utime($lastEditDate, $lastEditDate, $output_file);
  36. }