]> Some of my projects - localmylist.git/commitdiff
Add State column to MyList model.
authorAPTX <marek321@gmail.com>
Sat, 27 Apr 2013 15:13:34 +0000 (17:13 +0200)
committerAPTX <marek321@gmail.com>
Sat, 27 Apr 2013 15:13:34 +0000 (17:13 +0200)
localmylist/mylistnode.cpp
localmylist/mylistnodedata.h

index 5d2b996b162339bc277e6ec7ccfeb9498fec4c45..fe8c163db6fb65e283b1585c716d02f9f30bfecc 100644 (file)
 
 namespace LocalMyList {
 
+QString stateIdToState(int id)
+{
+       switch (id)
+       {
+               case -1:
+                       return QObject::tr("Mixed");
+               case 0:
+                       return QObject::tr("Unknown");
+               case 1:
+                       return QObject::tr("On HDD");
+               case 2:
+                       return QObject::tr("On Cd");
+               case 3:
+                       return QObject::tr("Deleted");
+       }
+       return QString();
+}
+
 MyListNode::MyListNode(MyListModel *model_, NodeType type, int totalRowCount, MyListNode *parent) :
        m_totalRowCount(totalRowCount), fetchedRowCount(0), m_working(false)
 {
@@ -53,7 +71,7 @@ int MyListNode::row() const
 
 int MyListNode::columnCount() const
 {
-       return 5;
+       return 6;
 }
 
 QVariant MyListNode::data(int column, int role) const
@@ -73,6 +91,8 @@ QVariant MyListNode::data(int column, int role) const
                        return QObject::tr("Vote");
                case 4:
                        return QObject::tr("Watched / Renamed");
+               case 5:
+                       return QObject::tr("State");
        }
 
        return QVariant();
@@ -386,6 +406,8 @@ QVariant MyListAnimeNode::data(int column, int role) const
                                case 4:
                                        return QString("%1 of %2").arg(animeData.watchedEpisodes)
                                                        .arg(animeData.episodesInMyList);
+                               case 5:
+                                       return stateIdToState(animeData.myState);
                        }
                break;
                case Qt::ToolTipRole:
@@ -568,6 +590,19 @@ QString MyListAnimeNode::baseQuery()
        "                       JOIN file f ON (f.eid = e.eid) "
        "                       WHERE e.aid = a.aid "
        "                               AND f.my_watched IS NOT NULL), "
+       "               (SELECT CASE WHEN array_length(my_state_array, 1) > 1 THEN -1 ELSE my_state_array[1] END "
+       "                       FROM "
+       "                       (SELECT array_agg(my_state) my_state_array "
+       "                               FROM "
+       "                                       (SELECT my_state "
+       "                                               FROM file "
+       "                                               WHERE aid = a.aid "
+       "                                       UNION "
+       "                                       SELECT f.my_state "
+       "                                               FROM file f "
+       "                                               JOIN episode e ON (e.aid = a.aid) "
+       "                                               JOIN file_episode_rel fer ON (fer.eid = e.eid) "
+       "                                               ) AS sq) AS sq) AS my_state, "
        "               %1 "
        "       FROM anime a ")
        .arg(Database::animeFields());
@@ -577,7 +612,8 @@ void MyListAnimeNode::fillAnimeData(AnimeData &data, SqlResultIteratorInterface
 {
        data.episodesInMyList = query.value(1).toInt();
        data.watchedEpisodes = query.value(2).toInt();
-       Database::readAnimeData(query, data.data, 3);
+       data.myState = query.value(3).toInt();
+       Database::readAnimeData(query, data.data, 4);
 }
 
 // ----
@@ -622,6 +658,8 @@ QVariant MyListEpisodeNode::data(int column, int role) const
                                        if (!episodeData.watchedDate.isValid())
                                                return QObject::tr("No");
                                        return QObject::tr("Yes, on %1").arg(episodeData.watchedDate.toString());
+                               case 5:
+                                       return stateIdToState(episodeData.myStates);
                        }
                break;
                case Qt::ToolTipRole:
@@ -843,6 +881,18 @@ QString MyListEpisodeNode::baseQuery()
        "                               JOIN file_episode_rel fer ON (fer.fid = f.fid) "
        "                               WHERE fer.eid = e.eid "
        "                                       AND my_watched IS NOT NULL) AS sq) AS my_watched, "
+       "               (SELECT CASE WHEN array_length(my_state_array, 1) > 1 THEN -1 ELSE my_state_array[1] END "
+       "                       FROM "
+       "                       (SELECT array_agg(my_state) my_state_array "
+       "                               FROM "
+       "                                       (SELECT my_state "
+       "                                               FROM file "
+       "                                               WHERE eid = e.eid "
+       "                                       UNION "
+       "                                       SELECT f.my_state "
+       "                                               FROM file f "
+       "                                               JOIN file_episode_rel fer ON (fer.fid = f.fid) "
+       "                                               WHERE fer.eid = e.eid) AS sq) AS sq) AS my_state, "
        "       et.ordering, %1 "
        "       FROM episode e "
        "       JOIN episode_type et ON (et.type = e.type)")
@@ -852,8 +902,9 @@ QString MyListEpisodeNode::baseQuery()
 void MyListEpisodeNode::fillEpisodeData(EpisodeData &data, SqlResultIteratorInterface &query)
 {
        data.watchedDate = query.value(1).toDateTime();
-       data.episodeTypeOrdering = query.value(2).toInt();
-       Database::readEpisodeData(query, data.data, 3);
+       data.myStates = query.value(2).toInt();
+       data.episodeTypeOrdering = query.value(3).toInt();
+       Database::readEpisodeData(query, data.data, 4);
 }
 
 // ---------------
@@ -891,6 +942,8 @@ QVariant MyListFileNode::data(int column, int role) const
                        if (!fileData.data.myWatched.isValid())
                                return QObject::tr("No");
                        return QObject::tr("Yes, on %1").arg(fileData.data.myWatched.toString());
+               case 5:
+                       return stateIdToState(fileData.data.myState);
        }
        return QVariant();
 }
index eacfd9690bf035fe98d4dec7e88eadbe3711f852..151a97a7b0f66f323fce6a8eb477c373bd9b6fa7 100644 (file)
@@ -18,6 +18,7 @@ struct AnimeData : public boost::intrusive::set_base_hook< >
        Anime data;
        int episodesInMyList;
        int watchedEpisodes;
+       int myState;
 
        friend bool operator<(const AnimeData &a, const AnimeData &b)
        { return a.data.aid < b.data.aid; }
@@ -33,6 +34,7 @@ struct AnimeData : public boost::intrusive::set_base_hook< >
                data = other.data;
                episodesInMyList = other.episodesInMyList;
                watchedEpisodes = other.watchedEpisodes;
+               myState = other.myState;
                return *this;
        }
 };
@@ -44,6 +46,7 @@ struct EpisodeData : public boost::intrusive::set_base_hook< >
        Episode data;
        QDateTime watchedDate;
        int episodeTypeOrdering;
+       int myStates;
 
        friend bool operator<(const EpisodeData &a, const EpisodeData &b)
        { return a.data.eid < b.data.eid; }
@@ -57,6 +60,7 @@ struct EpisodeData : public boost::intrusive::set_base_hook< >
        EpisodeData &operator=(const EpisodeData &other)
        {
                data = other.data;
+               myStates = other.myStates;
                watchedDate = other.watchedDate;
                episodeTypeOrdering = other.episodeTypeOrdering;
                return *this;