db->Open("fms.db3");\r
db->SetBusyTimeout(10000); // set timeout to 10 seconds\r
db->Execute("VACUUM;");\r
- \r
- // TODO remove this - temp fix for problem in 0.1.8\r
- db->Execute("DELETE FROM tblMessageBoard WHERE MessageID NOT IN (SELECT MessageID FROM tblMessage);");\r
\r
db->Execute("CREATE TABLE IF NOT EXISTS tblDBVersion(\\r
Major INTEGER,\\r
major=1;\r
minor=4;\r
}\r
+ if(major==1 && minor==4)\r
+ {\r
+ ConvertDB0104To0105();\r
+ major=1;\r
+ minor=5;\r
+ }\r
+ if(major==1 && minor==5)\r
+ {\r
+ ConvertDB0105To0106();\r
+ major=1;\r
+ minor=6;\r
+ }\r
}\r
else\r
{\r
- db->Execute("INSERT INTO tblDBVersion(Major,Minor) VALUES(1,4);");\r
+ db->Execute("INSERT INTO tblDBVersion(Major,Minor) VALUES(1,6);");\r
}\r
\r
- db->Execute("UPDATE tblDBVersion SET Major=1, Minor=4;");\r
+ db->Execute("UPDATE tblDBVersion SET Major=1, Minor=6;");\r
\r
db->Execute("CREATE TABLE IF NOT EXISTS tblOption(\\r
Option TEXT UNIQUE,\\r
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
LastInsertedBoardList DATETIME,\\r
InsertingMessageList BOOL CHECK(InsertingMessageList IN('true','false')) DEFAULT 'false',\\r
LastInsertedMessageList DATETIME,\\r
+ LastInsertedFreesite DATETIME,\\r
DateCreated DATETIME\\r
);");\r
\r
);");\r
\r
db->Execute("CREATE TABLE IF NOT EXISTS tblIdentity(\\r
- IdentityID INTEGER PRIMARY KEY,\\r
- PublicKey TEXT UNIQUE,\\r
- Name TEXT,\\r
- 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
- DateAdded DATETIME,\\r
- LastSeen DATETIME,\\r
- LocalMessageTrust INTEGER CHECK(LocalMessageTrust BETWEEN 0 AND 100) DEFAULT NULL,\\r
- PeerMessageTrust INTEGER CHECK(PeerMessageTrust BETWEEN 0 AND 100) DEFAULT NULL,\\r
- LocalTrustListTrust INTEGER CHECK(LocalTrustListTrust BETWEEN 0 AND 100) DEFAULT NULL,\\r
- PeerTrustListTrust INTEGER CHECK(PeerTrustListTrust BETWEEN 0 AND 100) DEFAULT NULL\\r
+ IdentityID INTEGER PRIMARY KEY,\\r
+ PublicKey TEXT UNIQUE,\\r
+ Name TEXT,\\r
+ 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
+ DateAdded DATETIME,\\r
+ LastSeen DATETIME,\\r
+ LocalMessageTrust INTEGER CHECK(LocalMessageTrust BETWEEN 0 AND 100) DEFAULT NULL,\\r
+ PeerMessageTrust INTEGER CHECK(PeerMessageTrust BETWEEN 0 AND 100) DEFAULT NULL,\\r
+ LocalTrustListTrust INTEGER CHECK(LocalTrustListTrust BETWEEN 0 AND 100) DEFAULT NULL,\\r
+ PeerTrustListTrust INTEGER CHECK(PeerTrustListTrust BETWEEN 0 AND 100) DEFAULT NULL,\\r
+ AddedMethod TEXT,\\r
+ MessageTrustComment TEXT,\\r
+ TrustListTrustComment TEXT\\r
);");\r
\r
db->Execute("CREATE TABLE IF NOT EXISTS tblIdentityRequests(\\r
);");\r
\r
db->Execute("CREATE TABLE IF NOT EXISTS tblPeerTrust(\\r
- IdentityID INTEGER,\\r
- TargetIdentityID INTEGER,\\r
- MessageTrust INTEGER CHECK(MessageTrust BETWEEN 0 AND 100),\\r
- TrustListTrust INTEGER CHECK(TrustListTrust BETWEEN 0 AND 100)\\r
+ IdentityID INTEGER,\\r
+ TargetIdentityID INTEGER,\\r
+ MessageTrust INTEGER CHECK(MessageTrust BETWEEN 0 AND 100),\\r
+ TrustListTrust INTEGER CHECK(TrustListTrust BETWEEN 0 AND 100),\\r
+ MessageTrustComment TEXT,\\r
+ 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
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
BoardID INTEGER\\r
);");\r
\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
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
\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) VALUES('SSK@NuBL7aaJ6Cn4fB7GXFb9Zfi8w1FhPyW3oKgU9TweZMw,iXez4j3qCpd596TxXiJgZyTq9o-CElEuJxm~jNNZAuA,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"',50);");\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
// insert garfield's public key\r
db->Execute("UPDATE tblDBVersion SET Major=1, Minor=4;");\r
}\r
\r
+void ConvertDB0104To0105()\r
+{\r
+ // add AddedMethod, MessageTrustComment, TrustListTrustComment to tblIdentity\r
+ // add MessageTrustComment,TrustListTrustComment to tblPeerTrust\r
+ SQLite3DB::DB *db=SQLite3DB::DB::Instance();\r
+ db->Execute("ALTER TABLE tblIdentity ADD COLUMN AddedMethod TEXT;");\r
+ db->Execute("ALTER TABLE tblIdentity ADD COLUMN MessageTrustComment TEXT;");\r
+ db->Execute("ALTER TABLE tblIdentity ADD COLUMN TrustListTrustComment TEXT;");\r
+ db->Execute("ALTER TABLE tblPeerTrust ADD COLUMN MessageTrustComment TEXT;");\r
+ db->Execute("ALTER TABLE tblPeerTrust ADD COLUMN TrustListTrustComment TEXT;");\r
+ 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 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
\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
// 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
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
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
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