[919] in BarnOwl Developers
[D-O-H] r906 - in branches/barnowl_sqlite/owl: . perl/lib/BarnOwl/MessageList
daemon@ATHENA.MIT.EDU (nelhage@MIT.EDU)
Thu Oct 29 18:11:08 2009
Resent-From: nelhage@mit.edu
Resent-To: barnowl-dev-mtg@charon.mit.edu
X-Original-To: nelhage@nelhage.com
To: dirty-owl-hackers@MIT.EDU
From: nelhage@MIT.EDU
Reply-to: dirty-owl-hackers@MIT.EDU
Date: Thu, 24 Jan 2008 20:37:37 -0500 (EST)
Author: nelhage
Date: 2008-01-24 20:37:36 -0500 (Thu, 24 Jan 2008)
New Revision: 906
Modified:
branches/barnowl_sqlite/owl/createdb.pl
branches/barnowl_sqlite/owl/perl/lib/BarnOwl/MessageList/SQL.pm
branches/barnowl_sqlite/owl/perlwrap.pm
Log:
Implement deletion and expunging, storing deletion data client-side for now
Modified: branches/barnowl_sqlite/owl/createdb.pl
===================================================================
--- branches/barnowl_sqlite/owl/createdb.pl 2008-01-25 01:36:59 UTC (rev 905)
+++ branches/barnowl_sqlite/owl/createdb.pl 2008-01-25 01:37:36 UTC (rev 906)
@@ -43,7 +43,7 @@
null => 0,
}),
DBIx::DBSchema::Column->new({
- name => 'deleted',
+ name => 'expunged',
type => 'bool',
default => 'false'
})
Modified: branches/barnowl_sqlite/owl/perl/lib/BarnOwl/MessageList/SQL.pm
===================================================================
--- branches/barnowl_sqlite/owl/perl/lib/BarnOwl/MessageList/SQL.pm 2008-01-25 01:36:59 UTC (rev 905)
+++ branches/barnowl_sqlite/owl/perl/lib/BarnOwl/MessageList/SQL.pm 2008-01-25 01:37:36 UTC (rev 906)
@@ -26,14 +26,15 @@
my $attr_fields = [qw(message_id key value)];
__PACKAGE__->mk_ro_accessors(qw(db cache));
-__PACKAGE__->mk_accessors(qw(msg_iter attr_iter attr_lookahead _next_id));
+__PACKAGE__->mk_accessors(qw(msg_iter attr_iter attr_lookahead _next_id deleted));
sub new {
my $class = shift;
my $db = DBIx::Simple->new("DBI:SQLite:dbname=$ENV{HOME}/.owl/messagedb",
+ "", "",
{RaiseError => 1, AutoCommit => 1});
my $cache = Cache::Memory->new(default_expires => '30 sec');
- my $self = {db => $db, cache => $cache};
+ my $self = {db => $db, cache => $cache, deleted => {}};
bless($self, $class);
my $maxq = $self->db->query("SELECT MAX(id) FROM $MESSAGES")
@@ -51,6 +52,21 @@
return $self;
}
+sub set_attribute {
+ my $self = shift;
+ my $msg = shift;
+ my $key = shift;
+ my $value = shift;
+
+ if($key eq 'deleted') {
+ if($value) {
+ $self->deleted->{$msg->id} = 1;
+ } else {
+ delete $self->deleted->{$msg->id};
+ }
+ }
+}
+
sub next_id {
my $self = shift;
my $id = $self->_next_id;
@@ -60,7 +76,7 @@
sub get_size {
my $self = shift;
- my $count = $self->db->query("SELECT COUNT(*) from $MESSAGES")
+ my $count = $self->db->query("SELECT COUNT(*) from $MESSAGES WHERE expunged='false'")
or die("Can't SELECT COUNT:" . $self->db->error);
my $cnt = $count->fetch->[0];
return $cnt;
@@ -100,7 +116,7 @@
sub start_iterate {
my $self = shift;
$self->msg_iter($self->db->select($MESSAGES, $message_fields,
- {deleted => 'false'}, [qw(id)]))
+ {expunged => 'false'}, [qw(id)]))
or die("Unable to SELECT from messages: " . $self->db->error);
$self->attr_iter($self->db->select($ATTRS, $attr_fields,
@@ -126,8 +142,9 @@
load_attr(\%msg, $attr);
$attr = $self->attr_iter->fetch;
}
+ $msg{deleted} = 1 if($self->deleted->{$msg{id}});
$msg = BarnOwl::Message->new(%msg);
- $self->cache->set($msg->id => $msg);
+ $self->cache->set($msg{id} => $msg);
return $msg;
}
@@ -153,8 +170,9 @@
load_attr(\%msg, $row);
}
+ $msg{deleted} = 1 if($self->deleted->{$msg{id}});
$msg = BarnOwl::Message->new(%msg);
- $self->cache->set($msg->id => $msg);
+ $self->cache->set($id => $msg);
return $msg;
}
@@ -185,7 +203,14 @@
}
sub expunge {
- ## XXX TODO Y'ALL
+ my $self = shift;
+ $self->db->begin_work;
+ for my $id (keys %{$self->deleted}) {
+ $self->db->update($MESSAGES, {expunged => 1}, {id => $id});
+ }
+ $self->db->commit;
+ $self->deleted({});
}
1;
+
Modified: branches/barnowl_sqlite/owl/perlwrap.pm
===================================================================
--- branches/barnowl_sqlite/owl/perlwrap.pm 2008-01-25 01:36:59 UTC (rev 905)
+++ branches/barnowl_sqlite/owl/perlwrap.pm 2008-01-25 01:37:36 UTC (rev 906)
@@ -319,6 +319,10 @@
return bless $self, $class;
}
+sub set_attribute {
+
+}
+
sub get_size {
my $self = shift;
return scalar keys %{$self->{messages}};
@@ -462,13 +466,15 @@
sub pretty_recipient { return shift->recipient; }
sub delete {
- my ($m) = @_;
- &BarnOwl::command("delete --id ".$m->id);
+ my $self = shift;
+ $self->{deleted} = 1;
+ BarnOwl::message_list()->set_attribute($self => deleted => 1);
}
sub undelete {
- my ($m) = @_;
- &BarnOwl::command("undelete --id ".$m->id);
+ my $self = shift;
+ $self->{deleted} = 0;
+ BarnOwl::message_list()->set_attribute($self => deleted => 0);
}
# Serializes the message into something similar to the zwgc->vt format