OpenFileData Database::firstUnwatchedByAid(int aid)
{
- QSqlQuery &q = prepare(
- "SELECT f.fid, a.title_romaji, e.title_english, e.epno, fl.path, fl.host_id, "
- " CASE WHEN split_part(f.resolution, 'x', 1) = '' OR split_part(f.resolution, 'x', 2) = '' THEN 0 ELSE split_part(f.resolution, 'x', 1)::int * split_part(f.resolution, 'x', 2)::int END pixels "
- " FROM file f "
- " LEFT JOIN anime a ON f.aid = a.aid "
- " LEFT JOIN episode e ON f.eid = e.eid "
- " LEFT JOIN episode_type et ON et.type = e.type "
- " LEFT JOIN file_location fl ON fl.fid = f.fid "
- " WHERE f.my_watched IS NULL "
- " AND f.aid = :aid "
- " AND fl.path IS NOT NULL "
- " AND NOT EXISTS (SELECT 1 FROM file WHERE eid = e.eid AND my_watched IS NOT NULL LIMIT 1) "
- "ORDER BY et.ordering ASC, e.epno ASC, pixels DESC, f.version DESC ");
+ QSqlQuery &q = prepare(R"(
+ SELECT f.fid, a.title_romaji, e.title_english, e.epno, fl.path, fl.host_id,
+ CASE WHEN split_part(f.resolution, 'x', 1) = '' OR split_part(f.resolution, 'x', 2) = '' THEN 0 ELSE split_part(f.resolution, 'x', 1)::int * split_part(f.resolution, 'x', 2)::int END pixels
+ FROM file f
+ LEFT JOIN anime a ON f.aid = a.aid
+ LEFT JOIN episode e ON f.eid = e.eid
+ LEFT JOIN episode_type et ON et.type = e.type
+ LEFT JOIN file_location fl ON fl.fid = f.fid
+ WHERE f.my_watched IS NULL
+ AND f.aid = :aid
+ AND fl.path IS NOT NULL
+ AND NOT EXISTS (SELECT 1 FROM file WHERE eid = e.eid AND my_watched IS NOT NULL LIMIT 1)
+ AND NOT EXISTS (SELECT 1 FROM pending_mylist_update pmu
+ WHERE pmu.finished IS NULL
+ AND pmu.set_my_watched = true
+ AND pmu.my_watched IS NOT NULL
+ AND pmu.fid = f.fid)
+ ORDER BY et.ordering ASC, e.epno ASC, pixels DESC, f.version DESC
+ )");
q.bindValue(":aid", aid);
return readOpenFileData(q);