From: APTX Date: Wed, 10 Apr 2013 15:10:39 +0000 (+0200) Subject: RequestHandler now handles updates with aid&epno/epmin. Uses lid for updates with... X-Git-Url: https://gitweb.tyo.aptx.org/?a=commitdiff_plain;h=e93b79b2471de6ababc14a1ba858d7330943cebc;p=localmylist.git RequestHandler now handles updates with aid&epno/epmin. Uses lid for updates with fid, if lid is available. --- diff --git a/localmylist/database.cpp b/localmylist/database.cpp index dd2802c..0491c62 100644 --- a/localmylist/database.cpp +++ b/localmylist/database.cpp @@ -662,6 +662,38 @@ bool Database::setFile(const File &file) return exec(q); } +bool Database::updateFilesFromPendingMyListUpdate(const PendingMyListUpdate &request) +{ + QSqlQuery &q = prepare( + "UPDATE file f SET " + " my_watched = CASE WHEN pmu.set_my_watched = true THEN pmu.my_watched ELSE f.my_watched END, " + " my_state = CASE WHEN pmu.set_my_watched = true THEN pmu.my_state ELSE f.my_state END, " + " my_file_state = CASE WHEN pmu.set_my_file_state = true THEN pmu.my_file_state ELSE f.my_file_state END, " + " my_storage = CASE WHEN pmu.set_my_storage = true THEN pmu.my_storage ELSE f.my_storage END, " + " my_source = CASE WHEN pmu.set_my_source = true THEN pmu.my_source ELSE f.my_source END, " + " my_other = CASE WHEN pmu.set_my_other = true THEN pmu.my_other ELSE f.my_other END " + " FROM episode e, (SELECT * FROM pending_mylist_update pmu WHERE update_id = :updateId) pmu " + " WHERE e.eid = f.eid " + " AND f.aid = pmu.aid " + " AND e.type = pmu.eptype " + " AND e.epno BETWEEN " + " CASE " + " WHEN pmu.epno = 0 THEN 1 " + " WHEN pmu.epmin = 0 AND pmu.epno <> 0 THEN pmu.epno " + " ELSE pmu.epmin " + " END " + " AND " + " CASE " + " WHEN pmu.epno = 0 THEN 1000000 " + " ELSE pmu.epno " + " END "); + // The 1000000 is used to select all episodes + // without having to check how many there really are + q.bindValue(":updateId", request.updateId); + + return exec(q); +} + bool Database::addTitle(const AnimeTitle &title) { QSqlQuery &q = prepare("INSERT INTO anime_title VALUES(:aid, :type, :language, :title)"); @@ -952,6 +984,7 @@ bool Database::addPendingMyListUpdate(const PendingMyListUpdate &request) " DEFAULT, DEFAULT, DEFAULT, DEFAULT) "); q.bindValue(":fid", request.fid); + // lid is ignored on purpose q.bindValue(":aid", request.aid); q.bindValue(":epno", request.epno); q.bindValue(":epmin", request.epmin); @@ -977,11 +1010,15 @@ bool Database::addPendingMyListUpdate(const PendingMyListUpdate &request) PendingMyListUpdate Database::getPendingMyListUpdate(qint64 updateId) { QSqlQuery &q = prepare( - "SELECT update_id, fid, aid, epno, epmin, eptype, set_my_watched, my_watched, set_my_state, my_state, " - " set_my_file_state, my_file_state, set_my_storage, my_storage, set_my_source, " - " my_source, set_my_other, my_other, set_vote, vote, added, started, finished " - " FROM pending_mylist_update " - " WHERE update_id = :updateId "); + "SELECT pmu.update_id, pmu.fid, pmu.aid, pmu.epno, pmu.epmin, pmu.eptype, " + " pmu.set_my_watched, pmu.my_watched, pmu.set_my_state, pmu.my_state, " + " pmu.set_my_file_state, pmu.my_file_state, pmu.set_my_storage, " + " pmu.my_storage, pmu.set_my_source, pmu.my_source, pmu.set_my_other, " + " pmu.my_other, pmu.set_vote, pmu.vote, pmu.added, pmu.started, " + " pmu.finished, f.lid " + " FROM pending_mylist_update pmu " + " LEFT JOIN file f ON f.fid = pmu.fid " + " WHERE update_id = :updateId"); q.bindValue(":updateId", updateId); @@ -1012,7 +1049,8 @@ QList Database::getPendingMyListUpdateBatch(int limit) " LIMIT :limit) " " RETURNING update_id, fid, aid, epno, epmin, eptype, set_my_watched, my_watched, set_my_state, " " my_state, set_my_file_state, my_file_state, set_my_storage, my_storage, " - " set_my_source, my_source, set_my_other, my_other, set_vote, vote, added, started, finished "); + " set_my_source, my_source, set_my_other, my_other, set_vote, vote, added, started, finished, " + " (SELECT lid FROM file f WHERE f.fid = pmu.fid)"); q.bindValue(":limit", limit); @@ -1465,6 +1503,8 @@ void Database::readPendingMyListUpdateData(SqlResultIteratorInterface &query, Pe data.vote = query.value(offset++).toDouble(); data.added = query.value(offset++).toDateTime(); data.started = query.value(offset++).toDateTime(); + data.finished = query.value(offset++).toDateTime(); + data.lid = query.value(offset++).toInt(); } QString Database::animeFields() @@ -1777,7 +1817,7 @@ void Database::handleNotification(const QString &name) #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) Q_UNUSED(source); #endif - qDebug() << "Recieved notification" << name; + qDebug() << "Recieved notification" << name << payload; if (name == "new_pending_request") { emit newPendingRequest(); diff --git a/localmylist/database.h b/localmylist/database.h index 71969ff..194a6da 100644 --- a/localmylist/database.h +++ b/localmylist/database.h @@ -73,6 +73,8 @@ public slots: bool setEpisode(const LocalMyList::Episode &episode); bool setFile(const LocalMyList::File &file); + bool updateFilesFromPendingMyListUpdate(const PendingMyListUpdate &request); + bool addTitle(const LocalMyList::AnimeTitle &title); bool addAnime(const LocalMyList::Anime &anime); bool addEpisode(const LocalMyList::Episode &episode); diff --git a/localmylist/databaseclasses.cpp b/localmylist/databaseclasses.cpp index cce522f..c49a075 100644 --- a/localmylist/databaseclasses.cpp +++ b/localmylist/databaseclasses.cpp @@ -90,6 +90,7 @@ PendingRequest::PendingRequest() PendingMyListUpdate::PendingMyListUpdate() { fid = 0; + lid = 0; aid = 0; epno = 0; epmin = 0; diff --git a/localmylist/databaseclasses.h b/localmylist/databaseclasses.h index daddc02..c3cd270 100644 --- a/localmylist/databaseclasses.h +++ b/localmylist/databaseclasses.h @@ -172,6 +172,7 @@ struct LOCALMYLISTSHARED_EXPORT PendingMyListUpdate { qint64 updateId; int fid; + int lid; int aid; int epno; int epmin; diff --git a/localmylist/requesthandler.cpp b/localmylist/requesthandler.cpp index a99433e..27fac44 100644 --- a/localmylist/requesthandler.cpp +++ b/localmylist/requesthandler.cpp @@ -138,7 +138,26 @@ void RequestHandler::handleMyListUpdates() foreach (const PendingMyListUpdate &request, requests) { - MyListAddCommand cmd(request.fid, true); + MyListAddCommand cmd; + + cmd.setEdit(true); + + if (request.aid) + { + cmd.setAid(request.aid); + cmd.setEpno(request.epno); + if (request.epmin) + cmd.setEpmin(request.epmin); + cmd.setEptype(request.eptype); + } + else if (request.lid) + { + cmd.setLid(request.lid); + } + else + { + cmd.setFid(request.fid); + } if (request.setMyWatched) { @@ -532,14 +551,6 @@ void RequestHandler::myListEditReplyRecieved(bool success) RaiiTransaction t(db); - File file = db->getFile(reply->command().fid()); - - if (!file.fid) - { - qWarning("Updated file not in DB"); - return; - } - PendingMyListUpdate request = db->getPendingMyListUpdate(id); if (!request.updateId) @@ -548,25 +559,41 @@ void RequestHandler::myListEditReplyRecieved(bool success) return; } - if (request.setMyWatched) - file.myWatched = request.myWatched; - if (request.setMyState) - file.myState = request.myState; - if (request.setMyFileState) - file.myFileState = request.myFileState; - if (request.setMySource) - file.mySource = request.mySource.isNull() ? QString("") : request.mySource; - if (request.setMyStorage) - file.myStorage = request.myStorage.isNull() ? QString("") : request.myStorage; - if (request.setMyOther) - file.myOther = request.myOther.isNull() ? QString("") : request.myOther; + if (request.aid) + { + db->updateFilesFromPendingMyListUpdate(request); + } + else + { + File file = db->getFile(reply->command().fid()); - file.myUpdate = QDateTime::currentDateTime(); + if (!file.fid) + { + qWarning("Updated file not in DB"); + return; + } - db->setFile(file); + if (request.setMyWatched) + file.myWatched = request.myWatched; + if (request.setMyState) + file.myState = request.myState; + if (request.setMyFileState) + file.myFileState = request.myFileState; + if (request.setMySource) + file.mySource = request.mySource.isNull() ? QString("") : request.mySource; + if (request.setMyStorage) + file.myStorage = request.myStorage.isNull() ? QString("") : request.myStorage; + if (request.setMyOther) + file.myOther = request.myOther.isNull() ? QString("") : request.myOther; + + file.myUpdate = QDateTime::currentDateTime(); + + db->setFile(file); + } qDebug() << "Clearing update_id" << id; db->clearPendingMyListUpdate(request); + t.commit(); }