[919] in BarnOwl Developers

home help back first fref pref prev next nref lref last post

[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


home help back first fref pref prev next nref lref last post