]> Some of my projects - localmylist.git/commitdiff
Add a sequence numbering udp client instances.
authorAPTX <marek321@gmail.com>
Mon, 13 May 2013 19:37:16 +0000 (21:37 +0200)
committerAPTX <marek321@gmail.com>
Mon, 13 May 2013 19:37:16 +0000 (21:37 +0200)
localmylist/database.cpp
localmylist/database.h
localmylist/mylist.cpp
localmylist/mylist.h
localmylist/share/schema/schema.sql

index a2f3ba63b60b78791f61fdc254b6da9f03680f2d..f3c47f4bb4c95293714046f73e82c00337baae95 100644 (file)
@@ -1413,6 +1413,23 @@ bool Database::log(const QString &message, int type)
        return exec(q);
 }
 
+int Database::getNextUdpClientId()
+{
+       QSqlQuery &q = prepare("SELECT nextval('udp_client_session')");
+
+       if (!exec(q))
+               return 0;
+
+       if (!q.next())
+               return 0;
+
+       int ret = q.value(0).toInt();
+
+       q.finish();
+
+       return ret;
+}
+
 QSqlDatabase Database::connection() const
 {
        return d->db;
index 056216e77436aed4354e8ec0d2ef2cdf43bb0f49..cf4b5a97aba6377fe017f6bca451df5a0a433fde 100644 (file)
@@ -125,6 +125,8 @@ public slots:
 
        bool log(const QString &message, int type = 1);
 
+       int getNextUdpClientId();
+
        QSqlDatabase connection() const;
 
        QSqlQuery &prepare(const char *const sql);
index 96184896a506533db6a004157442a311f8334a93..fa8f37e4d7a2620d31412aa6be7a181322b0b131 100644 (file)
@@ -35,6 +35,8 @@ MyList::MyList()
        db = new Database("main");
        connect(db, SIGNAL(connected()), this, SLOT(setupHostInfo()));
        m_settings = new Settings(db, this);
+
+       m_udpClientId = 0;
 }
 
 MyList::~MyList()
@@ -66,6 +68,11 @@ int MyList::runningTaskCount()
        return tasks.count();
 }
 
+int MyList::udpClientId() const
+{
+       return m_udpClientId;
+}
+
 QSettings *MyList::defaultLocalQSettings() const
 {
        return m_defaultLocalQSettings;
@@ -157,6 +164,13 @@ void MyList::setupUdpClient()
        if (!db->isConnected())
                return;
 
+       if (!isUdpHost())
+               return;
+
+       m_udpClientId = database()->getNextUdpClientId();
+
+       Q_ASSERT_X(m_udpClientId, "MyList", "Failed to get UDP Client Id");
+
        using namespace ::AniDBUdpClient;
        Client::instance()->setHost(m_settings->get("udpClientHost").toString());
        Client::instance()->setHostPort(m_settings->get("udpClientHostPort").toUInt());
index ce29c8c0a9ea6b176a584b8e84f19dc388f8ca99..3489ebdd60ab289e0bb2719504e9cf6ebeda7653 100644 (file)
@@ -20,7 +20,8 @@ class RequestHandler;
 class RenameHandler;
 class DirectoryWatcher;
 
-class LOCALMYLISTSHARED_EXPORT MyList : public QObject {
+class LOCALMYLISTSHARED_EXPORT MyList : public QObject
+{
        Q_OBJECT
        Q_PROPERTY(LocalMyList::Database *database READ database)
        Q_PROPERTY(LocalMyList::Settings *settings READ settings)
@@ -29,6 +30,7 @@ class LOCALMYLISTSHARED_EXPORT MyList : public QObject {
        Q_PROPERTY(int hostId READ hostId)
        Q_PROPERTY(bool isUdpHost READ isUdpHost)
        Q_PROPERTY(int runningTaskCount READ runningTaskCount)
+       Q_PROPERTY(int udpClientId READ udpClientId)
 
 public:
        MyList();
@@ -47,6 +49,8 @@ public:
 
        int runningTaskCount();
 
+       int udpClientId() const;
+
        QSettings *defaultLocalQSettings() const;
 
 public slots:
@@ -99,6 +103,8 @@ private:
 
        QSettings *m_defaultLocalQSettings;
 
+       int m_udpClientId;
+
 public:
        static MyList *instance();
        static void destroy();
index 040a98f1589c1fe9c03666b2b044b216b4ac6986..90903af947ddd7f41dde48ee8c2300da88ff8f88 100644 (file)
@@ -369,3 +369,7 @@ CREATE OR REPLACE RULE file_location_update_notify_rule AS
 -- Delete rules
 CREATE OR REPLACE RULE file_location_delete_notify_rule AS
        ON DELETE TO file_location DO SELECT pg_notify('file_location_delete', old.location_id::text || ',' || old.fid::text);
+
+
+-- Sequences
+CREATE SEQUENCE udp_client_session;