version 0.2.6
[fms.git] / src / global.cpp
index 087ce1c..aa87b99 100644 (file)
@@ -67,13 +67,25 @@ void SetupDB()
                        major=1;\r
                        minor=5;\r
                }\r
+               if(major==1 && minor==5)\r
+               {\r
+                       ConvertDB0105To0106();\r
+                       major=1;\r
+                       minor=6;\r
+               }\r
+               if(major==1 && minor==6)\r
+               {\r
+                       ConvertDB0106To0107();\r
+                       major=1;\r
+                       minor=7;\r
+               }\r
        }\r
        else\r
        {\r
-               db->Execute("INSERT INTO tblDBVersion(Major,Minor) VALUES(1,5);");\r
+               db->Execute("INSERT INTO tblDBVersion(Major,Minor) VALUES(1,7);");\r
        }\r
 \r
-       db->Execute("UPDATE tblDBVersion SET Major=1, Minor=4;");\r
+       db->Execute("UPDATE tblDBVersion SET Major=1, Minor=7;");\r
 \r
        db->Execute("CREATE TABLE IF NOT EXISTS tblOption(\\r
                                Option                          TEXT UNIQUE,\\r
@@ -89,6 +101,7 @@ void SetupDB()
                                SingleUse                               BOOL CHECK(SingleUse IN('true','false')) DEFAULT 'false',\\r
                                PublishTrustList                BOOL CHECK(PublishTrustList IN('true','false')) DEFAULT 'false',\\r
                                PublishBoardList                BOOL CHECK(PublishBoardList IN('true','false')) DEFAULT 'false',\\r
+                               PublishFreesite                 BOOL CHECK(PublishFreesite IN('true','false')) DEFAULT 'false',\\r
                                InsertingIdentity               BOOL CHECK(InsertingIdentity IN('true','false')) DEFAULT 'false',\\r
                                LastInsertedIdentity    DATETIME,\\r
                                InsertingPuzzle                 BOOL CHECK(InsertingPuzzle IN('true','false')) DEFAULT 'false',\\r
@@ -99,6 +112,7 @@ void SetupDB()
                                LastInsertedBoardList   DATETIME,\\r
                                InsertingMessageList    BOOL CHECK(InsertingMessageList IN('true','false')) DEFAULT 'false',\\r
                                LastInsertedMessageList DATETIME,\\r
+                               LastInsertedFreesite    DATETIME,\\r
                                DateCreated                             DATETIME\\r
                                );");\r
 \r
@@ -148,7 +162,8 @@ void SetupDB()
                                PeerTrustListTrust              INTEGER CHECK(PeerTrustListTrust BETWEEN 0 AND 100) DEFAULT NULL,\\r
                                AddedMethod                             TEXT,\\r
                                MessageTrustComment             TEXT,\\r
-                               TrustListTrustComment   TEXT\\r
+                               TrustListTrustComment   TEXT,\\r
+                               Hidden                                  BOOL CHECK(Hidden IN('true','false')) DEFAULT 'false'\\r
                                );");\r
 \r
        db->Execute("CREATE TABLE IF NOT EXISTS tblIdentityRequests(\\r
@@ -186,18 +201,22 @@ void SetupDB()
                                TrustListTrustComment   TEXT\\r
                                );");\r
 \r
+       db->Execute("CREATE INDEX IF NOT EXISTS idxPeerTrust_IdentityID ON tblPeerTrust (IdentityID);");\r
+       db->Execute("CREATE INDEX IF NOT EXISTS idxPeerTrust_TargetIdentityID ON tblPeerTrust (TargetIdentityID);");\r
+\r
        db->Execute("CREATE TABLE IF NOT EXISTS tblBoard(\\r
                                BoardID                                 INTEGER PRIMARY KEY,\\r
                                BoardName                               TEXT UNIQUE,\\r
                                BoardDescription                TEXT,\\r
                                DateAdded                               DATETIME,\\r
-                               SaveReceivedMessages    BOOL CHECK(SaveReceivedMessages IN('true','false')) DEFAULT 'true'\\r
+                               SaveReceivedMessages    BOOL CHECK(SaveReceivedMessages IN('true','false')) DEFAULT 'true',\\r
+                               AddedMethod                             TEXT\\r
                                );");\r
 \r
-       db->Execute("INSERT INTO tblBoard(BoardName,BoardDescription,DateAdded) VALUES('fms','Freenet Message System','2007-12-01 12:00:00');");\r
-       db->Execute("INSERT INTO tblBoard(BoardName,BoardDescription,DateAdded) VALUES('freenet','Discussion about Freenet','2007-12-01 12:00:00');");\r
-       db->Execute("INSERT INTO tblBoard(BoardName,BoardDescription,DateAdded) VALUES('public','Public discussion','2007-12-01 12:00:00');");\r
-       db->Execute("INSERT INTO tblBoard(BoardName,BoardDescription,DateAdded) VALUES('test','Test board','2007-12-01 12:00:00');");\r
+       db->Execute("INSERT INTO tblBoard(BoardName,BoardDescription,DateAdded,AddedMethod) VALUES('fms','Freenet Message System','2007-12-01 12:00:00','Initial Board');");\r
+       db->Execute("INSERT INTO tblBoard(BoardName,BoardDescription,DateAdded,AddedMethod) VALUES('freenet','Discussion about Freenet','2007-12-01 12:00:00','Initialt Board');");\r
+       db->Execute("INSERT INTO tblBoard(BoardName,BoardDescription,DateAdded,AddedMethod) VALUES('public','Public discussion','2007-12-01 12:00:00','Initial Board');");\r
+       db->Execute("INSERT INTO tblBoard(BoardName,BoardDescription,DateAdded,AddedMethod) VALUES('test','Test board','2007-12-01 12:00:00','Initial Board');");\r
 \r
        db->Execute("CREATE TABLE IF NOT EXISTS tblMessage(\\r
                                MessageID                       INTEGER PRIMARY KEY,\\r
@@ -212,17 +231,24 @@ void SetupDB()
                                MessageIndex            INTEGER\\r
                                );");\r
 \r
+       db->Execute("CREATE INDEX IF NOT EXISTS idxMessage_IdentityID ON tblMessage (IdentityID);");\r
+\r
        db->Execute("CREATE TABLE IF NOT EXISTS tblMessageReplyTo(\\r
                                MessageID                       INTEGER,\\r
                                ReplyToMessageUUID      TEXT,\\r
                                ReplyOrder                      INTEGER\\r
                                );");\r
 \r
+       db->Execute("CREATE INDEX IF NOT EXISTS idxMessageReplyTo_MessageID ON tblMessageReplyTo (MessageID);");\r
+\r
        db->Execute("CREATE TABLE IF NOT EXISTS tblMessageBoard(\\r
                                MessageID                       INTEGER,\\r
                                BoardID                         INTEGER\\r
                                );");\r
 \r
