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)
{
int MyListNode::columnCount() const
{
- return 5;
+ return 6;
}
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();
case 4:
return QString("%1 of %2").arg(animeData.watchedEpisodes)
.arg(animeData.episodesInMyList);
+ case 5:
+ return stateIdToState(animeData.myState);
}
break;
case Qt::ToolTipRole:
" 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());
{
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);
}
// ----
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:
" 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)")
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);
}
// ---------------
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();
}
Anime data;
int episodesInMyList;
int watchedEpisodes;
+ int myState;
friend bool operator<(const AnimeData &a, const AnimeData &b)
{ return a.data.aid < b.data.aid; }
data = other.data;
episodesInMyList = other.episodesInMyList;
watchedEpisodes = other.watchedEpisodes;
+ myState = other.myState;
return *this;
}
};
Episode data;
QDateTime watchedDate;
int episodeTypeOrdering;
+ int myStates;
friend bool operator<(const EpisodeData &a, const EpisodeData &b)
{ return a.data.eid < b.data.eid; }
EpisodeData &operator=(const EpisodeData &other)
{
data = other.data;
+ myStates = other.myStates;
watchedDate = other.watchedDate;
episodeTypeOrdering = other.episodeTypeOrdering;
return *this;