-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtraktpeoplemodel.cpp
130 lines (111 loc) · 3.21 KB
/
traktpeoplemodel.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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include "traktpeoplemodel.h"
TraktPeopleModel::TraktPeopleModel(TraktIds *ids, QObject *parent) :
TraktModel(buildRequest(ids), parent),
m_cast(0),
m_crew(0)
{
}
TraktRequest *TraktPeopleModel::buildRequest(TraktIds *ids) const
{
TraktRequest *request = new TraktRequest();
request->setPath(QString("/%1/%2/people").arg(ids->type()).arg(ids->trakt()));
request->addQueryItem("extended", "images");
return request;
}
QVariant TraktPeopleModel::data(const QModelIndex &index, int role) const
{
TraktPerson *person = at(index.row());
if (!person) {
return QVariant();
}
switch (role) {
case RoleName:
return person->name();
case RoleIds:
{
QVariant var;
var.setValue(person->ids());
return var;
}
case RoleBiography:
return person->biography();
case RoleBirthday:
return person->birthday();
case RoleDeath:
return person->death();
case RoleBirthplace:
return person->birthplace();
case RoleHomepage:
return person->homepage();
case RoleImages:
{
QVariant var;
var.setValue(person->images());
return var;
}
}
return TraktModel<TraktPerson*>::data(index, role);
}
QHash<int, QByteArray> TraktPeopleModel::roleNames() const
{
QHash<int, QByteArray> roleNames = TraktModel<TraktPerson*>::roleNames();
roleNames.insert(RoleBiography, "biography");
roleNames.insert(RoleBirthday, "birthday");
roleNames.insert(RoleDeath, "death");
roleNames.insert(RoleBirthplace, "birthplace");
roleNames.insert(RoleHomepage, "homepage");
return roleNames;
}
TraktPerson *TraktPeopleModel::convertItem(const QVariantMap &item)
{
return new TraktPerson(item.value("person").toMap(), this);
}
TraktPerson *TraktPeopleModel::at(int i) const
{
return TraktModel::at(i);
}
TraktPeopleFilterModel *TraktPeopleModel::cast()
{
if (!m_cast) {
m_cast = new TraktPeopleFilterModel(this);
m_cast->setSourceModel(this);
m_cast->setTypeFilter("cast");
}
return m_cast;
}
TraktPeopleFilterModel *TraktPeopleModel::crew()
{
if (!m_crew) {
m_crew = new TraktPeopleFilterModel(this);
m_crew->setSourceModel(this);
m_crew->setTypeFilter("crew");
}
return m_crew;
}
void TraktPeopleModel::onReplyReceived(TraktReply *reply)
{
reply->deleteLater();
QVariantMap value = reply->asMap();
QList<TraktPerson*> newItems;
addItems(newItems, value.value("cast").toList(), "cast");
QVariantMap crew = value.value("crew").toMap();
foreach (QString type, crew.keys()) {
addItems(newItems, crew.value(type).toList(), type);
}
beginResetModel();
m_items.append(newItems);
endResetModel();
this->setLoading(false);
this->setLoaded(true);
}
void TraktPeopleModel::addItems(QList<TraktPerson*> &list, const QVariantList &items, const QString &type)
{
foreach (QVariant item, items) {
QVariantMap map = item.toMap();
TraktPerson *person = convertItem(map);
person->setType(type);
person->setCharacter(map.value("character").toString());
person->setJob(map.value("job").toString());
list.append(person);
}
}