summaryrefslogtreecommitdiffstats
path: root/fbreader/src/database/networkdb
diff options
context:
space:
mode:
Diffstat (limited to 'fbreader/src/database/networkdb')
-rw-r--r--fbreader/src/database/networkdb/DBRunnables.h81
-rw-r--r--fbreader/src/database/networkdb/NetworkDB.cpp152
-rw-r--r--fbreader/src/database/networkdb/NetworkDB.h76
-rw-r--r--fbreader/src/database/networkdb/NetworkDBQuery.cpp103
-rw-r--r--fbreader/src/database/networkdb/NetworkDBQuery.h48
-rw-r--r--fbreader/src/database/networkdb/runnables/ClearNetworkDBRunnable.cpp39
-rw-r--r--fbreader/src/database/networkdb/runnables/InitNetworkDBRunnable.cpp30
-rw-r--r--fbreader/src/database/networkdb/runnables/SaveNetworkLinkRunnable.cpp138
8 files changed, 0 insertions, 667 deletions
diff --git a/fbreader/src/database/networkdb/DBRunnables.h b/fbreader/src/database/networkdb/DBRunnables.h
deleted file mode 100644
index e9633f6..0000000
--- a/fbreader/src/database/networkdb/DBRunnables.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2004-2012 Geometer Plus <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-#ifndef __DBRUNNABLES_H__
-#define __DBRUNNABLES_H__
-
-#include "../sqldb/DBConnection.h"
-#include "../sqldb/DBCommand.h"
-#include "../sqldb/DBRunnable.h"
-
-#include "NetworkDBQuery.h"
-
-#include "../../network/NetworkLink.h"
-#include "../../network/opds/OPDSLink.h"
-
-class InitNetworkDBRunnable : public DBRunnable {
-
-public:
- InitNetworkDBRunnable(DBConnection &connection);
- bool run();
-
-private:
- DBConnection &myConnection;
-};
-
-class ClearNetworkDBRunnable : public DBRunnable {
-
-public:
- ClearNetworkDBRunnable(DBConnection &connection);
- bool run();
-
-private:
- DBConnection &myConnection;
-};
-
-class SaveNetworkLinkRunnable : public DBRunnable {
-
-public:
- SaveNetworkLinkRunnable(DBConnection &connection);
- bool run();
- void setNetworkLink(shared_ptr<NetworkLink> link);
-
-private:
- bool addNetworkLink();
- bool updateNetworkLink(int linkId);
- bool updateNetworkLinkUrls(int linkId);
-
-private:
- shared_ptr<NetworkLink> myNetworkLink;
-
- shared_ptr<DBCommand> myFindNetworkLinkId;
- shared_ptr<DBCommand> myAddNetworkLink;
- shared_ptr<DBCommand> myUpdateNetworkLink;
-
- shared_ptr<DBCommand> myFindNetworkLinkUrls;
- shared_ptr<DBCommand> myAddNetworkLinkUrl;
- shared_ptr<DBCommand> myUpdateNetworkLinkUrl;
- shared_ptr<DBCommand> myDeleteNetworkLinkUrl;
-
-};
-
-inline InitNetworkDBRunnable::InitNetworkDBRunnable(DBConnection &connection) : myConnection(connection) {}
-inline ClearNetworkDBRunnable::ClearNetworkDBRunnable(DBConnection &connection) : myConnection(connection) {}
-
-#endif /* __DBRUNNABLES_H__ */
diff --git a/fbreader/src/database/networkdb/NetworkDB.cpp b/fbreader/src/database/networkdb/NetworkDB.cpp
deleted file mode 100644
index f422643..0000000
--- a/fbreader/src/database/networkdb/NetworkDB.cpp
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2004-2012 Geometer Plus <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-#include <ZLibrary.h>
-#include <ZLDir.h>
-
-#include "NetworkDB.h"
-
-shared_ptr<NetworkDB> NetworkDB::ourInstance = 0;
-
-const std::string NetworkDB::DATABASE_NAME = "network.db";
-
-NetworkDB &NetworkDB::Instance() {
- if (ourInstance.isNull()) {
- ZLFile dir(databaseDirName());
- dir.directory(true);
- ZLFile file(databaseDirName() + ZLibrary::FileNameDelimiter + DATABASE_NAME);
- ourInstance = new NetworkDB(file.physicalFilePath());
- ourInstance->initDatabase();
- }
- return *ourInstance;
-}
-
-NetworkDB::NetworkDB(const std::string &path) : SQLiteDataBase(path), myInitialized(false) {
- initCommands();
-}
-
-NetworkDB::~NetworkDB() {
-}
-
-bool NetworkDB::initDatabase() {
- if (isInitialized()) {
- return true;
- }
-
- if (!open()) {
- return false;
- }
-
- myInitialized = true;
-
- shared_ptr<DBRunnable> runnable = new InitNetworkDBRunnable(connection());
- if (!executeAsTransaction(*runnable)) {
- myInitialized = false;
- close();
- return false;
- }
-
- return true;
-}
-
-void NetworkDB::initCommands() {
- myLoadNetworkLinks = SQLiteFactory::createCommand(NetworkDBQuery::LOAD_NETWORK_LINKS, connection());
- myLoadNetworkLinkUrls = SQLiteFactory::createCommand(NetworkDBQuery::LOAD_NETWORK_LINKURLS, connection(), "@link_id", DBValue::DBINT);
- myFindNetworkLinkId = SQLiteFactory::createCommand(NetworkDBQuery::FIND_NETWORK_LINK_ID, connection(), "@site_name", DBValue::DBTEXT);
- myDeleteNetworkLinkUrls = SQLiteFactory::createCommand(NetworkDBQuery::DELETE_NETWORK_LINKURLS, connection(), "@link_id", DBValue::DBINT);
- myDeleteNetworkLink = SQLiteFactory::createCommand(NetworkDBQuery::DELETE_NETWORK_LINK, connection(), "@link_id", DBValue::DBINT);
-
- mySaveNetworkLink = new SaveNetworkLinkRunnable(connection());
-}
-
-bool NetworkDB::clearDatabase() {
- if (!isInitialized()) {
- return false;
- }
- shared_ptr<DBRunnable> runnable = new ClearNetworkDBRunnable(connection());
- return executeAsTransaction(*runnable);
-}
-
-
-bool NetworkDB::saveNetworkLink(shared_ptr<NetworkLink> link) {
- if (!isInitialized()) {
- return false;
- }
- mySaveNetworkLink->setNetworkLink(link);
- bool result = executeAsTransaction(*mySaveNetworkLink);
- return result;
-}
-
-bool NetworkDB::loadNetworkLinks(std::vector<shared_ptr<NetworkLink> >& links) {
- shared_ptr<DBDataReader> reader = myLoadNetworkLinks->executeReader();
-
- links.clear();
-
- while (reader->next()) {
- if (reader->type(0) != DBValue::DBINT) {/* link_id */
- return false;
- }
- std::map<std::string,std::string> linkUrls;
- ((DBIntValue &) *myLoadNetworkLinkUrls->parameter("@link_id").value()) = reader->intValue(0);
- shared_ptr<DBDataReader> urlreader = myLoadNetworkLinkUrls->executeReader();
- long t = 0;
- while (urlreader->next()) {
- linkUrls[urlreader->textValue(0, std::string())] = urlreader->textValue(1, std::string());
- t = urlreader->intValue(2);
- }
- shared_ptr<ATOMUpdated> atomUpdated = new ATOMUpdated();
- atomUpdated->setLongSeconds_stupid(t);
- std::string iconUrl;
- if (linkUrls .count("icon") != 0) {
- iconUrl = linkUrls["icon"];
- linkUrls.erase("icon");
- }
- std::string siteName = reader->textValue(2, std::string());
- std::string predId = reader->textValue(5, std::string());
- std::string title = reader->textValue(1, std::string());
- std::string summary = reader->textValue(3, std::string());
- std::string language = reader->textValue(4, std::string());
- bool isEnabled = reader->intValue(6) == 1;
-
- shared_ptr<NetworkLink> link = new OPDSLink(siteName);
- link->setTitle(title);
- link->setSummary(summary);
- link->setLanguage(language);
- link->setIcon(iconUrl);
- link->setLinks(linkUrls);
- link->setPredefinedId(predId);
- link->setEnabled(isEnabled);
- link->setUpdated(atomUpdated);
- links.push_back(link);
- }
- return true;
-}
-
-bool NetworkDB::deleteNetworkLink(const std::string &siteName){
- ((DBTextValue &) *myFindNetworkLinkId->parameter("@site_name").value()) = siteName;
- shared_ptr<DBDataReader> reader = myFindNetworkLinkId->executeReader();
- if (reader.isNull() || !reader->next()) {
- return false;
- }
- int linkId = reader->intValue(0);
- ((DBIntValue &) *myDeleteNetworkLink->parameter("@link_id").value()) = linkId;
- ((DBIntValue &) *myDeleteNetworkLinkUrls->parameter("@link_id").value()) = linkId;
- return myDeleteNetworkLinkUrls->execute() && myDeleteNetworkLink->execute();
-
-}
diff --git a/fbreader/src/database/networkdb/NetworkDB.h b/fbreader/src/database/networkdb/NetworkDB.h
deleted file mode 100644
index d4761a6..0000000
--- a/fbreader/src/database/networkdb/NetworkDB.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2004-2012 Geometer Plus <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-#ifndef __NETWORKDB_H__
-#define __NETWORKDB_H__
-
-#include <set>
-#include <map>
-#include <deque>
-
-#include "../sqldb/implsqlite/SQLiteDataBase.h"
-#include "DBRunnables.h"
-
-class NetworkDB : public SQLiteDataBase {
-
-public:
- static const std::string DATABASE_NAME;
-
- static NetworkDB &Instance();
-
-private:
- static shared_ptr<NetworkDB> ourInstance;
-
- NetworkDB(const std::string &path);
-
-public:
- virtual ~NetworkDB();
-
-public:
- bool initDatabase();
- bool isInitialized() const;
- bool clearDatabase();
-
- bool saveNetworkLink(shared_ptr<NetworkLink> link);
- bool loadNetworkLinks(std::vector<shared_ptr<NetworkLink> >& links);
- bool deleteNetworkLink(const std::string &siteName);
-
-private:
- void initCommands();
-
-private:
- bool myInitialized;
-
- shared_ptr<DBCommand> myLoadNetworkLinks;
- shared_ptr<DBCommand> myFindNetworkLinkId;
- shared_ptr<DBCommand> myDeleteNetworkLink;
- shared_ptr<DBCommand> myDeleteNetworkLinkUrls;
- shared_ptr<DBCommand> myLoadNetworkLinkUrls;
-
- shared_ptr<SaveNetworkLinkRunnable> mySaveNetworkLink;
-
-private: // disable copying
- NetworkDB(const NetworkDB &);
- const NetworkDB &operator = (const NetworkDB &);
-};
-
-
-inline bool NetworkDB::isInitialized() const { return myInitialized; }
-
-#endif /* __NETWORKDB_H__ */
diff --git a/fbreader/src/database/networkdb/NetworkDBQuery.cpp b/fbreader/src/database/networkdb/NetworkDBQuery.cpp
deleted file mode 100644
index a8771cb..0000000
--- a/fbreader/src/database/networkdb/NetworkDBQuery.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2004-2012 Geometer Plus <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-#include "NetworkDBQuery.h"
-
-const std::string NetworkDBQuery::INIT_DATABASE = \
- " CREATE TABLE IF NOT EXISTS Links( " \
- " link_id INTEGER PRIMARY KEY, " \
- " title TEXT NOT NULL, " \
- " site_name TEXT NOT NULL, " \
- " summary TEXT, " \
- " language TEXT, " \
- " predefined_id TEXT, " \
- " is_enabled INTEGER " \
- "); " \
- " " \
- "CREATE TABLE IF NOT EXISTS LinkUrls( " \
- " key TEXT NOT NULL, " \
- " link_id INTEGER NOT NULL REFERENCES Links(link_id), " \
- " url TEXT, " \
- " update_time INTEGER, " \
- " CONSTRAINT LinkUrls_PK PRIMARY KEY (key, link_id) " \
- "); ";
-
-const std::string NetworkDBQuery::CLEAR_DATABASE = \
- "DROP TABLE Links; " \
- "DROP TABLE LinkUrls; ";
-
-
-const std::string NetworkDBQuery::FIND_NETWORK_LINK_ID = "SELECT link_id, predefined_id FROM Links WHERE site_name = @site_name; ";
-const std::string NetworkDBQuery::ADD_NETWORK_LINK = \
- "INSERT INTO Links (title, site_name, summary, language, predefined_id, is_enabled) " \
- " VALUES ( " \
- " @title, " \
- " @site_name, " \
- " @summary, " \
- " nullif(@language,\"\"), " \
- " nullif(@predefined_id,\"\"), " \
- " @is_enabled " \
- " ); " \
- " " \
- "SELECT last_insert_rowid() AS link_id; ";
-
-const std::string NetworkDBQuery::DELETE_NETWORK_LINK = \
- "DELETE FROM Links WHERE link_id = @link_id; ";
-
-const std::string NetworkDBQuery::UPDATE_NETWORK_LINK = \
- "UPDATE Links SET " \
- " title = @title, " \
- " summary = @summary, " \
- " language = nullif(@language,\"\"), " \
- " predefined_id = nullif(@predefined_id,\"\"), " \
- " is_enabled = @is_enabled " \
- "WHERE " \
- " link_id = @link_id; ";
-
-const std::string NetworkDBQuery::ADD_NETWORK_LINKURL = \
- "INSERT INTO LinkUrls (key, link_id, url, update_time) " \
- " VALUES ( " \
- " @key, " \
- " @link_id, " \
- " @url, " \
- " @update_time " \
- " ); ";
-
-const std::string NetworkDBQuery::FIND_NETWORK_LINKURLS = "SELECT key, url, update_time FROM LinkUrls WHERE link_id = @link_id; ";
-
-const std::string NetworkDBQuery::UPDATE_NETWORK_LINKURL = \
- "UPDATE LinkUrls SET " \
- " url = @url, " \
- " update_time = @update_time " \
- "WHERE " \
- " link_id = @link_id AND key = @key; ";
-
-const std::string NetworkDBQuery::DELETE_NETWORK_LINKURLS = \
- "DELETE FROM LinkUrls " \
- "WHERE " \
- " link_id = @link_id; ";
-
-const std::string NetworkDBQuery::DELETE_NETWORK_LINKURL = \
- "DELETE FROM LinkUrls " \
- "WHERE " \
- " link_id = @link_id AND key = @key; ";
-
-const std::string NetworkDBQuery::LOAD_NETWORK_LINKS = "SELECT link_id, title, site_name, summary, language, predefined_id, is_enabled FROM Links; ";
-
-const std::string NetworkDBQuery::LOAD_NETWORK_LINKURLS = "SELECT key, url, update_time FROM LinkUrls WHERE link_id = @link_id; ";
diff --git a/fbreader/src/database/networkdb/NetworkDBQuery.h b/fbreader/src/database/networkdb/NetworkDBQuery.h
deleted file mode 100644
index 931705e..0000000
--- a/fbreader/src/database/networkdb/NetworkDBQuery.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2004-2012 Geometer Plus <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-#ifndef __NETWORKDBQUERY_H__
-#define __NETWORKDBQUERY_H__
-
-#include <string>
-
-class NetworkDBQuery {
-
-public:
- static const std::string INIT_DATABASE;
- static const std::string CLEAR_DATABASE;
-
- static const std::string FIND_NETWORK_LINK_ID;
- static const std::string ADD_NETWORK_LINK;
- static const std::string UPDATE_NETWORK_LINK;
- static const std::string DELETE_NETWORK_LINK;
-
- static const std::string ADD_NETWORK_LINKURL;
- static const std::string DELETE_NETWORK_LINKURLS;
- static const std::string FIND_NETWORK_LINKURLS;
- static const std::string DELETE_NETWORK_LINKURL;
- static const std::string UPDATE_NETWORK_LINKURL;
-
- static const std::string LOAD_NETWORK_LINKS;
- static const std::string LOAD_NETWORK_LINKURLS;
-
-private: // disable creation Instances
- NetworkDBQuery();
-};
-#endif /* __NETWORKDBQUERY_H__ */
diff --git a/fbreader/src/database/networkdb/runnables/ClearNetworkDBRunnable.cpp b/fbreader/src/database/networkdb/runnables/ClearNetworkDBRunnable.cpp
deleted file mode 100644
index fe79ed3..0000000
--- a/fbreader/src/database/networkdb/runnables/ClearNetworkDBRunnable.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2009-2012 Geometer Plus <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-#include "../DBRunnables.h"
-#include "../../sqldb/implsqlite/SQLiteFactory.h"
-
-bool ClearNetworkDBRunnable::run() {
- shared_ptr<DBCommand> cmd;
-
- cmd = SQLiteFactory::createCommand(NetworkDBQuery::CLEAR_DATABASE, myConnection);
- if (!cmd->execute()) {
- return false;
- }
-
- cmd = SQLiteFactory::createCommand(NetworkDBQuery::INIT_DATABASE, myConnection);
- if (!cmd->execute()) {
- return false;
- }
-
- return true;
-}
-
-
diff --git a/fbreader/src/database/networkdb/runnables/InitNetworkDBRunnable.cpp b/fbreader/src/database/networkdb/runnables/InitNetworkDBRunnable.cpp
deleted file mode 100644
index d0730b7..0000000
--- a/fbreader/src/database/networkdb/runnables/InitNetworkDBRunnable.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2009-2012 Geometer Plus <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-#include "../DBRunnables.h"
-#include "../../sqldb/implsqlite/SQLiteFactory.h"
-
-bool InitNetworkDBRunnable::run() {
- shared_ptr<DBCommand> cmd;
- cmd = SQLiteFactory::createCommand(NetworkDBQuery::INIT_DATABASE, myConnection);
- if (!cmd->execute()) {
- return false;
- }
- return true;
-}
diff --git a/fbreader/src/database/networkdb/runnables/SaveNetworkLinkRunnable.cpp b/fbreader/src/database/networkdb/runnables/SaveNetworkLinkRunnable.cpp
deleted file mode 100644
index 4c80499..0000000
--- a/fbreader/src/database/networkdb/runnables/SaveNetworkLinkRunnable.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (C) 2009-2012 Geometer Plus <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-#include "../DBRunnables.h"
-#include "../../../network/NetworkLink.h"
-#include "../../sqldb/implsqlite/SQLiteFactory.h"
-
-SaveNetworkLinkRunnable::SaveNetworkLinkRunnable(DBConnection &connection) {
- myFindNetworkLinkId = SQLiteFactory::createCommand(NetworkDBQuery::FIND_NETWORK_LINK_ID, connection, "@site_name", DBValue::DBTEXT);
- myAddNetworkLink = SQLiteFactory::createCommand(NetworkDBQuery::ADD_NETWORK_LINK, connection, "@title", DBValue::DBTEXT, "@site_name", DBValue::DBTEXT, "@summary", DBValue::DBTEXT, "@language", DBValue::DBTEXT, "@predefined_id", DBValue::DBTEXT, "@is_enabled", DBValue::DBINT);
- myUpdateNetworkLink = SQLiteFactory::createCommand(NetworkDBQuery::UPDATE_NETWORK_LINK, connection, "@title", DBValue::DBTEXT, "@summary", DBValue::DBTEXT, "@language", DBValue::DBTEXT, "@predefined_id", DBValue::DBTEXT, "@is_enabled", DBValue::DBINT, "@link_id", DBValue::DBINT);
-
- myFindNetworkLinkUrls = SQLiteFactory::createCommand(NetworkDBQuery::FIND_NETWORK_LINKURLS, connection, "@link_id", DBValue::DBINT);
- myAddNetworkLinkUrl = SQLiteFactory::createCommand(NetworkDBQuery::ADD_NETWORK_LINKURL, connection, "@key", DBValue::DBTEXT, "@link_id", DBValue::DBINT, "@url", DBValue::DBTEXT, "@update_time", DBValue::DBINT);
- myUpdateNetworkLinkUrl = SQLiteFactory::createCommand(NetworkDBQuery::UPDATE_NETWORK_LINKURL, connection, "@key", DBValue::DBTEXT, "@link_id", DBValue::DBINT, "@url", DBValue::DBTEXT, "@update_time", DBValue::DBINT);
- myDeleteNetworkLinkUrl = SQLiteFactory::createCommand(NetworkDBQuery::DELETE_NETWORK_LINKURL, connection, "@key", DBValue::DBTEXT, "@link_id", DBValue::DBINT);
-}
-
-bool SaveNetworkLinkRunnable::run() {
- if (myNetworkLink.isNull()) {
- return false;
- }
- ((DBTextValue &) *myFindNetworkLinkId->parameter("@site_name").value()) = myNetworkLink->getSiteName();
- shared_ptr<DBDataReader> reader = myFindNetworkLinkId->executeReader();
- if (reader.isNull() || !reader->next()) {
- return addNetworkLink();
- } else if (myNetworkLink->isPredefined()) {
- return updateNetworkLink(reader->intValue(0)) && updateNetworkLinkUrls(reader->intValue(0));
- } else {
- //TODO implement for custom links
- return false;
- }
- return false;
-}
-
-bool SaveNetworkLinkRunnable::addNetworkLink() {
- ((DBTextValue &) *myAddNetworkLink->parameter("@title").value()) = myNetworkLink->getTitle();
- ((DBTextValue &) *myAddNetworkLink->parameter("@site_name").value()) = myNetworkLink->getSiteName();
- ((DBTextValue &) *myAddNetworkLink->parameter("@summary").value()) = myNetworkLink->getSummary();
- ((DBTextValue &) *myAddNetworkLink->parameter("@language").value()) = myNetworkLink->getLanguage();
- ((DBTextValue &) *myAddNetworkLink->parameter("@predefined_id").value()) = myNetworkLink->getPredefinedId();
- ((DBIntValue &) *myAddNetworkLink->parameter("@is_enabled").value()) = myNetworkLink->isEnabled();
- shared_ptr<DBValue> dbLinkId = myAddNetworkLink->executeScalar();
- if (dbLinkId.isNull() || dbLinkId->type() != DBValue::DBINT || ((DBIntValue &) *dbLinkId).value() == 0) {
- return false;
- }
-
- bool allExecuted = true;
- std::map<std::string,std::string> tempLinks = myNetworkLink->getLinks();
- if (myNetworkLink->getIcon() != std::string()) {
- tempLinks["icon"] = myNetworkLink->getIcon();
- }
- long t = 0;
- if (myNetworkLink->getUpdated() != 0) {
- t = myNetworkLink->getUpdated()->getLongSeconds_stupid();
- }
- for (std::map<std::string,std::string>::iterator it = tempLinks.begin(); it != tempLinks.end(); ++it) {
- ((DBTextValue &) *myAddNetworkLinkUrl->parameter("@key").value()) = it->first;
- ((DBTextValue &) *myAddNetworkLinkUrl->parameter("@url").value()) = it->second;
- ((DBIntValue &) *myAddNetworkLinkUrl->parameter("@link_id").value()) = ((DBIntValue &) *dbLinkId).value();
- ((DBIntValue &) *myAddNetworkLinkUrl->parameter("@update_time").value()) = t;
- allExecuted = allExecuted && myAddNetworkLinkUrl->execute();
- }
- return allExecuted;
-}
-
-bool SaveNetworkLinkRunnable::updateNetworkLink(int linkId) {
- ((DBTextValue &) *myUpdateNetworkLink->parameter("@title").value()) = myNetworkLink->getTitle();
- ((DBTextValue &) *myUpdateNetworkLink->parameter("@summary").value()) = myNetworkLink->getSummary();
- ((DBTextValue &) *myUpdateNetworkLink->parameter("@language").value()) = myNetworkLink->getLanguage();
- ((DBTextValue &) *myUpdateNetworkLink->parameter("@predefined_id").value()) = myNetworkLink->getPredefinedId();
- ((DBIntValue &) *myUpdateNetworkLink->parameter("@is_enabled").value()) = myNetworkLink->isEnabled();
- ((DBIntValue &) *myUpdateNetworkLink->parameter("@link_id").value()) = linkId;
-
- return myUpdateNetworkLink->execute();
-}
-
-bool SaveNetworkLinkRunnable::updateNetworkLinkUrls(int linkId) {
- bool allExecuted = true;
- ((DBIntValue &) *myFindNetworkLinkUrls->parameter("@link_id").value()) = linkId;
- shared_ptr<DBDataReader> reader = myFindNetworkLinkUrls->executeReader();
- std::map<std::string,std::string> linksToCheck = myNetworkLink->getLinks();
- if (!myNetworkLink->getIcon().empty()) {
- linksToCheck["icon"] = myNetworkLink->getIcon();
- }
- long t = 0;
- if (!myNetworkLink->getUpdated().isNull()) {
- t = myNetworkLink->getUpdated()->getLongSeconds_stupid();
- }
- while (reader->next()) {
- if (reader->type(0) != DBValue::DBTEXT || reader->type(1) != DBValue::DBTEXT) {
- return false;
- }
- std::string key = reader->textValue(0, std::string());
-// std::string url = reader->textValue(1, std::string());
- if (linksToCheck.count(key) == 0) {
- ((DBTextValue &) *myDeleteNetworkLinkUrl->parameter("@key").value()) = key;
- ((DBIntValue &) *myDeleteNetworkLinkUrl->parameter("@link_id").value()) = linkId;
- allExecuted = allExecuted && myDeleteNetworkLinkUrl->execute();
- } else {
- ((DBTextValue &) *myUpdateNetworkLinkUrl->parameter("@key").value()) = key;
- ((DBTextValue &) *myUpdateNetworkLinkUrl->parameter("@url").value()) = linksToCheck[key];
- ((DBIntValue &) *myUpdateNetworkLinkUrl->parameter("@link_id").value()) = linkId;
- ((DBIntValue &) *myUpdateNetworkLinkUrl->parameter("@update_time").value()) = t;
- linksToCheck.erase(key);
- allExecuted = allExecuted && myUpdateNetworkLinkUrl->execute();
- }
- }
-
- for (std::map<std::string,std::string>::iterator it = linksToCheck.begin(); it != linksToCheck.end(); ++it) {
- ((DBTextValue &) *myAddNetworkLinkUrl->parameter("@key").value()) = it->first;
- ((DBTextValue &) *myAddNetworkLinkUrl->parameter("@url").value()) = it->second;
- ((DBIntValue &) *myAddNetworkLinkUrl->parameter("@link_id").value()) = linkId;
- ((DBIntValue &) *myAddNetworkLinkUrl->parameter("@update_time").value()) = t;
- allExecuted = allExecuted && myAddNetworkLinkUrl->execute();
- }
- return allExecuted;
-}
-
-void SaveNetworkLinkRunnable::setNetworkLink(shared_ptr<NetworkLink> link) {
- myNetworkLink = link;
-}