Changeset View
Changeset View
Standalone View
Standalone View
src/databaseinterface.cpp
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 43 Lines • ▼ Show 20 Line(s) | |||||
44 | { | 44 | { | ||
45 | public: | 45 | public: | ||
46 | 46 | | |||
47 | DatabaseInterfacePrivate(const QSqlDatabase &tracksDatabase) | 47 | DatabaseInterfacePrivate(const QSqlDatabase &tracksDatabase) | ||
48 | : mTracksDatabase(tracksDatabase), mSelectAlbumQuery(mTracksDatabase), | 48 | : mTracksDatabase(tracksDatabase), mSelectAlbumQuery(mTracksDatabase), | ||
49 | mSelectTrackQuery(mTracksDatabase), mSelectAlbumIdFromTitleQuery(mTracksDatabase), | 49 | mSelectTrackQuery(mTracksDatabase), mSelectAlbumIdFromTitleQuery(mTracksDatabase), | ||
50 | mInsertAlbumQuery(mTracksDatabase), mSelectTrackIdFromTitleAlbumIdArtistQuery(mTracksDatabase), | 50 | mInsertAlbumQuery(mTracksDatabase), mSelectTrackIdFromTitleAlbumIdArtistQuery(mTracksDatabase), | ||
51 | mInsertTrackQuery(mTracksDatabase), mSelectTracksFromArtist(mTracksDatabase), | 51 | mInsertTrackQuery(mTracksDatabase), mSelectTracksFromArtist(mTracksDatabase), | ||
52 | mSelectTrackFromIdQuery(mTracksDatabase), mSelectCountAlbumsForArtistQuery(mTracksDatabase), | 52 | mSelectTrackFromIdQuery(mTracksDatabase), mSelectRadioFromIdQuery(mTracksDatabase), | ||
53 | mSelectCountAlbumsForArtistQuery(mTracksDatabase), | ||||
53 | mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery(mTracksDatabase), | 54 | mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery(mTracksDatabase), | ||
54 | mSelectAllAlbumsFromArtistQuery(mTracksDatabase), mSelectAllArtistsQuery(mTracksDatabase), | 55 | mSelectAllAlbumsFromArtistQuery(mTracksDatabase), mSelectAllArtistsQuery(mTracksDatabase), | ||
55 | mInsertArtistsQuery(mTracksDatabase), mSelectArtistByNameQuery(mTracksDatabase), | 56 | mInsertArtistsQuery(mTracksDatabase), mSelectArtistByNameQuery(mTracksDatabase), | ||
56 | mSelectArtistQuery(mTracksDatabase), mUpdateTrackStatistics(mTracksDatabase), | 57 | mSelectArtistQuery(mTracksDatabase), mUpdateTrackStatistics(mTracksDatabase), | ||
57 | mRemoveTrackQuery(mTracksDatabase), mRemoveAlbumQuery(mTracksDatabase), | 58 | mRemoveTrackQuery(mTracksDatabase), mRemoveAlbumQuery(mTracksDatabase), | ||
58 | mRemoveArtistQuery(mTracksDatabase), mSelectAllTracksQuery(mTracksDatabase), | 59 | mRemoveArtistQuery(mTracksDatabase), mSelectAllTracksQuery(mTracksDatabase), | ||
60 | mSelectAllRadiosQuery(mTracksDatabase), | ||||
mgallien: The initialization order for the members generate some warnings at compilation:
.. | |||||
59 | mInsertTrackMapping(mTracksDatabase), mUpdateTrackFirstPlayStatistics(mTracksDatabase), | 61 | mInsertTrackMapping(mTracksDatabase), mUpdateTrackFirstPlayStatistics(mTracksDatabase), | ||
60 | mInsertMusicSource(mTracksDatabase), mSelectMusicSource(mTracksDatabase), | 62 | mInsertMusicSource(mTracksDatabase), mSelectMusicSource(mTracksDatabase), | ||
61 | mUpdateTrackPriority(mTracksDatabase), mUpdateTrackFileModifiedTime(mTracksDatabase), | 63 | mUpdateTrackPriority(mTracksDatabase), mUpdateTrackFileModifiedTime(mTracksDatabase), | ||
62 | mSelectTracksMapping(mTracksDatabase), mSelectTracksMappingPriority(mTracksDatabase), | 64 | mSelectTracksMapping(mTracksDatabase), mSelectTracksMappingPriority(mTracksDatabase), | ||
65 | mSelectRadioIdFromHttpAddress(mTracksDatabase), | ||||
63 | mUpdateAlbumArtUriFromAlbumIdQuery(mTracksDatabase), mSelectTracksMappingPriorityByTrackId(mTracksDatabase), | 66 | mUpdateAlbumArtUriFromAlbumIdQuery(mTracksDatabase), mSelectTracksMappingPriorityByTrackId(mTracksDatabase), | ||
64 | mSelectAlbumIdsFromArtist(mTracksDatabase), mSelectAllTrackFilesQuery(mTracksDatabase), | 67 | mSelectAlbumIdsFromArtist(mTracksDatabase), mSelectAllTrackFilesQuery(mTracksDatabase), | ||
65 | mRemoveTracksMappingFromSource(mTracksDatabase), mRemoveTracksMapping(mTracksDatabase), | 68 | mRemoveTracksMappingFromSource(mTracksDatabase), mRemoveTracksMapping(mTracksDatabase), | ||
66 | mSelectTracksWithoutMappingQuery(mTracksDatabase), mSelectAlbumIdFromTitleAndArtistQuery(mTracksDatabase), | 69 | mSelectTracksWithoutMappingQuery(mTracksDatabase), mSelectAlbumIdFromTitleAndArtistQuery(mTracksDatabase), | ||
67 | mSelectAlbumIdFromTitleWithoutArtistQuery(mTracksDatabase), | 70 | mSelectAlbumIdFromTitleWithoutArtistQuery(mTracksDatabase), | ||
68 | mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery(mTracksDatabase), mSelectAlbumArtUriFromAlbumIdQuery(mTracksDatabase), | 71 | mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery(mTracksDatabase), mSelectAlbumArtUriFromAlbumIdQuery(mTracksDatabase), | ||
69 | mInsertComposerQuery(mTracksDatabase), mSelectComposerByNameQuery(mTracksDatabase), | 72 | mInsertComposerQuery(mTracksDatabase), mSelectComposerByNameQuery(mTracksDatabase), | ||
70 | mSelectComposerQuery(mTracksDatabase), mInsertLyricistQuery(mTracksDatabase), | 73 | mSelectComposerQuery(mTracksDatabase), mInsertLyricistQuery(mTracksDatabase), | ||
71 | mSelectLyricistByNameQuery(mTracksDatabase), mSelectLyricistQuery(mTracksDatabase), | 74 | mSelectLyricistByNameQuery(mTracksDatabase), mSelectLyricistQuery(mTracksDatabase), | ||
72 | mInsertGenreQuery(mTracksDatabase), mSelectGenreByNameQuery(mTracksDatabase), | 75 | mInsertGenreQuery(mTracksDatabase), mSelectGenreByNameQuery(mTracksDatabase), | ||
73 | mSelectGenreQuery(mTracksDatabase), mSelectAllTracksShortQuery(mTracksDatabase), | 76 | mSelectGenreQuery(mTracksDatabase), mSelectAllTracksShortQuery(mTracksDatabase), | ||
74 | mSelectAllAlbumsShortQuery(mTracksDatabase), mSelectAllComposersQuery(mTracksDatabase), | 77 | mSelectAllAlbumsShortQuery(mTracksDatabase), mSelectAllComposersQuery(mTracksDatabase), | ||
75 | mSelectAllLyricistsQuery(mTracksDatabase), mSelectCountAlbumsForComposerQuery(mTracksDatabase), | 78 | mSelectAllLyricistsQuery(mTracksDatabase), mSelectCountAlbumsForComposerQuery(mTracksDatabase), | ||
76 | mSelectCountAlbumsForLyricistQuery(mTracksDatabase), mSelectAllGenresQuery(mTracksDatabase), | 79 | mSelectCountAlbumsForLyricistQuery(mTracksDatabase), mSelectAllGenresQuery(mTracksDatabase), | ||
77 | mSelectGenreForArtistQuery(mTracksDatabase), mSelectGenreForAlbumQuery(mTracksDatabase), | 80 | mSelectGenreForArtistQuery(mTracksDatabase), mSelectGenreForAlbumQuery(mTracksDatabase), | ||
78 | mUpdateTrackQuery(mTracksDatabase), mUpdateAlbumArtistQuery(mTracksDatabase), | 81 | mUpdateTrackQuery(mTracksDatabase), mUpdateAlbumArtistQuery(mTracksDatabase), | ||
82 | mUpdateRadioQuery(mTracksDatabase), | ||||
79 | mUpdateAlbumArtistInTracksQuery(mTracksDatabase), mQueryMaximumTrackIdQuery(mTracksDatabase), | 83 | mUpdateAlbumArtistInTracksQuery(mTracksDatabase), mQueryMaximumTrackIdQuery(mTracksDatabase), | ||
80 | mQueryMaximumAlbumIdQuery(mTracksDatabase), mQueryMaximumArtistIdQuery(mTracksDatabase), | 84 | mQueryMaximumAlbumIdQuery(mTracksDatabase), mQueryMaximumArtistIdQuery(mTracksDatabase), | ||
81 | mQueryMaximumLyricistIdQuery(mTracksDatabase), mQueryMaximumComposerIdQuery(mTracksDatabase), | 85 | mQueryMaximumLyricistIdQuery(mTracksDatabase), mQueryMaximumComposerIdQuery(mTracksDatabase), | ||
82 | mQueryMaximumGenreIdQuery(mTracksDatabase), mSelectAllArtistsWithGenreFilterQuery(mTracksDatabase), | 86 | mQueryMaximumGenreIdQuery(mTracksDatabase), mSelectAllArtistsWithGenreFilterQuery(mTracksDatabase), | ||
83 | mSelectAllAlbumsShortWithGenreArtistFilterQuery(mTracksDatabase), mSelectAllAlbumsShortWithArtistFilterQuery(mTracksDatabase), | 87 | mSelectAllAlbumsShortWithGenreArtistFilterQuery(mTracksDatabase), mSelectAllAlbumsShortWithArtistFilterQuery(mTracksDatabase), | ||
84 | mSelectAllRecentlyPlayedTracksQuery(mTracksDatabase), mSelectAllFrequentlyPlayedTracksQuery(mTracksDatabase), | 88 | mSelectAllRecentlyPlayedTracksQuery(mTracksDatabase), mSelectAllFrequentlyPlayedTracksQuery(mTracksDatabase), | ||
85 | mClearTracksTable(mTracksDatabase), mClearAlbumsTable(mTracksDatabase), mClearArtistsTable(mTracksDatabase), | 89 | mClearTracksTable(mTracksDatabase), mClearAlbumsTable(mTracksDatabase), mClearArtistsTable(mTracksDatabase), | ||
86 | mClearComposerTable(mTracksDatabase), mClearGenreTable(mTracksDatabase), mClearLyricistTable(mTracksDatabase), | 90 | mClearComposerTable(mTracksDatabase), mClearGenreTable(mTracksDatabase), mClearLyricistTable(mTracksDatabase), | ||
87 | mArtistMatchGenreQuery(mTracksDatabase), mSelectTrackIdQuery(mTracksDatabase) | 91 | mArtistMatchGenreQuery(mTracksDatabase), mSelectTrackIdQuery(mTracksDatabase), | ||
92 | mInsertRadioQuery(mTracksDatabase), mDeleteRadioQuery(mTracksDatabase) | ||||
88 | { | 93 | { | ||
89 | } | 94 | } | ||
90 | 95 | | |||
91 | QSqlDatabase mTracksDatabase; | 96 | QSqlDatabase mTracksDatabase; | ||
92 | 97 | | |||
93 | QSqlQuery mSelectAlbumQuery; | 98 | QSqlQuery mSelectAlbumQuery; | ||
94 | 99 | | |||
95 | QSqlQuery mSelectTrackQuery; | 100 | QSqlQuery mSelectTrackQuery; | ||
96 | 101 | | |||
97 | QSqlQuery mSelectAlbumIdFromTitleQuery; | 102 | QSqlQuery mSelectAlbumIdFromTitleQuery; | ||
98 | 103 | | |||
99 | QSqlQuery mInsertAlbumQuery; | 104 | QSqlQuery mInsertAlbumQuery; | ||
100 | 105 | | |||
101 | QSqlQuery mSelectTrackIdFromTitleAlbumIdArtistQuery; | 106 | QSqlQuery mSelectTrackIdFromTitleAlbumIdArtistQuery; | ||
102 | 107 | | |||
103 | QSqlQuery mInsertTrackQuery; | 108 | QSqlQuery mInsertTrackQuery; | ||
104 | 109 | | |||
105 | QSqlQuery mSelectTracksFromArtist; | 110 | QSqlQuery mSelectTracksFromArtist; | ||
106 | 111 | | |||
107 | QSqlQuery mSelectTrackFromIdQuery; | 112 | QSqlQuery mSelectTrackFromIdQuery; | ||
108 | 113 | | |||
114 | QSqlQuery mSelectRadioFromIdQuery; | ||||
115 | | ||||
109 | QSqlQuery mSelectCountAlbumsForArtistQuery; | 116 | QSqlQuery mSelectCountAlbumsForArtistQuery; | ||
110 | 117 | | |||
111 | QSqlQuery mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery; | 118 | QSqlQuery mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery; | ||
112 | 119 | | |||
113 | QSqlQuery mSelectAllAlbumsFromArtistQuery; | 120 | QSqlQuery mSelectAllAlbumsFromArtistQuery; | ||
114 | 121 | | |||
115 | QSqlQuery mSelectAllArtistsQuery; | 122 | QSqlQuery mSelectAllArtistsQuery; | ||
116 | 123 | | |||
117 | QSqlQuery mInsertArtistsQuery; | 124 | QSqlQuery mInsertArtistsQuery; | ||
118 | 125 | | |||
119 | QSqlQuery mSelectArtistByNameQuery; | 126 | QSqlQuery mSelectArtistByNameQuery; | ||
120 | 127 | | |||
121 | QSqlQuery mSelectArtistQuery; | 128 | QSqlQuery mSelectArtistQuery; | ||
122 | 129 | | |||
123 | QSqlQuery mUpdateTrackStatistics; | 130 | QSqlQuery mUpdateTrackStatistics; | ||
124 | 131 | | |||
125 | QSqlQuery mRemoveTrackQuery; | 132 | QSqlQuery mRemoveTrackQuery; | ||
126 | 133 | | |||
127 | QSqlQuery mRemoveAlbumQuery; | 134 | QSqlQuery mRemoveAlbumQuery; | ||
128 | 135 | | |||
129 | QSqlQuery mRemoveArtistQuery; | 136 | QSqlQuery mRemoveArtistQuery; | ||
130 | 137 | | |||
131 | QSqlQuery mSelectAllTracksQuery; | 138 | QSqlQuery mSelectAllTracksQuery; | ||
132 | 139 | | |||
140 | QSqlQuery mSelectAllRadiosQuery; | ||||
141 | | ||||
133 | QSqlQuery mInsertTrackMapping; | 142 | QSqlQuery mInsertTrackMapping; | ||
134 | 143 | | |||
135 | QSqlQuery mUpdateTrackFirstPlayStatistics; | 144 | QSqlQuery mUpdateTrackFirstPlayStatistics; | ||
136 | 145 | | |||
137 | QSqlQuery mInsertMusicSource; | 146 | QSqlQuery mInsertMusicSource; | ||
138 | 147 | | |||
139 | QSqlQuery mSelectMusicSource; | 148 | QSqlQuery mSelectMusicSource; | ||
140 | 149 | | |||
141 | QSqlQuery mUpdateTrackPriority; | 150 | QSqlQuery mUpdateTrackPriority; | ||
142 | 151 | | |||
143 | QSqlQuery mUpdateTrackFileModifiedTime; | 152 | QSqlQuery mUpdateTrackFileModifiedTime; | ||
144 | 153 | | |||
145 | QSqlQuery mSelectTracksMapping; | 154 | QSqlQuery mSelectTracksMapping; | ||
146 | 155 | | |||
147 | QSqlQuery mSelectTracksMappingPriority; | 156 | QSqlQuery mSelectTracksMappingPriority; | ||
148 | 157 | | |||
158 | QSqlQuery mSelectRadioIdFromHttpAddress; | ||||
159 | | ||||
149 | QSqlQuery mUpdateAlbumArtUriFromAlbumIdQuery; | 160 | QSqlQuery mUpdateAlbumArtUriFromAlbumIdQuery; | ||
150 | 161 | | |||
151 | QSqlQuery mSelectTracksMappingPriorityByTrackId; | 162 | QSqlQuery mSelectTracksMappingPriorityByTrackId; | ||
152 | 163 | | |||
153 | QSqlQuery mSelectAlbumIdsFromArtist; | 164 | QSqlQuery mSelectAlbumIdsFromArtist; | ||
154 | 165 | | |||
155 | QSqlQuery mSelectAllTrackFilesQuery; | 166 | QSqlQuery mSelectAllTrackFilesQuery; | ||
156 | 167 | | |||
▲ Show 20 Lines • Show All 46 Lines • ▼ Show 20 Line(s) | |||||
203 | QSqlQuery mSelectGenreForArtistQuery; | 214 | QSqlQuery mSelectGenreForArtistQuery; | ||
204 | 215 | | |||
205 | QSqlQuery mSelectGenreForAlbumQuery; | 216 | QSqlQuery mSelectGenreForAlbumQuery; | ||
206 | 217 | | |||
207 | QSqlQuery mUpdateTrackQuery; | 218 | QSqlQuery mUpdateTrackQuery; | ||
208 | 219 | | |||
209 | QSqlQuery mUpdateAlbumArtistQuery; | 220 | QSqlQuery mUpdateAlbumArtistQuery; | ||
210 | 221 | | |||
222 | QSqlQuery mUpdateRadioQuery; | ||||
223 | | ||||
211 | QSqlQuery mUpdateAlbumArtistInTracksQuery; | 224 | QSqlQuery mUpdateAlbumArtistInTracksQuery; | ||
212 | 225 | | |||
213 | QSqlQuery mQueryMaximumTrackIdQuery; | 226 | QSqlQuery mQueryMaximumTrackIdQuery; | ||
214 | 227 | | |||
215 | QSqlQuery mQueryMaximumAlbumIdQuery; | 228 | QSqlQuery mQueryMaximumAlbumIdQuery; | ||
216 | 229 | | |||
217 | QSqlQuery mQueryMaximumArtistIdQuery; | 230 | QSqlQuery mQueryMaximumArtistIdQuery; | ||
218 | 231 | | |||
Show All 24 Lines | |||||
243 | QSqlQuery mClearGenreTable; | 256 | QSqlQuery mClearGenreTable; | ||
244 | 257 | | |||
245 | QSqlQuery mClearLyricistTable; | 258 | QSqlQuery mClearLyricistTable; | ||
246 | 259 | | |||
247 | QSqlQuery mArtistMatchGenreQuery; | 260 | QSqlQuery mArtistMatchGenreQuery; | ||
248 | 261 | | |||
249 | QSqlQuery mSelectTrackIdQuery; | 262 | QSqlQuery mSelectTrackIdQuery; | ||
250 | 263 | | |||
264 | QSqlQuery mInsertRadioQuery; | ||||
265 | | ||||
266 | QSqlQuery mDeleteRadioQuery; | ||||
267 | | ||||
251 | QSet<qulonglong> mModifiedTrackIds; | 268 | QSet<qulonglong> mModifiedTrackIds; | ||
252 | 269 | | |||
253 | QSet<qulonglong> mModifiedAlbumIds; | 270 | QSet<qulonglong> mModifiedAlbumIds; | ||
254 | 271 | | |||
255 | QSet<qulonglong> mModifiedArtistIds; | 272 | QSet<qulonglong> mModifiedArtistIds; | ||
256 | 273 | | |||
257 | QSet<qulonglong> mInsertedTracks; | 274 | QSet<qulonglong> mInsertedTracks; | ||
258 | 275 | | |||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Line(s) | 362 | { | |||
359 | transactionResult = finishTransaction(); | 376 | transactionResult = finishTransaction(); | ||
360 | if (!transactionResult) { | 377 | if (!transactionResult) { | ||
361 | return result; | 378 | return result; | ||
362 | } | 379 | } | ||
363 | 380 | | |||
364 | return result; | 381 | return result; | ||
365 | } | 382 | } | ||
366 | 383 | | |||
384 | DatabaseInterface::ListRadioDataType DatabaseInterface::allRadiosData() | ||||
385 | { | ||||
386 | auto result = ListRadioDataType{}; | ||||
387 | | ||||
388 | if (!d) { | ||||
389 | return result; | ||||
390 | } | ||||
391 | | ||||
392 | auto transactionResult = startTransaction(); | ||||
393 | if (!transactionResult) { | ||||
394 | return result; | ||||
395 | } | ||||
396 | | ||||
397 | result = internalAllRadiosPartialData(); | ||||
398 | | ||||
399 | transactionResult = finishTransaction(); | ||||
400 | if (!transactionResult) { | ||||
401 | return result; | ||||
402 | } | ||||
403 | | ||||
404 | return result; | ||||
405 | } | ||||
406 | | ||||
367 | DatabaseInterface::ListTrackDataType DatabaseInterface::recentlyPlayedTracksData(int count) | 407 | DatabaseInterface::ListTrackDataType DatabaseInterface::recentlyPlayedTracksData(int count) | ||
368 | { | 408 | { | ||
369 | auto result = ListTrackDataType{}; | 409 | auto result = ListTrackDataType{}; | ||
370 | 410 | | |||
371 | if (!d) { | 411 | if (!d) { | ||
372 | return result; | 412 | return result; | ||
373 | } | 413 | } | ||
374 | 414 | | |||
▲ Show 20 Lines • Show All 322 Lines • ▼ Show 20 Line(s) | 723 | { | |||
697 | transactionResult = finishTransaction(); | 737 | transactionResult = finishTransaction(); | ||
698 | if (!transactionResult) { | 738 | if (!transactionResult) { | ||
699 | return result; | 739 | return result; | ||
700 | } | 740 | } | ||
701 | 741 | | |||
702 | return result; | 742 | return result; | ||
703 | } | 743 | } | ||
704 | 744 | | |||
745 | DatabaseInterface::TrackDataType DatabaseInterface::radioDataFromDatabaseId(qulonglong id) | ||||
746 | { | ||||
747 | auto result = TrackDataType(); | ||||
748 | | ||||
749 | if (!d) { | ||||
750 | return result; | ||||
751 | } | ||||
752 | | ||||
753 | auto transactionResult = startTransaction(); | ||||
754 | if (!transactionResult) { | ||||
755 | return result; | ||||
756 | } | ||||
757 | | ||||
758 | result = internalOneRadioPartialData(id); | ||||
759 | | ||||
760 | transactionResult = finishTransaction(); | ||||
761 | if (!transactionResult) { | ||||
762 | return result; | ||||
763 | } | ||||
764 | | ||||
765 | return result; | ||||
766 | } | ||||
767 | | ||||
705 | qulonglong DatabaseInterface::trackIdFromTitleAlbumTrackDiscNumber(const QString &title, const QString &artist, const std::optional<QString> &album, | 768 | qulonglong DatabaseInterface::trackIdFromTitleAlbumTrackDiscNumber(const QString &title, const QString &artist, const std::optional<QString> &album, | ||
706 | std::optional<int> trackNumber, std::optional<int> discNumber) | 769 | std::optional<int> trackNumber, std::optional<int> discNumber) | ||
707 | { | 770 | { | ||
708 | auto result = qulonglong(0); | 771 | auto result = qulonglong(0); | ||
709 | 772 | | |||
710 | if (!d) { | 773 | if (!d) { | ||
711 | return result; | 774 | return result; | ||
712 | } | 775 | } | ||
▲ Show 20 Lines • Show All 435 Lines • ▼ Show 20 Line(s) | 1158 | { | |||
1148 | listTables = d->mTracksDatabase.tables(); | 1211 | listTables = d->mTracksDatabase.tables(); | ||
1149 | 1212 | | |||
1150 | if (listTables.contains(QStringLiteral("DatabaseVersionV5")) && | 1213 | if (listTables.contains(QStringLiteral("DatabaseVersionV5")) && | ||
1151 | !listTables.contains(QStringLiteral("DatabaseVersionV9"))) { | 1214 | !listTables.contains(QStringLiteral("DatabaseVersionV9"))) { | ||
1152 | upgradeDatabaseV9(); | 1215 | upgradeDatabaseV9(); | ||
1153 | upgradeDatabaseV11(); | 1216 | upgradeDatabaseV11(); | ||
1154 | upgradeDatabaseV12(); | 1217 | upgradeDatabaseV12(); | ||
1155 | upgradeDatabaseV13(); | 1218 | upgradeDatabaseV13(); | ||
1219 | upgradeDatabaseV14(); | ||||
1156 | 1220 | | |||
1157 | checkDatabaseSchema(); | 1221 | checkDatabaseSchema(); | ||
1158 | } else if (listTables.contains(QStringLiteral("DatabaseVersionV9"))) { | 1222 | } else if (listTables.contains(QStringLiteral("DatabaseVersionV9"))) { | ||
1159 | if (!listTables.contains(QStringLiteral("DatabaseVersionV11"))) { | 1223 | if (!listTables.contains(QStringLiteral("DatabaseVersionV11"))) { | ||
1160 | upgradeDatabaseV11(); | 1224 | upgradeDatabaseV11(); | ||
1161 | } | 1225 | } | ||
1162 | if (!listTables.contains(QStringLiteral("DatabaseVersionV12"))) { | 1226 | if (!listTables.contains(QStringLiteral("DatabaseVersionV12"))) { | ||
1163 | upgradeDatabaseV12(); | 1227 | upgradeDatabaseV12(); | ||
1164 | } | 1228 | } | ||
1165 | if (!listTables.contains(QStringLiteral("DatabaseVersionV13"))) { | 1229 | if (!listTables.contains(QStringLiteral("DatabaseVersionV13"))) { | ||
1166 | upgradeDatabaseV13(); | 1230 | upgradeDatabaseV13(); | ||
1167 | } | 1231 | } | ||
1232 | if (!listTables.contains(QStringLiteral("DatabaseVersionV14"))) { | ||||
1233 | upgradeDatabaseV14(); | ||||
1234 | } | ||||
1168 | 1235 | | |||
1169 | checkDatabaseSchema(); | 1236 | checkDatabaseSchema(); | ||
1170 | } else { | 1237 | } else { | ||
1171 | createDatabaseV9(); | 1238 | createDatabaseV9(); | ||
1172 | upgradeDatabaseV11(); | 1239 | upgradeDatabaseV11(); | ||
1173 | upgradeDatabaseV12(); | 1240 | upgradeDatabaseV12(); | ||
1174 | upgradeDatabaseV13(); | 1241 | upgradeDatabaseV13(); | ||
1242 | upgradeDatabaseV14(); | ||||
1175 | } | 1243 | } | ||
1176 | } | 1244 | } | ||
1177 | 1245 | | |||
1178 | void DatabaseInterface::createDatabaseV9() | 1246 | void DatabaseInterface::createDatabaseV9() | ||
1179 | { | 1247 | { | ||
1180 | qCInfo(orgKdeElisaDatabase) << "begin creation of v9 database schema"; | 1248 | qCInfo(orgKdeElisaDatabase) << "begin creation of v9 database schema"; | ||
1181 | 1249 | | |||
1182 | { | 1250 | { | ||
▲ Show 20 Lines • Show All 1547 Lines • ▼ Show 20 Line(s) | 2795 | if (!result) { | |||
2730 | 2798 | | |||
2731 | Q_EMIT databaseError(); | 2799 | Q_EMIT databaseError(); | ||
2732 | } | 2800 | } | ||
2733 | } | 2801 | } | ||
2734 | 2802 | | |||
2735 | qCInfo(orgKdeElisaDatabase) << "finished update to v13 of database schema"; | 2803 | qCInfo(orgKdeElisaDatabase) << "finished update to v13 of database schema"; | ||
2736 | } | 2804 | } | ||
2737 | 2805 | | |||
2806 | void DatabaseInterface::upgradeDatabaseV14() | ||||
2807 | { | ||||
2808 | qCInfo(orgKdeElisaDatabase) << "begin update to v14 of database schema"; | ||||
2809 | | ||||
2810 | { | ||||
2811 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | ||||
2812 | | ||||
2813 | const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `DatabaseVersionV14` (`Version` INTEGER PRIMARY KEY NOT NULL)")); | ||||
2814 | | ||||
2815 | if (!result) { | ||||
2816 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << createSchemaQuery.lastQuery(); | ||||
2817 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << createSchemaQuery.lastError(); | ||||
2818 | | ||||
2819 | Q_EMIT databaseError(); | ||||
2820 | } | ||||
2821 | } | ||||
2822 | | ||||
2823 | { | ||||
2824 | QSqlQuery disableForeignKeys(d->mTracksDatabase); | ||||
2825 | | ||||
2826 | auto result = disableForeignKeys.exec(QStringLiteral(" PRAGMA foreign_keys=OFF")); | ||||
2827 | | ||||
2828 | if (!result) { | ||||
2829 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << disableForeignKeys.lastQuery(); | ||||
2830 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << disableForeignKeys.lastError(); | ||||
2831 | | ||||
2832 | Q_EMIT databaseError(); | ||||
2833 | } | ||||
2834 | } | ||||
2835 | | ||||
2836 | d->mTracksDatabase.transaction(); | ||||
2837 | | ||||
2838 | { | ||||
2839 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | ||||
2840 | | ||||
2841 | const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `Radios` (" | ||||
2842 | "`ID` INTEGER PRIMARY KEY AUTOINCREMENT, " | ||||
2843 | "`HttpAddress` VARCHAR(255) NOT NULL, " | ||||
2844 | "`Priority` INTEGER NOT NULL, " | ||||
Are you sure this column is needed ? mgallien: Are you sure this column is needed ?
The tracks have a Priority columns in order to deal with… | |||||
For now it is not needed, when I implemented the request, I was not sure about the priority purpose nor about what to keep. Given the role it makes more sense to remove it. jguidon: For now it is not needed, when I implemented the request, I was not sure about the priority… | |||||
2845 | "`Title` VARCHAR(85) NOT NULL, " | ||||
2846 | "`Rating` INTEGER NOT NULL DEFAULT 0, " | ||||
2847 | "`Genre` VARCHAR(55), " | ||||
2848 | "`Comment` VARCHAR(255), " | ||||
2849 | "UNIQUE (" | ||||
2850 | "`HttpAddress`" | ||||
2851 | "), " | ||||
2852 | "UNIQUE (" | ||||
2853 | "`Priority`, `Title`, `HttpAddress`" | ||||
2854 | ") " | ||||
2855 | "CONSTRAINT fk_tracks_genre FOREIGN KEY (`Genre`) REFERENCES `Genre`(`Name`))" | ||||
2856 | )); | ||||
2857 | | ||||
2858 | if (!result) { | ||||
2859 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << createSchemaQuery.lastQuery(); | ||||
2860 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << createSchemaQuery.lastError(); | ||||
2861 | | ||||
2862 | Q_EMIT databaseError(); | ||||
2863 | } | ||||
2864 | } | ||||
2865 | | ||||
2866 | { | ||||
2867 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | ||||
2868 | | ||||
2869 | //Find webradios (french): https://doc.ubuntu-fr.org/liste_radio_france | ||||
2870 | //English: https://www.radio.fr/language/english (to get the link play a radio and look for streamUrl in the html elements page). | ||||
2871 | const auto &result = createSchemaQuery.exec(QStringLiteral("INSERT INTO `Radios` (`HttpAddress`, `Priority`, `Title`) " | ||||
2872 | "SELECT 'http://classicrock.stream.ouifm.fr/ouifm3.mp3', 1, 'OuiFM_Classic_Rock' UNION ALL " | ||||
2873 | "SELECT 'http://rock70s.stream.ouifm.fr/ouifmseventies.mp3', 1, 'OuiFM_70s' UNION ALL " | ||||
2874 | "SELECT 'http://jazzradio.ice.infomaniak.ch/jazzradio-high.mp3', 2 , 'Jazz_Radio' UNION ALL " | ||||
2875 | "SELECT 'http://cdn.nrjaudio.fm/audio1/fr/30601/mp3_128.mp3?origine=playerweb', 1, 'Nostalgie' UNION ALL " | ||||
2876 | "SELECT 'https://scdn.nrjaudio.fm/audio1/fr/30713/aac_64.mp3?origine=playerweb', 1, 'Nostalgie Johnny' UNION ALL " | ||||
2877 | "SELECT 'http://sc-classrock.1.fm:8200', 1, 'Classic rock replay' UNION ALL " | ||||
2878 | "SELECT 'http://agnes.torontocast.com:8151/stream', 1, 'Instrumentals Forever' UNION ALL " | ||||
2879 | "SELECT 'https://stream.laut.fm/jahfari', 1, 'Jahfari'" | ||||
2880 | )); | ||||
2881 | if (!result) { | ||||
2882 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << createSchemaQuery.lastQuery(); | ||||
2883 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << createSchemaQuery.lastError(); | ||||
2884 | | ||||
2885 | Q_EMIT databaseError(); | ||||
2886 | } | ||||
2887 | } | ||||
2888 | | ||||
2889 | d->mTracksDatabase.commit(); | ||||
2890 | | ||||
2891 | { | ||||
2892 | QSqlQuery enableForeignKeys(d->mTracksDatabase); | ||||
2893 | | ||||
2894 | auto result = enableForeignKeys.exec(QStringLiteral(" PRAGMA foreign_keys=ON")); | ||||
2895 | | ||||
2896 | if (!result) { | ||||
2897 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << enableForeignKeys.lastQuery(); | ||||
2898 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << enableForeignKeys.lastError(); | ||||
2899 | | ||||
2900 | Q_EMIT databaseError(); | ||||
2901 | } | ||||
2902 | } | ||||
2903 | | ||||
2904 | qCInfo(orgKdeElisaDatabase) << "finished update to v14 of database schema"; | ||||
2905 | } | ||||
2906 | | ||||
2738 | void DatabaseInterface::checkDatabaseSchema() | 2907 | void DatabaseInterface::checkDatabaseSchema() | ||
2739 | { | 2908 | { | ||
2740 | checkAlbumsTableSchema(); | 2909 | checkAlbumsTableSchema(); | ||
2741 | if (d->mIsInBadState) | 2910 | if (d->mIsInBadState) | ||
2742 | { | 2911 | { | ||
2743 | resetDatabase(); | 2912 | resetDatabase(); | ||
2744 | return; | 2913 | return; | ||
2745 | } | 2914 | } | ||
▲ Show 20 Lines • Show All 701 Lines • ▼ Show 20 Line(s) | 3615 | if (!result) { | |||
3447 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTracksQuery.lastQuery(); | 3616 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTracksQuery.lastQuery(); | ||
3448 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTracksQuery.lastError(); | 3617 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTracksQuery.lastError(); | ||
3449 | 3618 | | |||
3450 | Q_EMIT databaseError(); | 3619 | Q_EMIT databaseError(); | ||
3451 | } | 3620 | } | ||
3452 | } | 3621 | } | ||
3453 | 3622 | | |||
3454 | { | 3623 | { | ||
3624 | auto selectAllRadiosText = QStringLiteral("SELECT " | ||||
3625 | "radios.`ID`, " | ||||
3626 | "radios.`Title`, " | ||||
3627 | "radios.`HttpAddress`, " | ||||
3628 | "radios.`Rating`, " | ||||
3629 | "trackGenre.`Name`, " | ||||
3630 | "radios.`Comment` " | ||||
3631 | "FROM " | ||||
3632 | "`Radios` radios " | ||||
3633 | "LEFT JOIN `Genre` trackGenre ON trackGenre.`Name` = radios.`Genre` " | ||||
3634 | ""); | ||||
3635 | | ||||
3636 | auto result = prepareQuery(d->mSelectAllRadiosQuery, selectAllRadiosText); | ||||
3637 | | ||||
3638 | if (!result) { | ||||
3639 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllRadiosQuery.lastQuery(); | ||||
3640 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllRadiosQuery.lastError(); | ||||
3641 | | ||||
3642 | Q_EMIT databaseError(); | ||||
3643 | } | ||||
3644 | } | ||||
3645 | | ||||
3646 | { | ||||
3455 | auto selectAllTracksText = QStringLiteral("SELECT " | 3647 | auto selectAllTracksText = QStringLiteral("SELECT " | ||
3456 | "tracks.`ID`, " | 3648 | "tracks.`ID`, " | ||
3457 | "tracks.`Title`, " | 3649 | "tracks.`Title`, " | ||
3458 | "album.`ID`, " | 3650 | "album.`ID`, " | ||
3459 | "tracks.`ArtistName`, " | 3651 | "tracks.`ArtistName`, " | ||
3460 | "( " | 3652 | "( " | ||
3461 | "SELECT " | 3653 | "SELECT " | ||
3462 | "COUNT(DISTINCT tracksFromAlbum1.`ArtistName`) " | 3654 | "COUNT(DISTINCT tracksFromAlbum1.`ArtistName`) " | ||
▲ Show 20 Lines • Show All 777 Lines • ▼ Show 20 Line(s) | 4317 | { | |||
4240 | 4432 | | |||
4241 | if (!result) { | 4433 | if (!result) { | ||
4242 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackFromIdQuery.lastQuery(); | 4434 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackFromIdQuery.lastQuery(); | ||
4243 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackFromIdQuery.lastError(); | 4435 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackFromIdQuery.lastError(); | ||
4244 | 4436 | | |||
4245 | Q_EMIT databaseError(); | 4437 | Q_EMIT databaseError(); | ||
4246 | } | 4438 | } | ||
4247 | } | 4439 | } | ||
4440 | | ||||
4441 | { | ||||
4442 | auto selectRadioFromIdQueryText = QStringLiteral("SELECT " | ||||
4443 | "radios.`ID`, " | ||||
4444 | "radios.`Title`, " | ||||
4445 | "radios.`HttpAddress`, " | ||||
4446 | "radios.`Rating`, " | ||||
4447 | "trackGenre.`Name`, " | ||||
4448 | "radios.`Comment` " | ||||
4449 | "FROM " | ||||
4450 | "`Radios` radios " | ||||
4451 | "LEFT JOIN `Genre` trackGenre ON trackGenre.`Name` = radios.`Genre` " | ||||
4452 | "WHERE " | ||||
4453 | "radios.`ID` = :radioId " | ||||
4454 | ""); | ||||
4455 | | ||||
4456 | auto result = prepareQuery(d->mSelectRadioFromIdQuery, selectRadioFromIdQueryText); | ||||
4457 | | ||||
4458 | if (!result) { | ||||
4459 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectRadioFromIdQuery.lastQuery(); | ||||
4460 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectRadioFromIdQuery.lastError(); | ||||
4461 | | ||||
4462 | Q_EMIT databaseError(); | ||||
4463 | } | ||||
4464 | } | ||||
4248 | { | 4465 | { | ||
4249 | auto selectCountAlbumsQueryText = QStringLiteral("SELECT count(*) " | 4466 | auto selectCountAlbumsQueryText = QStringLiteral("SELECT count(*) " | ||
4250 | "FROM `Albums` album " | 4467 | "FROM `Albums` album " | ||
4251 | "WHERE album.`ArtistName` = :artistName "); | 4468 | "WHERE album.`ArtistName` = :artistName "); | ||
4252 | 4469 | | |||
4253 | const auto result = prepareQuery(d->mSelectCountAlbumsForArtistQuery, selectCountAlbumsQueryText); | 4470 | const auto result = prepareQuery(d->mSelectCountAlbumsForArtistQuery, selectCountAlbumsQueryText); | ||
4254 | 4471 | | |||
4255 | if (!result) { | 4472 | if (!result) { | ||
▲ Show 20 Lines • Show All 390 Lines • ▼ Show 20 Line(s) | 4862 | if (!result) { | |||
4646 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMapping.lastQuery(); | 4863 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMapping.lastQuery(); | ||
4647 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMapping.lastError(); | 4864 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMapping.lastError(); | ||
4648 | 4865 | | |||
4649 | Q_EMIT databaseError(); | 4866 | Q_EMIT databaseError(); | ||
4650 | } | 4867 | } | ||
4651 | } | 4868 | } | ||
4652 | 4869 | | |||
4653 | { | 4870 | { | ||
4871 | auto selectRadioIdFromHttpAddress = QStringLiteral("SELECT " | ||||
4872 | "`ID` " | ||||
4873 | "FROM " | ||||
4874 | "`Radios` " | ||||
4875 | "WHERE " | ||||
4876 | "`HttpAddress` = :httpAddress"); | ||||
4877 | | ||||
4878 | auto result = prepareQuery(d->mSelectRadioIdFromHttpAddress, selectRadioIdFromHttpAddress); | ||||
4879 | | ||||
4880 | if (!result) { | ||||
4881 | qCInfo(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectRadioIdFromHttpAddress.lastQuery(); | ||||
4882 | qCInfo(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectRadioIdFromHttpAddress.lastError(); | ||||
4883 | | ||||
4884 | Q_EMIT databaseError(); | ||||
4885 | } | ||||
4886 | } | ||||
4887 | | ||||
4888 | { | ||||
4654 | auto selectTracksMappingPriorityQueryText = QStringLiteral("SELECT " | 4889 | auto selectTracksMappingPriorityQueryText = QStringLiteral("SELECT " | ||
4655 | "max(tracks.`Priority`) AS Priority " | 4890 | "max(tracks.`Priority`) AS Priority " | ||
4656 | "FROM " | 4891 | "FROM " | ||
4657 | "`Tracks` tracks, " | 4892 | "`Tracks` tracks, " | ||
4658 | "`Albums` albums " | 4893 | "`Albums` albums " | ||
4659 | "WHERE " | 4894 | "WHERE " | ||
4660 | "tracks.`Title` = :title AND " | 4895 | "tracks.`Title` = :title AND " | ||
4661 | "(tracks.`ArtistName` = :trackArtist OR tracks.`ArtistName` IS NULL) AND " | 4896 | "(tracks.`ArtistName` = :trackArtist OR tracks.`ArtistName` IS NULL) AND " | ||
▲ Show 20 Lines • Show All 205 Lines • ▼ Show 20 Line(s) | 5101 | if (!result) { | |||
4867 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackQuery.lastQuery(); | 5102 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackQuery.lastQuery(); | ||
4868 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackQuery.lastError(); | 5103 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackQuery.lastError(); | ||
4869 | 5104 | | |||
4870 | Q_EMIT databaseError(); | 5105 | Q_EMIT databaseError(); | ||
4871 | } | 5106 | } | ||
4872 | } | 5107 | } | ||
4873 | 5108 | | |||
4874 | { | 5109 | { | ||
5110 | auto insertRadioQueryText = QStringLiteral("INSERT INTO `Radios` " | ||||
5111 | "(" | ||||
5112 | "`Title`, " | ||||
5113 | "`httpAddress`, " | ||||
5114 | "`Comment`, " | ||||
5115 | "`Rating`, " | ||||
5116 | "`Priority`) " | ||||
5117 | "VALUES " | ||||
5118 | "(" | ||||
5119 | ":title, " | ||||
5120 | ":httpAddress, " | ||||
5121 | ":comment, " | ||||
5122 | ":trackRating," | ||||
5123 | "1)"); | ||||
5124 | | ||||
5125 | auto result = prepareQuery(d->mInsertRadioQuery, insertRadioQueryText); | ||||
5126 | | ||||
5127 | if (!result) { | ||||
5128 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertRadioQuery.lastQuery(); | ||||
5129 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertRadioQuery.lastError(); | ||||
5130 | | ||||
5131 | Q_EMIT databaseError(); | ||||
5132 | } | ||||
5133 | } | ||||
5134 | | ||||
5135 | { | ||||
5136 | auto deleteRadioQueryText = QStringLiteral("DELETE FROM `Radios` " | ||||
5137 | "WHERE `ID` = :radioId"); | ||||
5138 | | ||||
5139 | auto result = prepareQuery(d->mDeleteRadioQuery, deleteRadioQueryText); | ||||
5140 | | ||||
5141 | if (!result) { | ||||
5142 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mDeleteRadioQuery.lastQuery(); | ||||
5143 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mDeleteRadioQuery.lastError(); | ||||
5144 | | ||||
5145 | Q_EMIT databaseError(); | ||||
5146 | } | ||||
5147 | } | ||||
5148 | | ||||
5149 | { | ||||
5150 | auto updateRadioQueryText = QStringLiteral("UPDATE `Radios` " | ||||
5151 | "SET " | ||||
5152 | "`HttpAddress` = :httpAddress, " | ||||
5153 | "`Title` = :title, " | ||||
5154 | "`Comment` = :comment, " | ||||
5155 | "`Rating` = :trackRating " | ||||
5156 | "WHERE " | ||||
5157 | "`ID` = :radioId"); | ||||
5158 | | ||||
5159 | auto result = prepareQuery(d->mUpdateRadioQuery, updateRadioQueryText); | ||||
5160 | | ||||
5161 | if (!result) { | ||||
5162 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateRadioQuery.lastQuery(); | ||||
5163 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateRadioQuery.lastError(); | ||||
5164 | | ||||
5165 | Q_EMIT databaseError(); | ||||
5166 | } | ||||
5167 | } | ||||
5168 | | ||||
5169 | { | ||||
4875 | auto updateAlbumArtistQueryText = QStringLiteral("UPDATE `Albums` " | 5170 | auto updateAlbumArtistQueryText = QStringLiteral("UPDATE `Albums` " | ||
4876 | "SET " | 5171 | "SET " | ||
4877 | "`ArtistName` = :artistName " | 5172 | "`ArtistName` = :artistName " | ||
4878 | "WHERE " | 5173 | "WHERE " | ||
4879 | "`ID` = :albumId"); | 5174 | "`ID` = :albumId"); | ||
4880 | 5175 | | |||
4881 | auto result = prepareQuery(d->mUpdateAlbumArtistQuery, updateAlbumArtistQueryText); | 5176 | auto result = prepareQuery(d->mUpdateAlbumArtistQuery, updateAlbumArtistQueryText); | ||
4882 | 5177 | | |||
▲ Show 20 Lines • Show All 1205 Lines • ▼ Show 20 Line(s) | 6326 | { | |||
6088 | } | 6383 | } | ||
6089 | result[TrackDataType::key_type::PlayCounter] = trackRecord.value(28); | 6384 | result[TrackDataType::key_type::PlayCounter] = trackRecord.value(28); | ||
6090 | result[TrackDataType::key_type::PlayFrequency] = trackRecord.value(29); | 6385 | result[TrackDataType::key_type::PlayFrequency] = trackRecord.value(29); | ||
6091 | result[DataType::key_type::ElementTypeRole] = ElisaUtils::Track; | 6386 | result[DataType::key_type::ElementTypeRole] = ElisaUtils::Track; | ||
6092 | 6387 | | |||
6093 | return result; | 6388 | return result; | ||
6094 | } | 6389 | } | ||
6095 | 6390 | | |||
6391 | DatabaseInterface::TrackDataType DatabaseInterface::buildRadioDataFromDatabaseRecord(const QSqlRecord &trackRecord) const | ||||
6392 | { | ||||
6393 | TrackDataType result; | ||||
6394 | | ||||
6395 | result[TrackDataType::key_type::DatabaseIdRole] = trackRecord.value(0); | ||||
6396 | result[TrackDataType::key_type::TitleRole] = trackRecord.value(1); | ||||
6397 | | ||||
6398 | result[TrackDataType::key_type::AlbumRole] = QStringLiteral("Radios"); | ||||
6399 | result[TrackDataType::key_type::ArtistRole] = trackRecord.value(1); | ||||
6400 | | ||||
6401 | result[TrackDataType::key_type::ResourceRole] = trackRecord.value(2); | ||||
6402 | result[TrackDataType::key_type::RatingRole] = trackRecord.value(3); | ||||
6403 | if (!trackRecord.value(4).isNull()) { | ||||
6404 | result[TrackDataType::key_type::GenreRole] = trackRecord.value(4); | ||||
6405 | } | ||||
6406 | result[TrackDataType::key_type::CommentRole] = trackRecord.value(5); | ||||
6407 | result[DataType::key_type::ElementTypeRole] = ElisaUtils::Radio; | ||||
6408 | | ||||
6409 | return result; | ||||
6410 | } | ||||
6411 | | ||||
6096 | void DatabaseInterface::internalRemoveTracksList(const QList<QUrl> &removedTracks) | 6412 | void DatabaseInterface::internalRemoveTracksList(const QList<QUrl> &removedTracks) | ||
6097 | { | 6413 | { | ||
6098 | QSet<qulonglong> modifiedAlbums; | 6414 | QSet<qulonglong> modifiedAlbums; | ||
6099 | 6415 | | |||
6100 | QUrl::FormattingOptions currentOptions = QUrl::PreferLocalFile | | 6416 | QUrl::FormattingOptions currentOptions = QUrl::PreferLocalFile | | ||
6101 | QUrl::RemoveAuthority | QUrl::RemoveFilename | QUrl::RemoveFragment | | 6417 | QUrl::RemoveAuthority | QUrl::RemoveFilename | QUrl::RemoveFragment | | ||
6102 | QUrl::RemovePassword | QUrl::RemovePort | QUrl::RemoveQuery | | 6418 | QUrl::RemovePassword | QUrl::RemovePort | QUrl::RemoveQuery | | ||
6103 | QUrl::RemoveScheme | QUrl::RemoveUserInfo; | 6419 | QUrl::RemoveScheme | QUrl::RemoveUserInfo; | ||
▲ Show 20 Lines • Show All 371 Lines • ▼ Show 20 Line(s) | 6788 | if (!result || !d->mUpdateTrackQuery.isActive()) { | |||
6475 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.lastQuery(); | 6791 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.lastQuery(); | ||
6476 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.boundValues(); | 6792 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.boundValues(); | ||
6477 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.lastError(); | 6793 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.lastError(); | ||
6478 | } | 6794 | } | ||
6479 | 6795 | | |||
6480 | d->mUpdateTrackQuery.finish(); | 6796 | d->mUpdateTrackQuery.finish(); | ||
6481 | } | 6797 | } | ||
6482 | 6798 | | |||
6799 | void DatabaseInterface::insertRadio(const TrackDataType &oneTrack) | ||||
6800 | { | ||||
6801 | QSqlQuery query = d->mUpdateRadioQuery; | ||||
6802 | | ||||
6803 | if (oneTrack.databaseId() == -1ull) { | ||||
6804 | query = d->mInsertRadioQuery; | ||||
6805 | } | ||||
6806 | | ||||
6807 | query.bindValue(QStringLiteral(":httpAddress"), oneTrack.resourceURI()); | ||||
6808 | query.bindValue(QStringLiteral(":radioId"), oneTrack.databaseId()); | ||||
6809 | query.bindValue(QStringLiteral(":title"), oneTrack.title()); | ||||
6810 | query.bindValue(QStringLiteral(":comment"), oneTrack.comment()); | ||||
6811 | query.bindValue(QStringLiteral(":trackRating"), oneTrack.rating()); | ||||
6812 | | ||||
6813 | auto result = execQuery(query); | ||||
6814 | | ||||
6815 | if (!result || !query.isActive()) { | ||||
6816 | Q_EMIT databaseError(); | ||||
6817 | | ||||
6818 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.lastQuery(); | ||||
6819 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.boundValues(); | ||||
6820 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.lastError(); | ||||
6821 | }else{ | ||||
6822 | TrackDataType radio(oneTrack); | ||||
6823 | radio[TrackDataType::key_type::ArtistRole] = radio[TrackDataType::key_type::TitleRole]; | ||||
6824 | if (radio[TrackDataType::key_type::DatabaseIdRole] == -1) { | ||||
6825 | radio[TrackDataType::key_type::DatabaseIdRole] = internalRadioIdFromHttpAddress(oneTrack.resourceURI().toString()); | ||||
6826 | radio[TrackDataType::key_type::AlbumRole] = QStringLiteral("Radios"); | ||||
6827 | radio[TrackDataType::key_type::ArtistRole] = radio[TrackDataType::key_type::TitleRole]; | ||||
6828 | radio[DataType::key_type::ElementTypeRole] = ElisaUtils::Radio; | ||||
6829 | // Genre and rating missing for now, see buildRadioDataFromDatabaseRecord. Should be added if used for radios. | ||||
6830 | | ||||
6831 | Q_EMIT radioAdded(radio); | ||||
6832 | } else { | ||||
6833 | Q_EMIT radioModified(radio); | ||||
6834 | } | ||||
6835 | } | ||||
6836 | | ||||
6837 | query.finish(); | ||||
6838 | } | ||||
6839 | | ||||
6840 | void DatabaseInterface::removeRadio(qulonglong radioId) | ||||
6841 | { | ||||
6842 | QSqlQuery query = d->mDeleteRadioQuery; | ||||
6843 | | ||||
6844 | query.bindValue(QStringLiteral(":radioId"), radioId); | ||||
6845 | | ||||
6846 | auto result = execQuery(query); | ||||
6847 | | ||||
6848 | if (!result || !query.isActive()) { | ||||
6849 | Q_EMIT databaseError(); | ||||
6850 | | ||||
6851 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.lastQuery(); | ||||
6852 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.boundValues(); | ||||
6853 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.lastError(); | ||||
6854 | }else{ | ||||
6855 | Q_EMIT radioRemoved(radioId); | ||||
6856 | } | ||||
6857 | | ||||
6858 | query.finish(); | ||||
6859 | } | ||||
6860 | | ||||
6483 | void DatabaseInterface::removeAlbumInDatabase(qulonglong albumId) | 6861 | void DatabaseInterface::removeAlbumInDatabase(qulonglong albumId) | ||
6484 | { | 6862 | { | ||
6485 | d->mRemoveAlbumQuery.bindValue(QStringLiteral(":albumId"), albumId); | 6863 | d->mRemoveAlbumQuery.bindValue(QStringLiteral(":albumId"), albumId); | ||
6486 | 6864 | | |||
6487 | auto result = execQuery(d->mRemoveAlbumQuery); | 6865 | auto result = execQuery(d->mRemoveAlbumQuery); | ||
6488 | 6866 | | |||
6489 | if (!result || !d->mRemoveAlbumQuery.isActive()) { | 6867 | if (!result || !d->mRemoveAlbumQuery.isActive()) { | ||
6490 | Q_EMIT databaseError(); | 6868 | Q_EMIT databaseError(); | ||
▲ Show 20 Lines • Show All 326 Lines • ▼ Show 20 Line(s) | 7191 | if (d->mSelectTracksMapping.next()) { | |||
6817 | } | 7195 | } | ||
6818 | } | 7196 | } | ||
6819 | 7197 | | |||
6820 | d->mSelectTracksMapping.finish(); | 7198 | d->mSelectTracksMapping.finish(); | ||
6821 | 7199 | | |||
6822 | return result; | 7200 | return result; | ||
6823 | } | 7201 | } | ||
6824 | 7202 | | |||
7203 | qulonglong DatabaseInterface::internalRadioIdFromHttpAddress(const QString &httpAddress) | ||||
7204 | { | ||||
7205 | auto result = qulonglong(0); | ||||
7206 | | ||||
7207 | if (!d) { | ||||
7208 | return result; | ||||
7209 | } | ||||
7210 | | ||||
7211 | d->mSelectRadioIdFromHttpAddress.bindValue(QStringLiteral(":httpAddress"), httpAddress); | ||||
7212 | | ||||
7213 | auto queryResult = execQuery(d->mSelectRadioIdFromHttpAddress); | ||||
7214 | | ||||
7215 | if (!queryResult || !d->mSelectRadioIdFromHttpAddress.isSelect() || !d->mSelectRadioIdFromHttpAddress.isActive()) { | ||||
7216 | Q_EMIT databaseError(); | ||||
7217 | | ||||
7218 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalTrackIdFromFileName" << d->mSelectRadioIdFromHttpAddress.lastQuery(); | ||||
7219 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalTrackIdFromFileName" << d->mSelectRadioIdFromHttpAddress.boundValues(); | ||||
7220 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalTrackIdFromFileName" << d->mSelectRadioIdFromHttpAddress.lastError(); | ||||
7221 | | ||||
7222 | d->mSelectRadioIdFromHttpAddress.finish(); | ||||
7223 | | ||||
7224 | return result; | ||||
7225 | } | ||||
7226 | | ||||
7227 | if (d->mSelectRadioIdFromHttpAddress.next()) { | ||||
7228 | const auto ¤tRecordValue = d->mSelectRadioIdFromHttpAddress.record().value(0); | ||||
7229 | if (currentRecordValue.isValid()) { | ||||
7230 | result = currentRecordValue.toULongLong(); | ||||
7231 | } | ||||
7232 | } | ||||
7233 | | ||||
7234 | d->mSelectRadioIdFromHttpAddress.finish(); | ||||
7235 | | ||||
7236 | return result; | ||||
7237 | } | ||||
7238 | | ||||
6825 | DatabaseInterface::ListTrackDataType DatabaseInterface::internalTracksFromAuthor(const QString &ArtistName) | 7239 | DatabaseInterface::ListTrackDataType DatabaseInterface::internalTracksFromAuthor(const QString &ArtistName) | ||
6826 | { | 7240 | { | ||
6827 | auto allTracks = ListTrackDataType{}; | 7241 | auto allTracks = ListTrackDataType{}; | ||
6828 | 7242 | | |||
6829 | d->mSelectTracksFromArtist.bindValue(QStringLiteral(":artistName"), ArtistName); | 7243 | d->mSelectTracksFromArtist.bindValue(QStringLiteral(":artistName"), ArtistName); | ||
6830 | 7244 | | |||
6831 | auto result = execQuery(d->mSelectTracksFromArtist); | 7245 | auto result = execQuery(d->mSelectTracksFromArtist); | ||
6832 | 7246 | | |||
▲ Show 20 Lines • Show All 185 Lines • ▼ Show 20 Line(s) | 7427 | while(d->mSelectAllTracksQuery.next()) { | |||
7018 | result.push_back(newData); | 7432 | result.push_back(newData); | ||
7019 | } | 7433 | } | ||
7020 | 7434 | | |||
7021 | d->mSelectAllTracksQuery.finish(); | 7435 | d->mSelectAllTracksQuery.finish(); | ||
7022 | 7436 | | |||
7023 | return result; | 7437 | return result; | ||
7024 | } | 7438 | } | ||
7025 | 7439 | | |||
7440 | DatabaseInterface::ListRadioDataType DatabaseInterface::internalAllRadiosPartialData() | ||||
7441 | { | ||||
7442 | auto result = ListRadioDataType{}; | ||||
7443 | | ||||
7444 | if (!internalGenericPartialData(d->mSelectAllRadiosQuery)) { | ||||
7445 | return result; | ||||
7446 | } | ||||
7447 | | ||||
7448 | while(d->mSelectAllRadiosQuery.next()) { | ||||
7449 | const auto ¤tRecord = d->mSelectAllRadiosQuery.record(); | ||||
7450 | | ||||
7451 | auto newData = buildRadioDataFromDatabaseRecord(currentRecord); | ||||
7452 | | ||||
7453 | result.push_back(newData); | ||||
7454 | } | ||||
7455 | | ||||
7456 | d->mSelectAllRadiosQuery.finish(); | ||||
7457 | | ||||
7458 | return result; | ||||
7459 | } | ||||
7460 | | ||||
7026 | DatabaseInterface::ListTrackDataType DatabaseInterface::internalRecentlyPlayedTracksData(int count) | 7461 | DatabaseInterface::ListTrackDataType DatabaseInterface::internalRecentlyPlayedTracksData(int count) | ||
7027 | { | 7462 | { | ||
7028 | auto result = ListTrackDataType{}; | 7463 | auto result = ListTrackDataType{}; | ||
7029 | 7464 | | |||
7030 | d->mSelectAllRecentlyPlayedTracksQuery.bindValue(QStringLiteral(":maximumResults"), count); | 7465 | d->mSelectAllRecentlyPlayedTracksQuery.bindValue(QStringLiteral(":maximumResults"), count); | ||
7031 | 7466 | | |||
7032 | if (!internalGenericPartialData(d->mSelectAllRecentlyPlayedTracksQuery)) { | 7467 | if (!internalGenericPartialData(d->mSelectAllRecentlyPlayedTracksQuery)) { | ||
7033 | return result; | 7468 | return result; | ||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Line(s) | 7517 | if (d->mSelectTrackFromIdQuery.next()) { | |||
7085 | result = buildTrackDataFromDatabaseRecord(currentRecord); | 7520 | result = buildTrackDataFromDatabaseRecord(currentRecord); | ||
7086 | } | 7521 | } | ||
7087 | 7522 | | |||
7088 | d->mSelectTrackFromIdQuery.finish(); | 7523 | d->mSelectTrackFromIdQuery.finish(); | ||
7089 | 7524 | | |||
7090 | return result; | 7525 | return result; | ||
7091 | } | 7526 | } | ||
7092 | 7527 | | |||
7528 | DatabaseInterface::TrackDataType DatabaseInterface::internalOneRadioPartialData(qulonglong databaseId) | ||||
7529 | { | ||||
7530 | auto result = TrackDataType{}; | ||||
7531 | | ||||
7532 | d->mSelectRadioFromIdQuery.bindValue(QStringLiteral(":radioId"), databaseId); | ||||
7533 | | ||||
7534 | if (!internalGenericPartialData(d->mSelectRadioFromIdQuery)) { | ||||
7535 | return result; | ||||
7536 | } | ||||
7537 | | ||||
7538 | if (d->mSelectRadioFromIdQuery.next()) { | ||||
7539 | const auto ¤tRecord = d->mSelectRadioFromIdQuery.record(); | ||||
7540 | | ||||
7541 | result = buildRadioDataFromDatabaseRecord(currentRecord); | ||||
7542 | } | ||||
7543 | | ||||
7544 | d->mSelectRadioFromIdQuery.finish(); | ||||
7545 | | ||||
7546 | return result; | ||||
7547 | } | ||||
7548 | | ||||
7093 | DatabaseInterface::ListGenreDataType DatabaseInterface::internalAllGenresPartialData() | 7549 | DatabaseInterface::ListGenreDataType DatabaseInterface::internalAllGenresPartialData() | ||
7094 | { | 7550 | { | ||
7095 | ListGenreDataType result; | 7551 | ListGenreDataType result; | ||
7096 | 7552 | | |||
7097 | if (!internalGenericPartialData(d->mSelectAllGenresQuery)) { | 7553 | if (!internalGenericPartialData(d->mSelectAllGenresQuery)) { | ||
7098 | return result; | 7554 | return result; | ||
7099 | } | 7555 | } | ||
7100 | 7556 | | |||
▲ Show 20 Lines • Show All 179 Lines • Show Last 20 Lines |
The initialization order for the members generate some warnings at compilation:
../src/databaseinterface.cpp: In constructor ‘DatabaseInterfacePrivate::DatabaseInterfacePrivate(const QSqlDatabase&)’:
../src/databaseinterface.cpp:158:15: warning: ‘DatabaseInterfacePrivate::mSelectTracksMappingPriority’ will be initialized after [-Wreorder]
../src/databaseinterface.cpp:156:15: warning: ‘QSqlQuery DatabaseInterfacePrivate::mSelectRadioIdFromHttpAddress’ [-Wreorder]
../src/databaseinterface.cpp:47:5: warning: when initialized here [-Wreorder]
../src/databaseinterface.cpp:222:15: warning: ‘DatabaseInterfacePrivate::mUpdateAlbumArtistQuery’ will be initialized after [-Wreorder]
../src/databaseinterface.cpp:220:15: warning: ‘QSqlQuery DatabaseInterfacePrivate::mUpdateRadioQuery’ [-Wreorder]
../src/databaseinterface.cpp:47:5: warning: when initialized here [-Wreorder]