1 ;;; modb.el --- Message Orchestration DataBase.
3 ;; Copyright (C) 2003 Yuuichi Teranishi <teranisi@gohome.org>
5 ;; Author: Yuuichi Teranishi <teranisi@gohome.org>
6 ;; Hiroya Murata <lapis-lazuli@pop06.odn.ne.jp>
7 ;; Keywords: mail, net news
9 ;; This file is part of ELMO (Elisp Library for Message Orchestration).
11 ;; This program is free software; you can redistribute it and/or modify
12 ;; it under the terms of the GNU General Public License as published by
13 ;; the Free Software Foundation; either version 2, or (at your option)
16 ;; This program is distributed in the hope that it will be useful,
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 ;; GNU General Public License for more details.
21 ;; You should have received a copy of the GNU General Public License
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
24 ;; Boston, MA 02111-1307, USA.
33 (eval-when-compile (require 'cl))
38 (luna-define-class modb-generic () (location ; location for save.
39 message-modified ; message is modified.
40 flag-modified ; flag is modified.
42 (luna-define-internal-accessors 'modb-generic))
44 (luna-define-generic elmo-msgdb-load (msgdb)
47 (luna-define-generic elmo-msgdb-save (msgdb)
50 (luna-define-generic elmo-msgdb-location (msgdb)
51 "Return the location of MSGDB.")
53 (luna-define-generic elmo-msgdb-message-modified-p (msgdb)
54 "Return non-nil if message is modified.")
56 (luna-define-generic elmo-msgdb-flag-modified-p (msgdb)
57 "Return non-nil if flag is modified.")
59 (luna-define-generic elmo-msgdb-append (msgdb msgdb-append)
60 "Append the MSGDB-APPEND to the MSGDB.
61 Return a list of messages which have duplicated message-id.")
63 (luna-define-generic elmo-msgdb-clear (msgdb)
64 "Clear the MSGDB structure.")
66 (luna-define-generic elmo-msgdb-length (msgdb)
67 "Return number of messages in the MSGDB")
69 (luna-define-generic elmo-msgdb-flags (msgdb number)
70 "Return a list of flag which corresponds to the message with NUMBER.")
72 (luna-define-generic elmo-msgdb-set-flag (msgdb number flag)
74 MSGDB is the ELMO msgdb.
75 NUMBER is a message number to set flag.
76 FLAG is a symbol which is one of the following:
77 `new' ... Message which is new.
78 `read' ... Message which is already read.
79 `important' ... Message which is important.
80 `answered' ... Message which is answered.
81 `cached' ... Message which is cached.")
83 (luna-define-generic elmo-msgdb-unset-flag (msgdb number flag)
85 MSGDB is the ELMO msgdb.
86 NUMBER is a message number to set flag.
87 FLAG is a symbol which is one of the following:
88 `new' ... Message which is new.
89 `read' ... Message which is already read.
90 `important' ... Message which is important.
91 `answered' ... Message which is answered.
92 `cached' ... Message which is cached.")
94 (luna-define-generic elmo-msgdb-list-messages (msgdb)
95 "Return a list of message numbers in the MSGDB.")
97 (luna-define-generic elmo-msgdb-list-flagged (msgdb flag)
98 "Return a list of message numbers which is set FLAG in the MSGDB.")
100 ;;; (luna-define-generic elmo-msgdb-search (msgdb condition &optional numbers)
101 ;;; "Search and return list of message numbers.
102 ;;; MSGDB is the ELMO msgdb structure.
103 ;;; CONDITION is a condition structure for searching.
104 ;;; If optional argument NUMBERS is specified and is a list of message numbers,
105 ;;; messages are searched from the list.")
107 (luna-define-generic elmo-msgdb-append-entity (msgdb entity &optional flags)
108 "Append a ENTITY with FLAGS into the MSGDB.
109 Return non-nil if message-id of entity is duplicated.")
111 (luna-define-generic elmo-msgdb-delete-messages (msgdb numbers)
112 "Delete messages which are contained NUMBERS from MSGDB.")
114 (luna-define-generic elmo-msgdb-sort-entities (msgdb predicate &optional app-data)
115 "Sort entities of MSGDB, comparing with PREDICATE.
116 PREDICATE is called with two entities and APP-DATA.
117 Should return non-nil if the first entity is \"less\" than the second.")
119 (luna-define-generic elmo-msgdb-message-entity (msgdb key)
120 "Return the message-entity structure which matches to the KEY.
121 KEY is a number or a string.
122 A number is for message number in the MSGDB.
123 A string is for message-id of the message.")
125 ;;; generic implement
127 (luna-define-method elmo-msgdb-load ((msgdb modb-generic))
130 (luna-define-method elmo-msgdb-location ((msgdb modb-generic))
131 (modb-generic-location-internal msgdb))
133 (luna-define-method elmo-msgdb-message-modified-p ((msgdb modb-generic))
134 (modb-generic-message-modified-internal msgdb))
136 (luna-define-method elmo-msgdb-flag-modified-p ((msgdb modb-generic))
137 (modb-generic-flag-modified-internal msgdb))
139 (luna-define-method elmo-msgdb-append ((msgdb modb-generic) msgdb-append)
141 (dolist (number (elmo-msgdb-list-messages msgdb-append))
142 (when (elmo-msgdb-append-entity
144 (elmo-msgdb-message-entity msgdb-append number)
145 (elmo-msgdb-flags msgdb-append number))
146 (setq duplicates (cons number duplicates))))
149 (luna-define-method elmo-msgdb-clear ((msgdb modb-generic))
150 (modb-generic-set-message-modified-internal msgdb nil)
151 (modb-generic-set-flag-modified-internal msgdb nil))
153 (luna-define-method elmo-msgdb-length ((msgdb modb-generic))
156 ;; for on demand loading
157 (provide 'modb-generic)
160 (product-provide (provide 'modb) (require 'elmo-version))
162 ;;; modb.el ends here