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)");
" 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);
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);
" 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);
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()
#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();
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)
{
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)
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();
}