Skip to content
Snippets Groups Projects
Commit 73a6ade7 authored by Gerhard Gonter's avatar Gerhard Gonter :speech_balloon:
Browse files

added "tom" script as a more general tool to work with Tomboy files

parent d6496d0e
No related branches found
No related tags found
No related merge requests found
......@@ -11,8 +11,8 @@ utility functions to work with Tomboy
use Tomboy;
$text2= $Tomboy::link($text);
$text2= $Tomboy::list_item($text);
$text2= Tomboy::link($text);
$text2= Tomboy::list_item($text);
=head1 INTERNAL FUNCTIONS
......@@ -23,6 +23,7 @@ package Tomboy;
use strict;
use UUID;
use POSIX;
sub link
{
......@@ -46,8 +47,9 @@ sub ts_ISO
{
my $time= shift || time ();
my @ts= localtime ($time);
sprintf ("%04d-%02d-%02dT%02d:%02d:%02d.0000000+01:00",
$ts[5]+1900, $ts[4]+1, $ts[3], $ts[2], $ts[1], $ts[0]);
# sprintf ("%04d-%02d-%02dT%02d:%02d:%02d.0000000+01:00",
# $ts[5]+1900, $ts[4]+1, $ts[3], $ts[2], $ts[1], $ts[0]);
strftime ('%FT%T.000000%z', @ts);
}
sub get_uuid
......@@ -58,5 +60,21 @@ sub get_uuid
$uuid_str;
}
sub start_tb
{
my $what= shift;
my $par= shift;
if ($what eq 'uuid')
{
my @cmd= ('tomboy', '--open-note', 'note://tomboy/'. $par);
print ">>> ", join (' ', @cmd), "\n";
my $pid= fork();
if ($pid == 0) { exec @cmd; }
print "started pid=[$pid]\n";
}
}
1;
......@@ -10,6 +10,25 @@ Script to play with Tomboy::Directory for testing.
Generates a CSV file as TOC (table of contents) which might be useful.
=head1 OPTIONS
-f ... find-mode
-s ... scan-mode (default)
-d <dir> ... directory where notes are stored; (default: ~/.local/share/tomboy)
-t <toc> ... Table-Of-Contents (TOC) of all notes; (default: Tomboy-TOC.csv)
-e ... start Tomboy; useful with in find-mode
=head1 MODES
=head2 scan-mode
Scan Tomboy notes directory and save a table of contents in a CSV file (fields are TAB separated).
=head2 find-mode
Load table of contents from CSV file and find notes which match given find patterns.
If -e is also specified, tell Tomboy to open these notes.
=cut
use strict;
......@@ -22,9 +41,10 @@ $Data::Dumper::Indent= 1;
# use Tomboy::Note::Simple;
use Tomboy::Directory;
use Tomboy::TOC;
my $toc_file= 'Tomboy-TOC.csv';
my $note_dir= '~/Tomboy';
my $toc_file;
my $note_dir= $ENV{'HOME'} . '/.local/share/tomboy';
my $mode= 'scan';
my $start_tb= 0;
......@@ -35,7 +55,9 @@ while (my $arg= shift (@ARGV))
if ($arg =~ /^-/)
{
if ($arg eq '-f') { $mode= 'find'; }
elsif ($arg eq '-s') { $mode= 'scan'; }
elsif ($arg eq '-d') { $note_dir= shift (@ARGV); }
elsif ($arg eq '-t') { $toc_file= shift (@ARGV); }
elsif ($arg eq '-e') { $start_tb= 1; }
else { usage(); }
}
......@@ -45,19 +67,20 @@ while (my $arg= shift (@ARGV))
}
}
my $bli= new bli('note_dir' => $note_dir, 'toc_file' => $toc_file);
print "bli: ", Dumper ($bli);
$toc_file= join ('/', $note_dir, 'Tomboy-TOC.csv') unless (defined ($toc_file));
my $toc= new Tomboy::TOC('note_dir' => $note_dir, 'toc_file' => $toc_file);
print "toc: ", Dumper ($toc);
if ($mode eq 'scan')
{
$bli->scan_dir();
$toc->scan_dir();
}
elsif ($mode eq 'find')
{
my %uuid;
foreach my $pattern (@PAR)
{
my @res= $bli->find ($pattern);
my @res= $toc->find ($pattern);
foreach my $res (@res) { $uuid{$res->{'uuid'}}= $res; } # TODO: count hits
}
......@@ -65,7 +88,7 @@ elsif ($mode eq 'find')
{
if ($start_tb)
{
start_tb ('uuid', $uuid);
Tomboy::start_tb ('uuid', $uuid);
}
else
{
......@@ -74,6 +97,14 @@ elsif ($mode eq 'find')
}
}
exit (0);
sub usage
{
system ('perldoc', $0);
exit;
}
=begin comment
hmm... starting Tomboy does not work as expected. When tomboy is
......@@ -84,122 +115,6 @@ Probably it would make sense to do something with D-Bus here...
=end comment
=cut
sub start_tb
{
my $what= shift;
my $par= shift;
if ($what eq 'uuid')
{
my @cmd= ('tomboy', '--open-note', 'note://tomboy/'. $par);
print ">>> ", join (' ', @cmd), "\n";
my $pid= fork();
if ($pid == 0) { exec @cmd; }
print "started pid=[$pid]\n";
}
}
exit (0);
package bli;
sub new
{
my $class= shift;
my $self= {};
bless $self, $class;
$self->set (@_);
$self;
}
sub set
{
my $self= shift;
my %par= @_;
foreach my $par (keys %par) { $self->{$par}= $par{$par}; }
}
sub find
{
my $self= shift;
my $pattern= shift;
print "find: pattern=[$pattern]\n";
my ($mode, $toc, $rows)= $self->load_toc();
my @res;
foreach my $row (@$rows)
{
next unless ($row->{'title'} =~ m#$pattern#i);
# print "row: ", main::Dumper ($row);
push (@res, $row);
}
@res;
}
sub scan_dir
{
my $self= shift;
print main::Dumper ($self);
my ($note_dir, $toc_file)= map { $self->{$_} } qw(note_dir toc_file);
$note_dir=~ s#/+$##;
my $tb_d= new Tomboy::Directory ();
# print "tb_d: ", Dumper ($tb_d);
print "scanning [$note_dir]\n";
my ($mode, $toc, $rows)= $self->load_toc();
my $toc_data= $tb_d->scan_dir ($note_dir, $rows, $mode);
# TODO: if verbose or so print "toc_data: ", Dumper ($toc_data);
$toc->{'data'}= $toc_data;
# TODO: optionally sort the returned values
$toc->sort ('uuid');
# print "toc: ", Dumper ($toc);
$toc->save_csv_file ('filename' => $toc_file, 'separator' => "\t", 'UTF8' => 1);
}
sub load_toc
{
my $self= shift;
my $mode= 0;
my $toc;
print "load_toc\n";
return (1, $toc, $toc->{'data'}) if (defined ($toc= $self->{'_toc'}));
my ($toc_file)= map { $self->{$_} } qw(toc_file);
print "load_toc: toc_file=[$toc_file]\n";
my $toc= new Util::Simple_CSV ('UTF8' => 1, 'no_array' => 1, 'separator' => "\t", 'UTF8' => 1);
my $rows= [];
if (-f $toc_file)
{
print "loading $toc_file\n";
$toc->load_csv_file ($toc_file);
$mode= 1;
$rows= $toc->{'data'};
print "preparing quick scan, loaded [$toc_file]\n";
# print "toc: ", Dumper ($toc);
# print "rows: ", Dumper ($rows);
# exit;
}
else
{
$toc->define_columns (Tomboy::Directory::TB_attrs());
}
$self->{'_toc'}= $toc;
($mode, $toc, $rows);
}
__END__
=head1 TODO
......@@ -213,8 +128,9 @@ __END__
=head2 Directories used by Tomboy on Ubuntu
* ~/.cache/tomboy/ ... empty
* ~/.gconf/tomboy/
* ~/.gconf/apps/tomboy/
%gconf.xml
global_keybindings/%gconf.xml
* ~/.config/tomboy/ ... various stuff
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment