[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [coldsync-hackers] syncing of creation/modification dates
- To: coldsync-hackers at lusars dot net
- Subject: Re: [coldsync-hackers] syncing of creation/modification dates
- From: Pierre Phaneuf <pp at ludusdesign dot com>
- Date: Wed, 16 Oct 2002 11:15:51 -0400
- References: <3DAD4D37.8070408@ludusdesign.com> <Pine.LNX.4.44.0210160830160.18049-100000@aphrodite.gnu-designs.com>
- Reply-To: coldsync-hackers at lusars dot net
- Sender: owner-coldsync-hackers at lusars dot net
- User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020913 Debian/1.1-1
David A. Desrosiers wrote:
>> Plucker creates a cache file on the Palm during usage, and updating
>> a Plucker document should invalidates this cache. The problem is
>> that Plucker invalidates that cache when the creation date on a
>> document changes, but neither the creation or the modification date
>> are updated by the generic conduit!
>
> It's not a cache file, it's where the metadata of that document is
> stored, such as what page you left off at when you last opened it,
> and other values.
Ok, agreed that its not a cache file, because it also contains other
"non-critical" data, like you mentioned (also of interest is the list of
visited links). That's why I'd rather not pre-emptively delete the
metadata file, unless I changed anything.
> The reason that you need to sync the creation time of the new Plucker
> pdb you install and the Plkr-MyNewPdb.pdb file is because they could
> be different files. Either update the creation time on the
> MyNewPdb.pdb file, which would cause Plucker to delete (and recreate)
> the Plkr-MyNewPdb.pdb file, or delete the Plkr-MyNewPdb.pdb file when
> you install your new MyNewPdb.pdb file.
>
> ..unless I misunderstand you here. Are actually creating the raw
> records of the pdb with coldsync, and building the pdb on disk,
> before syncing to the Palm (replacing the distiller's pdb create
> actions) or are you just syncing the pdb on disk to the Palm?
I don't use the "plucker-build -f" mode, I have "plucker-build -q -c" in
a cron job, every hour, and I *update* (never create, this being a
"fetch" conduit) a previously installed PDB. I created the PDB using
"plucker-build -f", though.
IMHO, the "-f" mode of Plucker is next to useless for something like
updating from a ColdSync conduit, since you have to delete the PDB on
the Palm before installing a new one. I also try to make things as fast
as possible (if some records are completely identical, I don't touch
them, so only the deleted/modified/new records get synced).
It works perfect, except for ColdSync not updating the creation time
(which I'm careful not to change if I didn't actually change the PDB,
and would thus clear out the metadata correctly).
Of course, I could change the whole thing into a sync conduit rather
than a fetch conduit, but having ColdSync's generic conduit do the grunt
work for me is quite attractive... :-)
Attached is the current state of the conduit, if anyone is interested or
could review the code... Thanks!
--
Pierre Phaneuf
http://advogato.org/person/pphaneuf/
#! /usr/bin/perl -w
use strict;
use ColdSync;
use Palm::Raw ();
%HEADERS = (
'File' => "Home Page",
'Cache' => "$ENV{HOME}/.plucker/cache",
'Verbose' => 0
);
sub update_home {
my %params = @_;
my $pdb = $params{PDB};
my $pdbname = $params{File} || 'Home Page';
my $cachedir = $params{Cache} || '/home/pp/.plucker/cache';
my $debug = $params{Verbose} || 0;
my $prefix = $params{Prefix} || '';
my $modified = 0;
my @files;
if(!defined($pdb)) {
die "PDB not defined";
}
if($pdb->{name} ne $pdbname
|| $pdb->{creator} ne 'Plkr'
|| $pdb->{type} ne 'Data') {
return;
}
print "${prefix}PDB: $pdb->{name} ($pdb->{mtime})\n" if $debug;
opendir(DIR, $cachedir);
rewinddir(DIR);
@files = readdir(DIR);
closedir(DIR);
@files = sort({$a <=> $b} grep(!/^\./, @files));
foreach my $record (@{$pdb->{records}}) {
if(!grep($record->{id} == $_, @files)) {
if(!defined($record->{attributes}{deleted})) {
print "${prefix}deleting unneeded record $record->{id}\n" if $debug;
$pdb->delete_Record($record, 1);
++$modified;
}
}
}
foreach my $file (@files) {
my $record;
my $data;
if(!open(FILE, "< $cachedir/$file")) {
die "could not open $cachedir/$file: $!";
}
$data = do { local $/; <FILE> };
close(FILE);
$record = $pdb->findRecordByID($file);
if(defined($record)) {
if(defined($record->{data})
&& $record->{data} eq $data) {
print "${prefix}record $record->{id} unchanged\n" if $debug;
next;
}
print "${prefix}updating $record->{id}\n" if $debug;
} else {
print "${prefix}adding $file\n" if $debug;
$record = $pdb->append_Record();
$record->{id} = $file;
}
$record->{data} = $data;
$record->{attributes}{dirty} = 1;
$record->{attributes}{Dirty} = 1;
$record->{category} = 0;
++$modified;
}
if($modified) {
print "${prefix}PDB was modified, updating ctime\n" if $debug;
my $curtime = time();
$pdb->{ctime} = $curtime;
$pdb->{mtime} = $curtime;
}
}
sub doFetch {
update_home(
PDB => $ColdSync::PDB,
File => $HEADERS{File},
Cache => $HEADERS{Cache},
Verbose => $HEADERS{Verbose},
Prefix => '100 '
);
return 1;
}
Palm::PDB::RegisterPDBHandlers('Palm::Raw',
[ 'Plkr', 'Data' ],
);
ConduitMain(
'fetch' => \&doFetch,
);