Changeset View
Changeset View
Standalone View
Standalone View
src/models/trackmetadatamodel.cpp
Show All 12 Lines | |||||
13 | * | 13 | * | ||
14 | * You should have received a copy of the GNU Lesser General Public License | 14 | * You should have received a copy of the GNU Lesser General Public License | ||
15 | * along with this program. If not, see <https://www.gnu.org/licenses/>. | 15 | * along with this program. If not, see <https://www.gnu.org/licenses/>. | ||
16 | */ | 16 | */ | ||
17 | 17 | | |||
18 | #include "trackmetadatamodel.h" | 18 | #include "trackmetadatamodel.h" | ||
19 | 19 | | |||
20 | #include "musiclistenersmanager.h" | 20 | #include "musiclistenersmanager.h" | ||
21 | #include "elisautils.h" | ||||
21 | 22 | | |||
22 | #include <KI18n/KLocalizedString> | 23 | #include <KI18n/KLocalizedString> | ||
23 | 24 | | |||
24 | #include <QtConcurrentRun> | 25 | #include <QtConcurrentRun> | ||
25 | 26 | | |||
26 | TrackMetadataModel::TrackMetadataModel(QObject *parent) | 27 | TrackMetadataModel::TrackMetadataModel(QObject *parent) | ||
27 | : QAbstractListModel(parent) | 28 | : QAbstractListModel(parent) | ||
28 | { | 29 | { | ||
▲ Show 20 Lines • Show All 131 Lines • ▼ Show 20 Line(s) | 160 | case DataTypes::PlayCounter: | |||
160 | result = i18nc("Play counter label for track metadata view", "Play count"); | 161 | result = i18nc("Play counter label for track metadata view", "Play count"); | ||
161 | break; | 162 | break; | ||
162 | case DataTypes::LyricsRole: | 163 | case DataTypes::LyricsRole: | ||
163 | result = i18nc("Lyrics label for track metadata view", "Lyrics"); | 164 | result = i18nc("Lyrics label for track metadata view", "Lyrics"); | ||
164 | break; | 165 | break; | ||
165 | case DataTypes::ResourceRole: | 166 | case DataTypes::ResourceRole: | ||
166 | result = i18nc("Radio HTTP address for radio metadata view", "Stream Http Address"); | 167 | result = i18nc("Radio HTTP address for radio metadata view", "Stream Http Address"); | ||
167 | break; | 168 | break; | ||
168 | case DataTypes::SecondaryTextRole: | | |||
169 | case DataTypes::ImageUrlRole: | 169 | case DataTypes::ImageUrlRole: | ||
170 | result = i18nc("Image address for radio metadata view", "Image Address"); | ||||
171 | break; | ||||
172 | case DataTypes::SecondaryTextRole: | ||||
170 | case DataTypes::ShadowForImageRole: | 173 | case DataTypes::ShadowForImageRole: | ||
171 | case DataTypes::ChildModelRole: | 174 | case DataTypes::ChildModelRole: | ||
172 | case DataTypes::StringDurationRole: | 175 | case DataTypes::StringDurationRole: | ||
173 | case DataTypes::IsValidAlbumArtistRole: | 176 | case DataTypes::IsValidAlbumArtistRole: | ||
174 | case DataTypes::AllArtistsRole: | 177 | case DataTypes::AllArtistsRole: | ||
175 | case DataTypes::HighestTrackRating: | 178 | case DataTypes::HighestTrackRating: | ||
176 | case DataTypes::IdRole: | 179 | case DataTypes::IdRole: | ||
177 | case DataTypes::ParentIdRole: | | |||
178 | case DataTypes::DatabaseIdRole: | 180 | case DataTypes::DatabaseIdRole: | ||
179 | case DataTypes::IsSingleDiscAlbumRole: | 181 | case DataTypes::IsSingleDiscAlbumRole: | ||
180 | case DataTypes::ContainerDataRole: | 182 | case DataTypes::ContainerDataRole: | ||
181 | case DataTypes::IsPartialDataRole: | 183 | case DataTypes::IsPartialDataRole: | ||
182 | case DataTypes::AlbumIdRole: | 184 | case DataTypes::AlbumIdRole: | ||
183 | case DataTypes::HasEmbeddedCover: | 185 | case DataTypes::HasEmbeddedCover: | ||
184 | case DataTypes::FileModificationTime: | 186 | case DataTypes::FileModificationTime: | ||
185 | case DataTypes::FirstPlayDate: | 187 | case DataTypes::FirstPlayDate: | ||
186 | case DataTypes::PlayFrequency: | 188 | case DataTypes::PlayFrequency: | ||
187 | case DataTypes::ElementTypeRole: | 189 | case DataTypes::ElementTypeRole: | ||
188 | break; | 190 | break; | ||
189 | } | 191 | } | ||
190 | break; | 192 | break; | ||
191 | case ItemTypeRole: | 193 | case ItemTypeRole: | ||
192 | switch (currentKey) | 194 | switch (currentKey) | ||
193 | { | 195 | { | ||
194 | case DataTypes::TitleRole: | 196 | case DataTypes::TitleRole: | ||
195 | result = TextEntry; | 197 | result = TextEntry; | ||
196 | break; | 198 | break; | ||
197 | case DataTypes::ResourceRole: | 199 | case DataTypes::ResourceRole: | ||
200 | case DataTypes::ImageUrlRole: | ||||
198 | result = TextEntry; | 201 | result = TextEntry; | ||
199 | break; | 202 | break; | ||
200 | case DataTypes::ArtistRole: | 203 | case DataTypes::ArtistRole: | ||
201 | result = TextEntry; | 204 | result = TextEntry; | ||
202 | break; | 205 | break; | ||
203 | case DataTypes::AlbumRole: | 206 | case DataTypes::AlbumRole: | ||
204 | result = TextEntry; | 207 | result = TextEntry; | ||
205 | break; | 208 | break; | ||
Show All 33 Lines | |||||
239 | case DataTypes::LyricsRole: | 242 | case DataTypes::LyricsRole: | ||
240 | result = LongTextEntry; | 243 | result = LongTextEntry; | ||
241 | break; | 244 | break; | ||
242 | case DataTypes::DurationRole: | 245 | case DataTypes::DurationRole: | ||
243 | case DataTypes::SampleRateRole: | 246 | case DataTypes::SampleRateRole: | ||
244 | case DataTypes::BitRateRole: | 247 | case DataTypes::BitRateRole: | ||
245 | case DataTypes::ChannelsRole: | 248 | case DataTypes::ChannelsRole: | ||
246 | case DataTypes::SecondaryTextRole: | 249 | case DataTypes::SecondaryTextRole: | ||
247 | case DataTypes::ImageUrlRole: | | |||
248 | case DataTypes::ShadowForImageRole: | 250 | case DataTypes::ShadowForImageRole: | ||
249 | case DataTypes::ChildModelRole: | 251 | case DataTypes::ChildModelRole: | ||
250 | case DataTypes::StringDurationRole: | 252 | case DataTypes::StringDurationRole: | ||
251 | case DataTypes::IsValidAlbumArtistRole: | 253 | case DataTypes::IsValidAlbumArtistRole: | ||
252 | case DataTypes::AllArtistsRole: | 254 | case DataTypes::AllArtistsRole: | ||
253 | case DataTypes::HighestTrackRating: | 255 | case DataTypes::HighestTrackRating: | ||
254 | case DataTypes::IdRole: | 256 | case DataTypes::IdRole: | ||
255 | case DataTypes::ParentIdRole: | 257 | case DataTypes::ParentIdRole: | ||
▲ Show 20 Lines • Show All 41 Lines • ▼ Show 20 Line(s) | 298 | { | |||
297 | return mFileUrl; | 299 | return mFileUrl; | ||
298 | } | 300 | } | ||
299 | 301 | | |||
300 | QUrl TrackMetadataModel::coverUrl() const | 302 | QUrl TrackMetadataModel::coverUrl() const | ||
301 | { | 303 | { | ||
302 | if (mCoverImage.isEmpty()) { | 304 | if (mCoverImage.isEmpty()) { | ||
303 | return QUrl(QStringLiteral("image://icon/media-optical-audio")); | 305 | return QUrl(QStringLiteral("image://icon/media-optical-audio")); | ||
304 | } else { | 306 | } else { | ||
307 | if(ElisaUtils::checkUrl(mCoverImage)) { | ||||
305 | return mCoverImage; | 308 | return mCoverImage; | ||
309 | } else { | ||||
310 | return QUrl(QStringLiteral("image://icon/media-optical-audio")); | ||||
311 | } | ||||
312 | | ||||
306 | } | 313 | } | ||
307 | } | 314 | } | ||
308 | 315 | | |||
309 | MusicListenersManager *TrackMetadataModel::manager() const | 316 | MusicListenersManager *TrackMetadataModel::manager() const | ||
310 | { | 317 | { | ||
311 | return mManager; | 318 | return mManager; | ||
312 | } | 319 | } | ||
313 | 320 | | |||
▲ Show 20 Lines • Show All 181 Lines • ▼ Show 20 Line(s) | 501 | { | |||
495 | beginResetModel(); | 502 | beginResetModel(); | ||
496 | mTrackData.clear(); | 503 | mTrackData.clear(); | ||
497 | mTrackKeys.clear(); | 504 | mTrackKeys.clear(); | ||
498 | 505 | | |||
499 | for (auto role : { | 506 | for (auto role : { | ||
500 | DataTypes::TitleRole, | 507 | DataTypes::TitleRole, | ||
501 | DataTypes::ResourceRole, | 508 | DataTypes::ResourceRole, | ||
502 | DataTypes::CommentRole, | 509 | DataTypes::CommentRole, | ||
510 | DataTypes::ImageUrlRole, | ||||
503 | DataTypes::DatabaseIdRole | 511 | DataTypes::DatabaseIdRole | ||
504 | 512 | | |||
505 | }) { | 513 | }) { | ||
506 | mTrackKeys.push_back(role); | 514 | mTrackKeys.push_back(role); | ||
507 | if (role == DataTypes::DatabaseIdRole) { | 515 | if (role == DataTypes::DatabaseIdRole) { | ||
508 | mTrackData[role] = -1; | 516 | mTrackData[role] = -1; | ||
509 | } else { | 517 | } else { | ||
510 | mTrackData[role] = QString(); | 518 | mTrackData[role] = QString(); | ||
Show All 23 Lines | |||||
534 | 542 | | |||
535 | void TrackMetadataModel::setDatabase(DatabaseInterface *trackDatabase) | 543 | void TrackMetadataModel::setDatabase(DatabaseInterface *trackDatabase) | ||
536 | { | 544 | { | ||
537 | initialize(nullptr, trackDatabase); | 545 | initialize(nullptr, trackDatabase); | ||
538 | } | 546 | } | ||
539 | 547 | | |||
540 | void TrackMetadataModel::saveData() | 548 | void TrackMetadataModel::saveData() | ||
541 | { | 549 | { | ||
550 | QString imageUrl = mTrackData[DataTypes::ImageUrlRole].toString(); | ||||
551 | if (!imageUrl.isEmpty() | ||||
552 | && !imageUrl.startsWith(QStringLiteral("http://")) | ||||
553 | && !imageUrl.startsWith(QStringLiteral("https://")) | ||||
554 | && !imageUrl.startsWith(QStringLiteral("file://"))) { | ||||
555 | mTrackData[DataTypes::ImageUrlRole] = QStringLiteral("file:/").append(imageUrl); | ||||
556 | } | ||||
557 | | ||||
542 | Q_EMIT saveRadioData(mTrackData); | 558 | Q_EMIT saveRadioData(mTrackData); | ||
543 | } | 559 | } | ||
544 | 560 | | |||
545 | void TrackMetadataModel::deleteRadio() | 561 | void TrackMetadataModel::deleteRadio() | ||
546 | { | 562 | { | ||
547 | if (mTrackData[DataTypes::DatabaseIdRole]>=0) { | 563 | if (mTrackData[DataTypes::DatabaseIdRole]>=0) { | ||
548 | Q_EMIT deleteRadioData(mTrackData[DataTypes::DatabaseIdRole].toULongLong()); | 564 | Q_EMIT deleteRadioData(mTrackData[DataTypes::DatabaseIdRole].toULongLong()); | ||
549 | } | 565 | } | ||
550 | } | 566 | } | ||
551 | 567 | | |||
552 | void TrackMetadataModel::radioData(const TrackDataType &radiosData) | 568 | void TrackMetadataModel::radioData(const TrackDataType &radiosData) | ||
553 | { | 569 | { | ||
554 | if (!mFullData.isEmpty() && mFullData[DataTypes::DatabaseIdRole].toInt() != -1 && | 570 | if (!mFullData.isEmpty() && mFullData[DataTypes::DatabaseIdRole].toInt() != -1 && | ||
555 | mFullData.databaseId() != radiosData.databaseId()) { | 571 | mFullData.databaseId() != radiosData.databaseId()) { | ||
556 | return; | 572 | return; | ||
557 | } | 573 | } | ||
558 | 574 | | |||
559 | const QList<DataTypes::ColumnsRoles> fieldsForTrack({DataTypes::TitleRole, DataTypes::ResourceRole, | 575 | const QList<DataTypes::ColumnsRoles> fieldsForTrack({DataTypes::TitleRole, DataTypes::ResourceRole, | ||
560 | DataTypes::CommentRole, DataTypes::DatabaseIdRole}); | 576 | DataTypes::CommentRole, DataTypes::ImageUrlRole, | ||
577 | DataTypes::DatabaseIdRole}); | ||||
561 | 578 | | |||
562 | fillDataFromTrackData(radiosData, fieldsForTrack); | 579 | fillDataFromTrackData(radiosData, fieldsForTrack); | ||
563 | } | 580 | } | ||
564 | 581 | | |||
565 | #include "moc_trackmetadatamodel.cpp" | 582 | #include "moc_trackmetadatamodel.cpp" |