]> Some of my projects - localmylist.git/commitdiff
Add myListSearch* methods.
authorAPTX <marek321@gmail.com>
Sat, 15 Mar 2014 15:05:47 +0000 (16:05 +0100)
committerAPTX <marek321@gmail.com>
Sat, 15 Mar 2014 15:05:47 +0000 (16:05 +0100)
These allow for title search simmilar to animeSearch* but limit the
results to entries in your MyList

localmylist/database.cpp
localmylist/database.h

index 0a827ae6af4de44b92d8e08d3499254b0298cbe3..b8536193a84dacfc8df918cf25701c303386c50d 100644 (file)
@@ -210,6 +210,74 @@ QList<AnimeTitle> Database::animeSearchSimmilar(const QString &query, int limit)
        return ret;
 }
 
+AnimeTitle Database::myListSearchBestMatch(const QString &query)
+{
+       QList<AnimeTitle> ret = myListSearch(query, 1);
+       if (ret.count())
+               return ret[0];
+       return AnimeTitle();
+}
+
+QList<AnimeTitle> Database::myListSearch(const QString &query, int limit)
+{
+       QList<AnimeTitle> 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<AnimeTitle> Database::myListSearchSimmilar(const QString &query, int limit)
+{
+       QList<AnimeTitle> 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(
index eb3d08804c5e43ab345153bfcf12c2955e49c244..902ee37d48d963a50f614ea89cddfa98449f072b 100644 (file)
@@ -54,9 +54,19 @@ public slots:
        QList<LocalMyList::AnimeTitle> animeSearch(const QString &query, int limit = 100);
        QList<LocalMyList::AnimeTitle> 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<LocalMyList::AnimeTitle> myListSearch(const QString &query, int limit = 100);
+       QList<LocalMyList::AnimeTitle> 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);