+       db->Execute("CREATE INDEX IF NOT EXISTS idxMessageBoard_MessageID ON tblMessageBoard (MessageID);");\r
+       db->Execute("CREATE INDEX IF NOT EXISTS idxMessageBoard_BoardID ON tblMessageBoard (BoardID);");\r
+\r
        db->Execute("CREATE TABLE IF NOT EXISTS tblMessageListRequests(\\r
                                IdentityID                      INTEGER,\\r
                                Day                                     DATE,\\r
@@ -290,7 +316,7 @@ void SetupDB()
                                GROUP BY tblBoard.BoardID;");\r
 \r
        // calculates peer trust\r
-       // do the (MessageTrust+1)*LocalTrustListTrust/(MessageTrust+1)/100.0 - so it MessageTrust or TrustListTrust is NULL, the calc will be NULL and it won't be included at all in the average\r
+       // do the (MessageTrust+1)*LocalTrustListTrust/(MessageTrust+1)/100.0 - so if MessageTrust or TrustListTrust is NULL, the calc will be NULL and it won't be included at all in the average\r
        // need the +1 so that when the values are 0 the result is not 0\r
        db->Execute("DROP VIEW IF EXISTS vwCalculatedPeerTrust;");\r
        db->Execute("CREATE VIEW IF NOT EXISTS vwCalculatedPeerTrust AS \\r
@@ -388,11 +414,11 @@ void SetupDB()
 \r
        date.SetToGMTime();\r
        // insert SomeDude's public key\r
-       db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded,LocalTrustListTrust) VALUES('SSK@NuBL7aaJ6Cn4fB7GXFb9Zfi8w1FhPyW3oKgU9TweZMw,iXez4j3qCpd596TxXiJgZyTq9o-CElEuJxm~jNNZAuA,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"',51);");\r
+       db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded,LocalTrustListTrust,AddedMethod) VALUES('SSK@NuBL7aaJ6Cn4fB7GXFb9Zfi8w1FhPyW3oKgU9TweZMw,iXez4j3qCpd596TxXiJgZyTq9o-CElEuJxm~jNNZAuA,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"',50,'Initial Identity');");\r
        // insert Shadow Panther's public key\r
-       db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded) VALUES('SSK@~mimyB1kmH4f7Cgsd2wM2Qv2NxrZHRMM6IY8~7EWRVQ,fxTKkR0TYhgMYb-vEGAv55sMOxCGD2xhE4ZxWHxdPz4,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"');");\r
+       db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded,AddedMethod) VALUES('SSK@~mimyB1kmH4f7Cgsd2wM2Qv2NxrZHRMM6IY8~7EWRVQ,fxTKkR0TYhgMYb-vEGAv55sMOxCGD2xhE4ZxWHxdPz4,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"','Initial Identity');");\r
        // 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
+       db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded,AddedMethod) VALUES('SSK@T8l1IEGU4-PoASFzgc2GYhIgRzUvZsKdoQWeuLHuTmM,QLxAPfkGis8l5NafNpSCdbxzXhBlu9WL8svcqJw9Mpo,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"','Initial Identity');");\r
 \r
        // TODO remove sometime after 0.1.17\r
        FixCapitalBoardNames();\r
@@ -484,6 +510,25 @@ void ConvertDB0104To0105()
        db->Execute("UPDATE tblDBVersion SET Major=1, Minor=5;");\r
 }\r
 \r
