use DBI;
use CONFIG;
+use MISC;
# Perl module to handle message base
# =========================================================================
# mail_remove(): remove mail from area
# mail_remove($handle, $id)
# $handle - handle to area
-# $id - 'id' field
+# $id - 'id' value
# returns true if successful, undef if not found, or dies on error
#
-# mail_search(): search for mails
-# mail_search($handle, $data, $fields)
-# $handle - handle to area
-# $data - hashref { key => value, key => value, ... }
-# $fields - (optional) arrayref of fieldnames, or undef for 'id'
-# returns list of hashrefs { field => value }
-#
# =========================================================================
package MSGBASE;
{ 'AutoCommit' => 0, 'PrintError' => 1 }
) or die("Can't connect to $file");
$dbh->do("CREATE TABLE IF NOT EXISTS '$table' (
- 'id' INTEGER PRIMARY KEY,
- 'area' TEXT,
- 'from' TEXT, 'fname' TEXT,
- 'to' TEXT, 'tname' TEXT,
- 'date' TEXT, 'time' TEXT,
- 'subj' TEXT, 'body' TEXT,
- 'msgid' TEXT, 'reply' TEXT,
- 'path' TEXT, 'seen' TEXT,
- 'state' INTEGER,
- 'transfer' INTEGER,
- 'file' INTEGER
+ 'id' INTEGER PRIMARY KEY,
+ 'area' TEXT,
+ 'from' TEXT, 'to' TEXT,
+ 'fname' TEXT, 'tname' TEXT,
+ 'subj' TEXT, 'body' TEXT,
+ 'date' TEXT, 'time' TEXT,
+ 'msgid' TEXT, 'reply' TEXT,
+ 'path' TEXT, 'seen' TEXT
)") or die("Can't create table!");
$dbh->commit or die("Can't commit!");
my $handle = {
( $mail->{msgid} )
);
if($dupes) {
- say(sprintf("DUPE: msgid='%s', '%s' => '%s'",
+ say(sprintf("DUPE: '%s', '%s' => '%s'",
$dupes->[0], $dupes->[1],
$dupes->[2], $dupes->[3]));
return(undef);
# store mail in msgbase
my $rows = $handle->{dbh}->do("INSERT INTO '$handle->{table}'
- ('area', 'from', 'fname', 'to', 'tname', 'date', 'time',
- 'subj', 'body', 'msgid', 'reply', 'path', 'seen',
- 'state', 'transfer', 'file') VALUES
- (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);",
+ ('area', 'from', 'to', 'fname', 'tname', 'subj', 'body',
+ 'date', 'time', 'msgid', 'reply', 'path', 'seen') VALUES
+ (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);",
undef,
(
$mail->{area},
- MISC::fido2text($mail->{from}), $mail->{fname},
- MISC::fido2text($mail->{to}), $mail->{tname},
+ $mail->{from}, $mail->{to},
+ $mail->{fname}, $mail->{tname},
+ $mail->{subj}, $mail->{body},
MISC::date2text($mail->{date}),
MISC::time2text($mail->{time}),
- $mail->{subj}, $mail->{body},
$mail->{msgid}, $mail->{reply},
- MISC::netnodelist2text($mail->{path}),
- MISC::netnodelist2text($mail->{seen}),
- $mail->{attr}->{state},
- $mail->{attr}->{transfer},
- $mail->{attr}->{file},
+ $mail->{path}, $mail->{seen},
)
) or die("Failed to save mail!");
}
return($rows);
}
-sub mail_search($$;$)
-{
- my ($handle, $data, $fields) = @_;
-
- # COLUMN clause
- my $columns;
- if(defined $fields) {
- my @f = map { "\"$_\"" } @$fields;
- $columns = join(",", @f);
- } else {
- $columns = "\"id\"";
- }
-
- # WHERE clause
- my (@k, @v);
- foreach(keys %$data) {
- if(defined $data->{$_}) {
- push @k, "\"$_\" = ?";
- push @v, "$data->{$_}";
- } else {
- push @k, "\"$_\" IS NULL";
- }
- }
- my $where = join(" AND ", @k);
-
- my $result = $handle->{dbh}->selectall_arrayref(
- "SELECT $columns FROM $handle->{table} WHERE $where;",
- { 'Slice' => {} },
- @v
- );
-
- return(@$result);
-}
-
1;