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 220 Lines • ▼ Show 20 Line(s) | |||||
534 | 541 | | |||
535 | void TrackMetadataModel::setDatabase(DatabaseInterface *trackDatabase) | 542 | void TrackMetadataModel::setDatabase(DatabaseInterface *trackDatabase) | ||
536 | { | 543 | { | ||
537 | initialize(nullptr, trackDatabase); | 544 | initialize(nullptr, trackDatabase); | ||
538 | } | 545 | } | ||
539 | 546 | | |||
540 | void TrackMetadataModel::saveData() | 547 | void TrackMetadataModel::saveData() | ||
541 | { | 548 | { | ||
549 | QString imageUrl = mTrackData[DataTypes::ImageUrlRole].toString(); | ||||
550 | if (!imageUrl.isEmpty() | ||||
551 | && !imageUrl.startsWith(QStringLiteral("http://")) | ||||
552 | && !imageUrl.startsWith(QStringLiteral("https://")) | ||||
553 | && !imageUrl.startsWith(QStringLiteral("file://"))) { | ||||
554 | mTrackData[DataTypes::ImageUrlRole] = QStringLiteral("file:/").append(imageUrl); | ||||
555 | } | ||||
556 | | ||||
542 | Q_EMIT saveRadioData(mTrackData); | 557 | Q_EMIT saveRadioData(mTrackData); | ||
543 | } | 558 | } | ||
544 | 559 | | |||
545 | void TrackMetadataModel::deleteRadio() | 560 | void TrackMetadataModel::deleteRadio() | ||
546 | { | 561 | { | ||
547 | if (mTrackData[DataTypes::DatabaseIdRole]>=0) { | 562 | if (mTrackData[DataTypes::DatabaseIdRole]>=0) { | ||
548 | Q_EMIT deleteRadioData(mTrackData[DataTypes::DatabaseIdRole].toULongLong()); | 563 | Q_EMIT deleteRadioData(mTrackData[DataTypes::DatabaseIdRole].toULongLong()); | ||
549 | } | 564 | } | ||
550 | } | 565 | } | ||
551 | 566 | | |||
552 | void TrackMetadataModel::radioData(const TrackDataType &radiosData) | 567 | void TrackMetadataModel::radioData(const TrackDataType &radiosData) | ||
553 | { | 568 | { | ||
554 | if (!mFullData.isEmpty() && mFullData[DataTypes::DatabaseIdRole].toInt() != -1 && | 569 | if (!mFullData.isEmpty() && mFullData[DataTypes::DatabaseIdRole].toInt() != -1 && | ||
555 | mFullData.databaseId() != radiosData.databaseId()) { | 570 | mFullData.databaseId() != radiosData.databaseId()) { | ||
556 | return; | 571 | return; | ||
557 | } | 572 | } | ||
558 | 573 | | |||
559 | const QList<DataTypes::ColumnsRoles> fieldsForTrack({DataTypes::TitleRole, DataTypes::ResourceRole, | 574 | const QList<DataTypes::ColumnsRoles> fieldsForTrack({DataTypes::TitleRole, DataTypes::ResourceRole, | ||
560 | DataTypes::CommentRole, DataTypes::DatabaseIdRole}); | 575 | DataTypes::CommentRole, DataTypes::ImageUrlRole, | ||
576 | DataTypes::DatabaseIdRole}); | ||||
561 | 577 | | |||
562 | fillDataFromTrackData(radiosData, fieldsForTrack); | 578 | fillDataFromTrackData(radiosData, fieldsForTrack); | ||
563 | } | 579 | } | ||
564 | 580 | | |||
565 | #include "moc_trackmetadatamodel.cpp" | 581 | #include "moc_trackmetadatamodel.cpp" |