+void ConvertDB0105To0106()\r
+{\r
+       // add Publish Freesite\r
+       SQLite3DB::DB *db=SQLite3DB::DB::Instance();\r
+       db->Execute("ALTER TABLE tblLocalIdentity ADD COLUMN PublishFreesite BOOL CHECK(PublishFreesite IN('true','false')) DEFAULT 'false';");\r
+       db->Execute("ALTER TABLE tblLocalIdentity ADD COLUMN LastInsertedFreesite DATETIME;");\r
+       db->Execute("UPDATE tblDBVersion SET Major=1, Minor=6;");\r
+}\r
+\r
+void ConvertDB0106To0107()\r
+{\r
+       // add AddedMethod to tblBoard\r
+       SQLite3DB::DB *db=SQLite3DB::DB::Instance();\r
+       db->Execute("ALTER TABLE tblBoard ADD COLUMN AddedMethod TEXT;");\r
+       db->Execute("ALTER TABLE tblIdentity ADD COLUMN Hidden BOOL CHECK(Hidden IN('true','false')) DEFAULT 'false';");\r
+       db->Execute("UPDATE tblIdentity SET Hidden='false' WHERE Hidden IS NULL;");\r
+       db->Execute("UPDATE tblDBVersion SET Major=1, Minor=7;");\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
@@ -530,7 +575,7 @@ void SetupDefaultOptions()
 \r
        st.Bind(0,"StartHTTP");\r
        st.Bind(1,"true");\r
-       st.Bind(2,"Start HTTP server.");\r
+       st.Bind(2,"Start HTTP server.  WARNING: If you turn this off, you won't be able to access the administration pages.");\r
        st.Step();\r
        st.Reset();\r
 \r
@@ -549,7 +594,7 @@ void SetupDefaultOptions()
        // StartFreenetUpdater\r
        st.Bind(0,"StartFreenetUpdater");\r
        st.Bind(1,"true");\r
-       st.Bind(2,"Start Freenet Updater thread.");\r
+       st.Bind(2,"Set to true to start the Freenet Updater thread and connect to Freenet.  Set to false to prevent communication with Freenet.");\r
        st.Step();\r
        st.Reset();\r
 \r
@@ -622,7 +667,7 @@ void SetupDefaultOptions()
        st.Reset();\r
 \r
        st.Bind(0,"MinLocalTrustListTrust");\r
-       st.Bind(1,"51");\r
+       st.Bind(1,"50");\r
        st.Bind(2,"Specifies a local trust list trust level that a peer must have before its trust list will be included in the weighted average.  Any peers below this number will be excluded from the results.");\r
        st.Step();\r
        st.Reset();\r
@@ -663,6 +708,12 @@ void SetupDefaultOptions()
        st.Step();\r
        st.Reset();\r
 \r
+       st.Bind(0,"SaveMessagesFromNewBoards");\r
+       st.Bind(1,"true");\r
+       st.Bind(2,"Set to true to automatically save messages posted to new boards.  Set to false to ignore messages to new boards.");\r
+       st.Step();\r
+       st.Reset();\r
+\r
        st.Bind(0,"ChangeMessageTrustOnReply");\r
        st.Bind(1,"0");\r
        st.Bind(2,"How much the local message trust level of an identity should change when you reply to one of their messages.");\r
@@ -741,79 +792,13 @@ void SigHandler(int signum)
        exit(0);\r
 }\r
 \r
-/*\r
-void ShutdownThreads(std::vector<PThread::Thread *> &threads)\r
-{\r
-       std::vector<PThread::Thread *>::iterator i;\r
-       for(i=threads.begin(); i!=threads.end(); i++)\r
-       {\r
-               (*i)->Cancel();\r
-       }\r
-\r
-       for(i=threads.begin(); i!=threads.end(); i++)\r
-       {\r
-               LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_DEBUG,"ShutdownThreads waiting for thread to exit.");\r
-               //(*i)->wait();\r
-               (*i)->Join();\r
-               delete (*i);\r
-       }\r
-\r
-       threads.clear();\r
-\r
-}\r
-\r
-void StartThreads(std::vector<PThread::Thread *> &threads)\r
-{\r
-       std::string startfreenet;\r
-       std::string startnntp;\r
-       std::string starthttp;\r
-\r
-       if(Option::Instance()->Get("StartFreenetUpdater",startfreenet)==false)\r
-       {\r
-               startfreenet="true";\r
-               Option::Instance()->Set("StartFreenetUpdater","true");\r
-       }\r
-\r
-       if(Option::Instance()->Get("StartNNTP",startnntp)==false)\r
-       {\r
-               startnntp="true";\r
-               Option::Instance()->Set("StartNNTP","true");\r
-       }\r
-\r
-       if(Option::Instance()->Get("StartHTTP",starthttp)==false)\r
-       {\r
-               starthttp="true";\r
-               Option::Instance()->Set("StartHTTP","true");\r
-       }\r
-\r
-       if(startfreenet=="true")\r
-       {\r
-               PThread::Thread *t=new PThread::Thread(new FreenetMasterThread());\r
-               threads.push_back(t);\r
-       }\r
-\r
-       if(startnntp=="true")\r
-       {\r
-               PThread::Thread *t=new PThread::Thread(new NNTPListener());\r
-               threads.push_back(t);\r
-       }\r
-\r
-       if(starthttp=="true")\r
-       {\r
-               PThread::Thread *t=new PThread::Thread(new HTTPThread());\r
-               threads.push_back(t);\r
-       }\r
-\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 del=db->Prepare("DELETE 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