version 0.2.0
[fms.git] / src / global.cpp
index 5515e1a..2dbfcdf 100644 (file)
@@ -58,13 +58,19 @@ void SetupDB()
                        major=1;\r
                        minor=3;\r
                }\r
+               if(major==1 && minor==3)\r
+               {\r
+                       ConvertDB0103To0104();\r
+                       major=1;\r
+                       minor=4;\r
+               }\r
        }\r
        else\r
        {\r
-               db->Execute("INSERT INTO tblDBVersion(Major,Minor) VALUES(1,1);");\r
+               db->Execute("INSERT INTO tblDBVersion(Major,Minor) VALUES(1,4);");\r
        }\r
 \r
-       db->Execute("UPDATE tblDBVersion SET Major=1, Minor=3;");\r
+       db->Execute("UPDATE tblDBVersion SET Major=1, Minor=4;");\r
 \r
        db->Execute("CREATE TABLE IF NOT EXISTS tblOption(\\r
                                Option                          TEXT UNIQUE,\\r
@@ -89,7 +95,8 @@ void SetupDB()
                                InsertingBoardList              BOOL CHECK(InsertingBoardList IN('true','false')) DEFAULT 'false',\\r
                                LastInsertedBoardList   DATETIME,\\r
                                InsertingMessageList    BOOL CHECK(InsertingMessageList IN('true','false')) DEFAULT 'false',\\r
-                               LastInsertedMessageList DATETIME\\r
+                               LastInsertedMessageList DATETIME,\\r
+                               DateCreated                             DATETIME\\r
                                );");\r
 \r
        db->Execute("CREATE TABLE IF NOT EXISTS tblLocalIdentityInserts(\\r
@@ -193,7 +200,8 @@ void SetupDB()
                                Subject                         TEXT,\\r
                                MessageUUID                     TEXT UNIQUE,\\r
                                ReplyBoardID            INTEGER,\\r
-                               Body                            TEXT\\r
+                               Body                            TEXT,\\r
+                               MessageIndex            INTEGER\\r
                                );");\r
 \r
        db->Execute("CREATE TABLE IF NOT EXISTS tblMessageReplyTo(\\r
@@ -222,6 +230,8 @@ void SetupDB()
                                Found                           BOOL CHECK(Found IN('true','false')) DEFAULT 'false'\\r
                                );");\r
 \r
+       db->Execute("CREATE UNIQUE INDEX IF NOT EXISTS idxMessageRequest ON tblMessageRequests(IdentityID,Day,RequestIndex);");\r
+\r
        db->Execute("CREATE TABLE IF NOT EXISTS tblMessageInserts(\\r
                                LocalIdentityID         INTEGER,\\r
                                Day                                     DATE,\\r
@@ -376,6 +386,9 @@ void SetupDB()
        // insert garfield's public key\r
        db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded) VALUES('SSK@T8l1IEGU4-PoASFzgc2GYhIgRzUvZsKdoQWeuLHuTmM,QLxAPfkGis8l5NafNpSCdbxzXhBlu9WL8svcqJw9Mpo,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"');");\r
 \r
+       // TODO remove sometime after 0.1.17\r
+       FixCapitalBoardNames();\r
+\r
 }\r
 \r
 void ConvertDB0100To0101()\r
@@ -437,6 +450,19 @@ void ConvertDB0101To0103()
        db->Execute("UPDATE tblDBVersion SET Major=1, Minor=3;");\r
 }\r
 \r
