From: APTX Date: Sat, 27 Apr 2013 15:13:34 +0000 (+0200) Subject: Add State column to MyList model. X-Git-Url: https://gitweb.tyo.aptx.org/?a=commitdiff_plain;h=e71de70fb05ce2a5cfea143ad506b6b2dcc8f089;p=localmylist.git Add State column to MyList model. --- diff --git a/localmylist/mylistnode.cpp b/localmylist/mylistnode.cpp index 5d2b996..fe8c163 100644 --- a/localmylist/mylistnode.cpp +++ b/localmylist/mylistnode.cpp @@ -10,6 +10,24 @@ 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(); } diff --git a/localmylist/mylistnodedata.h b/localmylist/mylistnodedata.h index eacfd96..151a97a 100644 --- a/localmylist/mylistnodedata.h +++ b/localmylist/mylistnodedata.h @@ -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;