version 0.3.29
[fms.git] / include / message.h
1 #ifndef _message_\r
2 #define _message_\r
3 \r
4 #include "idatabase.h"\r
5 #include "ilogger.h"\r
6 \r
7 #include <Poco/DateTime.h>\r
8 \r
9 class Message:public IDatabase,public ILogger\r
10 {\r
11 public:\r
12         Message(SQLite3DB::DB *db);\r
13         Message(SQLite3DB::DB *db, const long messageid);\r
14         Message(SQLite3DB::DB *db, const std::string &messageuuid);\r
15 \r
16         const long GetMessageID() const                                 { return m_messageid; }\r
17         const std::string GetMessageUUID() const                { return m_messageuuid; }\r
18         const std::string GetSubject() const                    { return m_subject; }\r
19         const std::string GetBody() const                               { return m_body; }\r
20         const std::string GetReplyBoardName()                   { return m_replyboardname; }\r
21         const Poco::DateTime GetDateTime() const                { return m_datetime; }\r
22         const std::string GetFromName() const                   { return m_fromname; }\r
23         std::vector<std::string> GetBoards() const              { return m_boards; }\r
24         std::map<long,std::string> GetInReplyTo() const { return m_inreplyto; }\r
25 \r
26         void SetFromName(const std::string &fromname)   { m_fromname=fromname; }\r
27 \r
28         const std::string GetNNTPHeaders() const;\r
29         const std::string GetNNTPArticleID() const;\r
30         const std::string GetNNTPBody() const;\r
31 \r
32 /*\r
33         void SetMessageUUID(const std::string &messageuuid)                                     { m_messageuuid=messageuuid; }\r
34         void SetSubject(const std::string &subject)                                                     { m_subject=subject; }\r
35         void SetBody(const std::string &body)                                                           { m_body=body; }\r
36         void SetReplyBoardName(const std::string &replyboardname)                       { m_replyboardname=replyboardname; }\r
37         void SetDateTime(const DateTime &datetime)                                                      { m_datetime=datetime; }\r
38         void SetFromName(const std::string &fromname)                                           { m_fromname=fromname; }\r
39         void AddBoard(const std::string &board)                                                         { m_boards.push_back(board); }\r
40         void AddInReplyTo(const long index, const std::string &messageid)       { m_inreplyto[index]=messageid; }\r
41 */\r
42 \r
43         const bool Load(const long messageid, const long boardid=-1);\r
44         const bool LoadNext(const long messageid, const long boardid=-1);               // loads next message in board with messageid > passed id\r
45         const bool LoadPrevious(const long messageid, const long boardid=-1);   // loads previous message in board with messageid < passed id\r
46         const bool Load(const std::string &messageuuid);\r
47         \r
48         const bool ParseNNTPMessage(const std::string &nntpmessage);\r
49         const bool Create(const long localidentityid, const long boardid, const std::string &subject, const std::string &body, const std::string &references);\r
50 \r
51         const bool PostedToAdministrationBoard()                { return CheckForAdministrationBoard(m_boards); }\r
52 \r
53         const bool StartFreenetInsert();\r
54         void HandleAdministrationMessage();\r
55 \r
56 private:\r
57         void Initialize();\r
58         // checks vector of boards for any special administration boards - if it finds one true is returned, otherwise false\r
59         const bool CheckForAdministrationBoard(const std::vector<std::string> &boards);\r
60         void HandleChangeTrust();\r
61         void StripAdministrationBoards();       // removes administration boards from boards vector\r
62         const int FindLocalIdentityID(const std::string &name);\r
63 \r
64         struct fileattachment\r
65         {\r
66                 fileattachment(const std::string &filename, const std::string &mimetype, const std::vector<unsigned char> &data):m_filename(filename),m_mimetype(mimetype),m_data(data) {}\r
67                 std::string m_filename;\r
68                 std::string m_mimetype;\r
69                 std::vector<unsigned char> m_data;\r
70         };\r
71 \r
72         long m_messageid;\r
73         bool m_addnewpostfromidentities;\r
74         std::string m_messageuuid;\r
75         std::string m_subject;\r
76         std::string m_body;\r
77         std::string m_replyboardname;\r
78         Poco::DateTime m_datetime;\r
79         std::string m_fromname;\r
80         std::vector<std::string> m_boards;\r
81         std::map<long,std::string> m_inreplyto;\r
82         std::vector<fileattachment> m_fileattachments;\r
83         long m_changemessagetrustonreply;\r
84         long m_minlocalmessagetrust;\r
85         long m_minlocaltrustlisttrust;\r
86 \r
87 };\r
88 \r
89 #endif  // _message_\r