-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtraktmodel.cpp
112 lines (95 loc) · 2.25 KB
/
traktmodel.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include "traktmodel.h"
#include "traktitem.h"
template<class T>
TraktModel<T>::TraktModel(TraktRequest *request, QObject *parent) :
TraktModel(parent)
{
connect(request, &TraktRequest::replyReceived, this, &TraktModel::onReplyReceived);
request->send();
setLoading(true);
}
template<class T>
TraktModel<T>::TraktModel(QObject *parent) :
TraktModelBase(parent)
{
}
template<class T>
int TraktModel<T>::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent)
return m_items.size();
}
template<class T>
QVariant TraktModel<T>::data(const QModelIndex &index, int role) const
{
TraktItem *item = get(index.row());
if (!item)
return QVariant();
switch (role) {
case RoleTitle:
return item->title();
case RoleIds:
{
QVariant var;
var.setValue(item->ids());
return var;
}
case RoleImages:
{
QVariant var;
var.setValue(item->images());
return var;
}
case RoleImage:
{
QVariant var;
var.setValue(item->image());
return var;
}
}
return QVariant();
}
template<class T>
QHash<int, QByteArray> TraktModel<T>::roleNames() const
{
QHash<int, QByteArray> roleNames;
roleNames.insert(RoleIds, "ids");
roleNames.insert(RoleTitle, "title");
roleNames.insert(RoleImages, "images");
roleNames.insert(RoleImage, "image");
return roleNames;
}
template<class T>
TraktItem *TraktModel<T>::get(int i) const
{
return (TraktItem*)at(i);
}
template<class T>
T TraktModel<T>::at(int i) const
{
if (i < 0 || i >= m_items.size()) {
return 0;
}
return m_items.at(i);
}
template<class T>
void TraktModel<T>::onReplyReceived(TraktReply *reply)
{
reply->deleteLater();
QList<T> newItems;
QVariantList items = reply->asList();
foreach (QVariant item, items) {
newItems.append(convertItem(item.toMap()));
}
beginResetModel();
m_items = newItems;
endResetModel();
setLoading(false);
setLoaded(true);
}
template class TraktModel<TraktItem*>;
template class TraktModel<TraktMovie*>;
template class TraktModel<TraktPerson*>;
template class TraktModel<TraktShow*>;
template class TraktModel<TraktSeason*>;
template class TraktModel<TraktEpisode*>;