1 /*
2    SPDX-FileCopyrightText: 2016 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
3 
4    SPDX-License-Identifier: LGPL-3.0-or-later
5  */
6 
7 #include "manageheaderbar.h"
8 
9 #include <QTime>
10 
ManageHeaderBar(QObject * parent)11 ManageHeaderBar::ManageHeaderBar(QObject *parent)
12     : QObject(parent)
13 {
14 }
15 
setArtistRole(int value)16 void ManageHeaderBar::setArtistRole(int value)
17 {
18     mArtistRole = value;
19     Q_EMIT artistRoleChanged();
20 }
21 
artistRole() const22 int ManageHeaderBar::artistRole() const
23 {
24     return mArtistRole;
25 }
26 
setTitleRole(int value)27 void ManageHeaderBar::setTitleRole(int value)
28 {
29     mTitleRole = value;
30     Q_EMIT titleRoleChanged();
31 }
32 
titleRole() const33 int ManageHeaderBar::titleRole() const
34 {
35     return mTitleRole;
36 }
37 
setAlbumRole(int value)38 void ManageHeaderBar::setAlbumRole(int value)
39 {
40     mAlbumRole = value;
41     Q_EMIT albumRoleChanged();
42 }
43 
setAlbumArtistRole(int value)44 void ManageHeaderBar::setAlbumArtistRole(int value)
45 {
46     mAlbumArtistRole = value;
47     Q_EMIT albumArtistRoleChanged();
48 }
49 
setFileNameRole(int value)50 void ManageHeaderBar::setFileNameRole(int value)
51 {
52     mFileNameRole = value;
53     Q_EMIT fileNameRoleChanged();
54 }
55 
albumRole() const56 int ManageHeaderBar::albumRole() const
57 {
58     return mAlbumRole;
59 }
60 
albumArtistRole() const61 int ManageHeaderBar::albumArtistRole() const
62 {
63     return mAlbumArtistRole;
64 }
65 
fileNameRole() const66 int ManageHeaderBar::fileNameRole() const
67 {
68     return mFileNameRole;
69 }
70 
setImageRole(int value)71 void ManageHeaderBar::setImageRole(int value)
72 {
73     mImageRole = value;
74     Q_EMIT imageRoleChanged();
75 }
76 
setDatabaseIdRole(int databaseIdRole)77 void ManageHeaderBar::setDatabaseIdRole(int databaseIdRole)
78 {
79     mDatabaseIdRole = databaseIdRole;
80     Q_EMIT databaseIdRoleChanged();
81 }
82 
setTrackTypeRole(int trackTypeRole)83 void ManageHeaderBar::setTrackTypeRole(int trackTypeRole)
84 {
85     mTrackTypeIdRole = trackTypeRole;
86     Q_EMIT trackTypeRoleChanged();
87 }
88 
imageRole() const89 int ManageHeaderBar::imageRole() const
90 {
91     return mImageRole;
92 }
93 
databaseIdRole() const94 int ManageHeaderBar::databaseIdRole() const
95 {
96     return mDatabaseIdRole;
97 }
98 
trackTypeRole() const99 int ManageHeaderBar::trackTypeRole() const
100 {
101     return mTrackTypeIdRole;
102 }
103 
setAlbumIdRole(int albumIdRole)104 void ManageHeaderBar::setAlbumIdRole(int albumIdRole)
105 {
106     mAlbumIdRole = albumIdRole;
107     Q_EMIT albumIdRoleChanged();
108 }
109 
albumIdRole() const110 int ManageHeaderBar::albumIdRole() const
111 {
112     return mAlbumIdRole;
113 }
114 
album() const115 QVariant ManageHeaderBar::album() const
116 {
117     QVariant result = QString{};
118 
119     if (!mCurrentTrack.isValid() || mCurrentTrack.data(mAlbumRole).isNull()) {
120         return result;
121     }
122 
123     result = mCurrentTrack.data(mAlbumRole);
124 
125     return result;
126 }
127 
albumArtist() const128 QVariant ManageHeaderBar::albumArtist() const
129 {
130     if (!mCurrentTrack.isValid()) {
131         return QString();
132     }
133 
134     return mCurrentTrack.data(mAlbumArtistRole);
135 }
136 
fileUrl() const137 QUrl ManageHeaderBar::fileUrl() const
138 {
139     QUrl result;
140 
141     if (!mCurrentTrack.isValid()) {
142         return result;
143     }
144 
145     result = mCurrentTrack.data(mFileNameRole).toUrl();
146 
147     return result;
148 }
149 
title() const150 QVariant ManageHeaderBar::title() const
151 {
152     if (!mCurrentTrack.isValid()) {
153         return QString();
154     }
155 
156     return mCurrentTrack.data(mTitleRole);
157 }
158 
artist() const159 QVariant ManageHeaderBar::artist() const
160 {
161     if (!mCurrentTrack.isValid()) {
162         return QString();
163     }
164 
165     auto artistValue = mCurrentTrack.data(mArtistRole);
166 
167     if (!artistValue.isValid()) {
168         return mCurrentTrack.data(mAlbumArtistRole);
169     }
170 
171     return artistValue;
172 }
173 
image() const174 QUrl ManageHeaderBar::image() const
175 {
176     if (!mCurrentTrack.isValid()) {
177         return {};
178     }
179 
180     return mCurrentTrack.data(mImageRole).toUrl();
181 }
182 
databaseId() const183 qulonglong ManageHeaderBar::databaseId() const
184 {
185     if (!mCurrentTrack.isValid()) {
186         return 0;
187     }
188 
189     return mCurrentTrack.data(mDatabaseIdRole).toULongLong();
190 }
191 
trackType() const192 ElisaUtils::PlayListEntryType ManageHeaderBar::trackType() const
193 {
194     if (!mCurrentTrack.isValid()) {
195         return ElisaUtils::Unknown;
196     }
197 
198     return mCurrentTrack.data(mTrackTypeIdRole).value<ElisaUtils::PlayListEntryType>();
199 }
200 
albumId() const201 qulonglong ManageHeaderBar::albumId() const
202 {
203     if (!mCurrentTrack.isValid()) {
204         return 0;
205     }
206 
207     return mCurrentTrack.data(mAlbumIdRole).toULongLong();
208 }
209 
isValid() const210 bool ManageHeaderBar::isValid() const
211 {
212     if (!mCurrentTrack.isValid()) {
213         return false;
214     }
215 
216     return mCurrentTrack.data(mIsValidRole).toBool();
217 }
218 
isValidRole() const219 int ManageHeaderBar::isValidRole() const
220 {
221     return mIsValidRole;
222 }
223 
currentTrack() const224 QPersistentModelIndex ManageHeaderBar::currentTrack() const
225 {
226     return mCurrentTrack;
227 }
228 
notifyArtistProperty()229 void ManageHeaderBar::notifyArtistProperty()
230 {
231     auto newArtistValue = mCurrentTrack.data(mArtistRole);
232     if (mOldArtist != newArtistValue) {
233         Q_EMIT artistChanged();
234 
235         mOldArtist = newArtistValue;
236     }
237 }
238 
notifyTitleProperty()239 void ManageHeaderBar::notifyTitleProperty()
240 {
241     auto newTitleValue = mCurrentTrack.data(mTitleRole);
242     if (mOldTitle != newTitleValue) {
243         Q_EMIT titleChanged();
244 
245         mOldTitle = newTitleValue;
246     }
247 }
248 
notifyAlbumProperty()249 void ManageHeaderBar::notifyAlbumProperty()
250 {
251     auto newAlbumValue = mCurrentTrack.data(mAlbumRole);
252     if (mOldAlbum != newAlbumValue) {
253         Q_EMIT albumChanged();
254 
255         mOldAlbum = newAlbumValue;
256     }
257 }
258 
notifyAlbumArtistProperty()259 void ManageHeaderBar::notifyAlbumArtistProperty()
260 {
261     auto newAlbumArtistValue = mCurrentTrack.data(mAlbumArtistRole);
262     if (mOldAlbumArtist != newAlbumArtistValue) {
263         Q_EMIT albumArtistChanged();
264 
265         mOldAlbumArtist = newAlbumArtistValue;
266     }
267 }
268 
notifyFileNameProperty()269 void ManageHeaderBar::notifyFileNameProperty()
270 {
271     auto newFileNameValue = mCurrentTrack.data(mFileNameRole);
272     if (mOldFileName != newFileNameValue) {
273         Q_EMIT fileUrlChanged();
274 
275         mOldFileName = newFileNameValue;
276     }
277 }
278 
notifyImageProperty()279 void ManageHeaderBar::notifyImageProperty()
280 {
281     auto newImageValue = mCurrentTrack.data(mImageRole);
282     if (mOldImage != newImageValue) {
283         Q_EMIT imageChanged();
284 
285         mOldImage = newImageValue;
286     }
287 }
288 
notifyDatabaseIdProperty()289 void ManageHeaderBar::notifyDatabaseIdProperty()
290 {
291     bool conversionOk;
292     auto newDatabaseIdValue = mCurrentTrack.data(mDatabaseIdRole).toULongLong(&conversionOk);
293     if (conversionOk && mOldDatabaseId != newDatabaseIdValue) {
294         Q_EMIT databaseIdChanged();
295 
296         mOldDatabaseId = newDatabaseIdValue;
297     } else if (!conversionOk && mOldDatabaseId != 0) {
298         Q_EMIT databaseIdChanged();
299 
300         mOldDatabaseId = 0;
301     }
302 }
303 
notifyTrackTypeProperty()304 void ManageHeaderBar::notifyTrackTypeProperty()
305 {
306     auto newTrackTypeValue = mCurrentTrack.data(mTrackTypeIdRole).value<ElisaUtils::PlayListEntryType>();
307     if (mOldTrackType != newTrackTypeValue) {
308         Q_EMIT trackTypeChanged();
309 
310         mOldTrackType = newTrackTypeValue;
311     }
312 }
313 
notifyAlbumIdProperty()314 void ManageHeaderBar::notifyAlbumIdProperty()
315 {
316     bool conversionOk;
317     auto newAlbumIdValue = mCurrentTrack.data(mAlbumIdRole).toULongLong(&conversionOk);
318     if (conversionOk && mOldAlbumId != newAlbumIdValue) {
319         Q_EMIT albumIdChanged();
320 
321         mOldAlbumId = newAlbumIdValue;
322     } else if (!conversionOk && mOldAlbumId != 0) {
323         Q_EMIT albumIdChanged();
324 
325         mOldAlbumId = 0;
326     }
327 }
328 
notifyIsValidProperty()329 void ManageHeaderBar::notifyIsValidProperty()
330 {
331     auto newIsValidValue = mCurrentTrack.data(mIsValidRole).toBool();
332     if (mOldIsValid != newIsValidValue) {
333         Q_EMIT isValidChanged();
334 
335         mOldIsValid = newIsValidValue;
336     }
337 }
338 
setIsValidRole(int isValidRole)339 void ManageHeaderBar::setIsValidRole(int isValidRole)
340 {
341     mIsValidRole = isValidRole;
342     Q_EMIT isValidRoleChanged();
343 }
344 
setCurrentTrack(const QPersistentModelIndex & currentTrack)345 void ManageHeaderBar::setCurrentTrack(const QPersistentModelIndex &currentTrack)
346 {
347     mCurrentTrack = currentTrack;
348     Q_EMIT currentTrackChanged();
349     updateCurrentTrackData();
350 }
351 
updateCurrentTrackData()352 void ManageHeaderBar::updateCurrentTrackData()
353 {
354     notifyArtistProperty();
355     notifyTitleProperty();
356     notifyAlbumProperty();
357     notifyAlbumArtistProperty();
358     notifyFileNameProperty();
359     notifyImageProperty();
360     notifyDatabaseIdProperty();
361     notifyTrackTypeProperty();
362     notifyAlbumIdProperty();
363     notifyIsValidProperty();
364 }
365 
366 #include "moc_manageheaderbar.cpp"
367