From: APTX Date: Sat, 15 Mar 2014 15:05:47 +0000 (+0100) Subject: Add myListSearch* methods. X-Git-Url: https://gitweb.tyo.aptx.org/?a=commitdiff_plain;h=3a2e14db7598092714a3a79c55a2315c3b04a884;p=localmylist.git Add myListSearch* methods. These allow for title search simmilar to animeSearch* but limit the results to entries in your MyList --- diff --git a/localmylist/database.cpp b/localmylist/database.cpp index 0a827ae..b853619 100644 --- a/localmylist/database.cpp +++ b/localmylist/database.cpp @@ -210,6 +210,74 @@ QList Database::animeSearchSimmilar(const QString &query, int limit) return ret; } +AnimeTitle Database::myListSearchBestMatch(const QString &query) +{ + QList ret = myListSearch(query, 1); + if (ret.count()) + return ret[0]; + return AnimeTitle(); +} + +QList Database::myListSearch(const QString &query, int limit) +{ + QList ret; + + QSqlQuery &q = prepare(R"( + SELECT at.title_id, at.aid, at.type, at.language, at.title + FROM anime_title at + AND (SELECT count(f.fid) FROM file f WHERE f.aid = at.aid) > 0 + ORDER BY at.title <-> :query ASC + LIMIT :limit +)"); + q.bindValue(":query", query); + q.bindValue(":limit", limit); + + if (!exec(q)) + return ret; + + QSqlResultIterator it(q); + while (q.next()) + { + AnimeTitle data; + readAnimeTitleData(it, data); + ret << data; + } + + q.finish(); + + return ret; +} + +QList Database::myListSearchSimmilar(const QString &query, int limit) +{ + QList ret; + + QSqlQuery &q = prepare(R"( + SELECT at.title_id, at.aid, at.type, at.language, at.title + FROM anime_title at + WHERE (SELECT count(f.fid) FROM file f WHERE f.aid = at.aid) > 0 + ORDER BY at.title <-> :query ASC + LIMIT :limit +)"); + q.bindValue(":query", query); + q.bindValue(":limit", limit); + + if (!exec(q)) + return ret; + + QSqlResultIterator it(q); + while (q.next()) + { + AnimeTitle data; + readAnimeTitleData(it, data); + ret << data; + } + + q.finish(); + + return ret; +} + OpenFileData Database::firstUnwatchedByExactTitle(const QString &title) { QSqlQuery &q = prepare( diff --git a/localmylist/database.h b/localmylist/database.h index eb3d088..902ee37 100644 --- a/localmylist/database.h +++ b/localmylist/database.h @@ -54,9 +54,19 @@ public slots: QList animeSearch(const QString &query, int limit = 100); QList animeSearchSimmilar(const QString &query, int limit = 5); + // These are like the animeSearch* versions above but only return results + // for which there are entries in your MyList + LocalMyList::AnimeTitle myListSearchBestMatch(const QString &query); + QList myListSearch(const QString &query, int limit = 100); + QList myListSearchSimmilar(const QString &query, int limit = 5); + + // Deprectated. Use firstUnwatchedByAid with animeSearch* or myListSearch*. LocalMyList::OpenFileData firstUnwatchedByExactTitle(const QString &title); LocalMyList::OpenFileData firstUnwatchedByTitle(const QString &title); + LocalMyList::OpenFileData firstUnwatchedByAid(int aid); + + // Deprectated. Use openEpisode with animeSearch* or myListSearch*. LocalMyList::OpenFileData openFileByTitle(const QString &title, int epno = 0); LocalMyList::OpenFileData openFileByEid(int eid); LocalMyList::OpenFileData openFile(int fid);