+void ConvertDB0103To0104()\r
+{\r
+       // add MessageIndex to tblMessage\r
+       DateTime date;\r
+       SQLite3DB::DB *db=SQLite3DB::DB::Instance();\r
+       db->Execute("ALTER TABLE tblMessage ADD COLUMN MessageIndex     INTEGER;");\r
+       db->Execute("CREATE UNIQUE INDEX IF NOT EXISTS idxMessageRequest ON tblMessageRequests(IdentityID,Day,RequestIndex);");\r
+       db->Execute("ALTER TABLE tblLocalIdentity ADD COLUMN DateCreated DATETIME;");\r
+       date.SetToGMTime();\r
+       db->Execute("UPDATE tblLocalIdentity SET DateCreated='"+date.Format("%Y-%m-%d %H:%M:%S")+"' WHERE DateCreated IS NULL;");\r
+       db->Execute("UPDATE tblDBVersion SET Major=1, Minor=4;");\r
+}\r
+\r
 void SetupDefaultOptions()\r
 {\r
        // OptionValue should always be inserted as a string, even if the option really isn't a string - just to keep the field data type consistent\r
@@ -622,6 +648,12 @@ void SetupDefaultOptions()
        st.Step();\r
        st.Reset();\r
 \r
+       st.Bind(0,"DeleteMessagesOlderThan");\r
+       st.Bind(1,"180");\r
+       st.Bind(2,"Automatically delete messages older than this many days.");\r
+       st.Step();\r
+       st.Reset();\r
+\r
 }\r
 \r
 void SetupLogFile()\r
@@ -747,3 +779,67 @@ void StartThreads(std::vector<PThread::Thread *> &threads)
 \r
 }\r
 */\r
+\r
+void FixCapitalBoardNames()\r
+{\r
+       SQLite3DB::DB *db=SQLite3DB::DB::Instance();\r
+\r
+       SQLite3DB::Statement st=db->Prepare("SELECT BoardID,BoardName FROM tblBoard WHERE BoardID NOT IN (SELECT BoardID FROM tblAdministrationBoard);");\r
+       SQLite3DB::Statement st2=db->Prepare("SELECT BoardID FROM tblBoard WHERE BoardName=?;");\r
+       SQLite3DB::Statement del=db->Prepare("DELTE FROM tblBoard WHERE BoardID=?;");\r
+       SQLite3DB::Statement upd=db->Prepare("UPDATE tblBoard SET BoardName=? WHERE BoardID=?;");\r
+       SQLite3DB::Statement upd2=db->Prepare("UPDATE tblMessage SET ReplyBoardID=? WHERE ReplyBoardID=?;");\r
+       SQLite3DB::Statement upd3=db->Prepare("UPDATE tblMessageBoard SET BoardID=? WHERE BoardID=?;");\r
+\r
+       st.Step();\r
+       while(st.RowReturned())\r
+       {\r
+               int boardid=0;\r
+               int newboardid=0;\r
+               std::string name="";\r
+               std::string lowername="";\r
+\r
+               st.ResultInt(0,boardid);\r
+               st.ResultText(1,name);\r
+\r
+               lowername=name;\r
+               StringFunctions::LowerCase(lowername,lowername);\r
+       \r
+               if(name!=lowername)\r
+               {\r
+                       st2.Bind(0,lowername);\r
+                       st2.Step();\r
+\r
+                       if(st2.RowReturned())\r
+                       {\r
+                               st2.ResultInt(0,newboardid);\r
+\r
+                               upd2.Bind(0,newboardid);\r
+                               upd2.Bind(1,boardid);\r
+                               upd2.Step();\r
+                               upd2.Reset();\r
+\r
+                               upd3.Bind(0,newboardid);\r
+                               upd3.Bind(1,boardid);\r
+                               upd3.Step();\r
+                               upd3.Reset();\r
+\r
+                               del.Bind(0,boardid);\r
+                               del.Step();\r
+                               del.Reset();\r
+                       }\r
+                       else\r
+                       {\r
+                               upd.Bind(0,lowername);\r
+                               upd.Bind(1,boardid);\r
+                               upd.Step();\r
+                               upd.Reset();\r
+                       }\r
+\r
+                       st2.Reset();\r
+               }\r
+       \r
+               st.Step();\r
+       }\r
+\r
+}\r