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 | | |||
156 | QSqlQuery mSelectRadioIdFromHttpAddress; | ||||
157 | | ||||
147 | QSqlQuery mSelectTracksMappingPriority; | 158 | QSqlQuery mSelectTracksMappingPriority; | ||
148 | 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 | | |||
▲ Show 20 Lines • Show All 46 Lines • ▼ Show 20 Line(s) | |||||
201 | QSqlQuery mSelectAllGenresQuery; | 212 | QSqlQuery mSelectAllGenresQuery; | ||
202 | 213 | | |||
203 | QSqlQuery mSelectGenreForArtistQuery; | 214 | QSqlQuery mSelectGenreForArtistQuery; | ||
204 | 215 | | |||
205 | QSqlQuery mSelectGenreForAlbumQuery; | 216 | QSqlQuery mSelectGenreForAlbumQuery; | ||
206 | 217 | | |||
207 | QSqlQuery mUpdateTrackQuery; | 218 | QSqlQuery mUpdateTrackQuery; | ||
208 | 219 | | |||
220 | QSqlQuery mUpdateRadioQuery; | ||||
221 | | ||||
209 | QSqlQuery mUpdateAlbumArtistQuery; | 222 | QSqlQuery mUpdateAlbumArtistQuery; | ||
210 | 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 | | |||
Show All 26 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::ListTrackDataType DatabaseInterface::allRadiosData() | ||||
385 | { | ||||
386 | auto result = ListTrackDataType{}; | ||||
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 663 Lines • ▼ Show 20 Line(s) | 3577 | if (!result) { | |||
3409 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTracksQuery.lastQuery(); | 3578 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTracksQuery.lastQuery(); | ||
3410 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTracksQuery.lastError(); | 3579 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTracksQuery.lastError(); | ||
3411 | 3580 | | |||
3412 | Q_EMIT databaseError(); | 3581 | Q_EMIT databaseError(); | ||
3413 | } | 3582 | } | ||
3414 | } | 3583 | } | ||
3415 | 3584 | | |||
3416 | { | 3585 | { | ||
3586 | auto selectAllRadiosText = QStringLiteral("SELECT " | ||||
3587 | "radios.`ID`, " | ||||
3588 | "radios.`Title`, " | ||||
3589 | "radios.`HttpAddress`, " | ||||
3590 | "radios.`Rating`, " | ||||
3591 | "trackGenre.`Name`, " | ||||
3592 | "radios.`Comment` " | ||||
3593 | "FROM " | ||||
3594 | "`Radios` radios " | ||||
3595 | "LEFT JOIN `Genre` trackGenre ON trackGenre.`Name` = radios.`Genre` " | ||||
3596 | ""); | ||||
3597 | | ||||
3598 | auto result = prepareQuery(d->mSelectAllRadiosQuery, selectAllRadiosText); | ||||
3599 | | ||||
3600 | if (!result) { | ||||
3601 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllRadiosQuery.lastQuery(); | ||||
3602 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllRadiosQuery.lastError(); | ||||
3603 | | ||||
3604 | Q_EMIT databaseError(); | ||||
3605 | } | ||||
3606 | } | ||||
3607 | | ||||
3608 | { | ||||
3417 | auto selectAllTracksText = QStringLiteral("SELECT " | 3609 | auto selectAllTracksText = QStringLiteral("SELECT " | ||
3418 | "tracks.`ID`, " | 3610 | "tracks.`ID`, " | ||
3419 | "tracks.`Title`, " | 3611 | "tracks.`Title`, " | ||
3420 | "album.`ID`, " | 3612 | "album.`ID`, " | ||
3421 | "tracks.`ArtistName`, " | 3613 | "tracks.`ArtistName`, " | ||
3422 | "tracks.`AlbumArtistName`, " | 3614 | "tracks.`AlbumArtistName`, " | ||
3423 | "tracksMapping.`FileName`, " | 3615 | "tracksMapping.`FileName`, " | ||
3424 | "tracksMapping.`FileModifiedTime`, " | 3616 | "tracksMapping.`FileModifiedTime`, " | ||
▲ Show 20 Lines • Show All 637 Lines • ▼ Show 20 Line(s) | 4167 | { | |||
4062 | 4254 | | |||
4063 | if (!result) { | 4255 | if (!result) { | ||
4064 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackFromIdQuery.lastQuery(); | 4256 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackFromIdQuery.lastQuery(); | ||
4065 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackFromIdQuery.lastError(); | 4257 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackFromIdQuery.lastError(); | ||
4066 | 4258 | | |||
4067 | Q_EMIT databaseError(); | 4259 | Q_EMIT databaseError(); | ||
4068 | } | 4260 | } | ||
4069 | } | 4261 | } | ||
4262 | | ||||
4263 | { | ||||
4264 | auto selectRadioFromIdQueryText = QStringLiteral("SELECT " | ||||
4265 | "radios.`ID`, " | ||||
4266 | "radios.`Title`, " | ||||
4267 | "radios.`HttpAddress`, " | ||||
4268 | "radios.`Rating`, " | ||||
4269 | "trackGenre.`Name`, " | ||||
4270 | "radios.`Comment` " | ||||
4271 | "FROM " | ||||
4272 | "`Radios` radios " | ||||
4273 | "LEFT JOIN `Genre` trackGenre ON trackGenre.`Name` = radios.`Genre` " | ||||
4274 | "WHERE " | ||||
4275 | "radios.`ID` = :radioId " | ||||
4276 | ""); | ||||
4277 | | ||||
4278 | auto result = prepareQuery(d->mSelectRadioFromIdQuery, selectRadioFromIdQueryText); | ||||
4279 | | ||||
4280 | if (!result) { | ||||
4281 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectRadioFromIdQuery.lastQuery(); | ||||
4282 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectRadioFromIdQuery.lastError(); | ||||
4283 | | ||||
4284 | Q_EMIT databaseError(); | ||||
4285 | } | ||||
4286 | } | ||||
4070 | { | 4287 | { | ||
4071 | auto selectCountAlbumsQueryText = QStringLiteral("SELECT count(*) " | 4288 | auto selectCountAlbumsQueryText = QStringLiteral("SELECT count(*) " | ||
4072 | "FROM `Albums` album " | 4289 | "FROM `Albums` album " | ||
4073 | "WHERE album.`ArtistName` = :artistName "); | 4290 | "WHERE album.`ArtistName` = :artistName "); | ||
4074 | 4291 | | |||
4075 | const auto result = prepareQuery(d->mSelectCountAlbumsForArtistQuery, selectCountAlbumsQueryText); | 4292 | const auto result = prepareQuery(d->mSelectCountAlbumsForArtistQuery, selectCountAlbumsQueryText); | ||
4076 | 4293 | | |||
4077 | if (!result) { | 4294 | if (!result) { | ||
▲ Show 20 Lines • Show All 362 Lines • ▼ Show 20 Line(s) | 4656 | if (!result) { | |||
4440 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMapping.lastQuery(); | 4657 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMapping.lastQuery(); | ||
4441 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMapping.lastError(); | 4658 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMapping.lastError(); | ||
4442 | 4659 | | |||
4443 | Q_EMIT databaseError(); | 4660 | Q_EMIT databaseError(); | ||
4444 | } | 4661 | } | ||
4445 | } | 4662 | } | ||
4446 | 4663 | | |||
4447 | { | 4664 | { | ||
4665 | auto selectRadioIdFromHttpAddress = QStringLiteral("SELECT " | ||||
4666 | "`ID` " | ||||
4667 | "FROM " | ||||
4668 | "`Radios` " | ||||
4669 | "WHERE " | ||||
4670 | "`HttpAddress` = :httpAddress"); | ||||
4671 | | ||||
4672 | auto result = prepareQuery(d->mSelectRadioIdFromHttpAddress, selectRadioIdFromHttpAddress); | ||||
4673 | | ||||
4674 | if (!result) { | ||||
4675 | qCInfo(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectRadioIdFromHttpAddress.lastQuery(); | ||||
4676 | qCInfo(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectRadioIdFromHttpAddress.lastError(); | ||||
4677 | | ||||
4678 | Q_EMIT databaseError(); | ||||
4679 | } | ||||
4680 | } | ||||
4681 | | ||||
4682 | { | ||||
4448 | auto selectTracksMappingPriorityQueryText = QStringLiteral("SELECT " | 4683 | auto selectTracksMappingPriorityQueryText = QStringLiteral("SELECT " | ||
4449 | "max(tracks.`Priority`) AS Priority " | 4684 | "max(tracks.`Priority`) AS Priority " | ||
4450 | "FROM " | 4685 | "FROM " | ||
4451 | "`Tracks` tracks, " | 4686 | "`Tracks` tracks, " | ||
4452 | "`Albums` albums " | 4687 | "`Albums` albums " | ||
4453 | "WHERE " | 4688 | "WHERE " | ||
4454 | "tracks.`Title` = :title AND " | 4689 | "tracks.`Title` = :title AND " | ||
4455 | "(tracks.`ArtistName` = :trackArtist OR tracks.`ArtistName` IS NULL) AND " | 4690 | "(tracks.`ArtistName` = :trackArtist OR tracks.`ArtistName` IS NULL) AND " | ||
▲ Show 20 Lines • Show All 205 Lines • ▼ Show 20 Line(s) | 4895 | if (!result) { | |||
4661 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackQuery.lastQuery(); | 4896 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackQuery.lastQuery(); | ||
4662 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackQuery.lastError(); | 4897 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackQuery.lastError(); | ||
4663 | 4898 | | |||
4664 | Q_EMIT databaseError(); | 4899 | Q_EMIT databaseError(); | ||
4665 | } | 4900 | } | ||
4666 | } | 4901 | } | ||
4667 | 4902 | | |||
4668 | { | 4903 | { | ||
4904 | auto insertRadioQueryText = QStringLiteral("INSERT INTO `Radios` " | ||||
4905 | "(" | ||||
4906 | "`Title`, " | ||||
4907 | "`httpAddress`, " | ||||
4908 | "`Comment`, " | ||||
4909 | "`Rating`, " | ||||
4910 | "`Priority`) " | ||||
4911 | "VALUES " | ||||
4912 | "(" | ||||
4913 | ":title, " | ||||
4914 | ":httpAddress, " | ||||
4915 | ":comment, " | ||||
4916 | ":trackRating," | ||||
4917 | "1)"); | ||||
4918 | | ||||
4919 | auto result = prepareQuery(d->mInsertRadioQuery, insertRadioQueryText); | ||||
4920 | | ||||
4921 | if (!result) { | ||||
4922 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertRadioQuery.lastQuery(); | ||||
4923 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertRadioQuery.lastError(); | ||||
4924 | | ||||
4925 | Q_EMIT databaseError(); | ||||
4926 | } | ||||
4927 | } | ||||
4928 | | ||||
4929 | { | ||||
4930 | auto deleteRadioQueryText = QStringLiteral("DELETE FROM `Radios` " | ||||
4931 | "WHERE `ID` = :radioId"); | ||||
4932 | | ||||
4933 | auto result = prepareQuery(d->mDeleteRadioQuery, deleteRadioQueryText); | ||||
4934 | | ||||
4935 | if (!result) { | ||||
4936 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mDeleteRadioQuery.lastQuery(); | ||||
4937 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mDeleteRadioQuery.lastError(); | ||||
4938 | | ||||
4939 | Q_EMIT databaseError(); | ||||
4940 | } | ||||
4941 | } | ||||
4942 | | ||||
4943 | { | ||||
4944 | auto updateRadioQueryText = QStringLiteral("UPDATE `Radios` " | ||||
4945 | "SET " | ||||
4946 | "`HttpAddress` = :httpAddress, " | ||||
4947 | "`Title` = :title, " | ||||
4948 | "`Comment` = :comment, " | ||||
4949 | "`Rating` = :trackRating " | ||||
4950 | "WHERE " | ||||
4951 | "`ID` = :radioId"); | ||||
4952 | | ||||
4953 | auto result = prepareQuery(d->mUpdateRadioQuery, updateRadioQueryText); | ||||
4954 | | ||||
4955 | if (!result) { | ||||
4956 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateRadioQuery.lastQuery(); | ||||
4957 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateRadioQuery.lastError(); | ||||
4958 | | ||||
4959 | Q_EMIT databaseError(); | ||||
4960 | } | ||||
4961 | } | ||||
4962 | | ||||
4963 | { | ||||
4669 | auto updateAlbumArtistQueryText = QStringLiteral("UPDATE `Albums` " | 4964 | auto updateAlbumArtistQueryText = QStringLiteral("UPDATE `Albums` " | ||
4670 | "SET " | 4965 | "SET " | ||
4671 | "`ArtistName` = :artistName " | 4966 | "`ArtistName` = :artistName " | ||
4672 | "WHERE " | 4967 | "WHERE " | ||
4673 | "`ID` = :albumId"); | 4968 | "`ID` = :albumId"); | ||
4674 | 4969 | | |||
4675 | auto result = prepareQuery(d->mUpdateAlbumArtistQuery, updateAlbumArtistQueryText); | 4970 | auto result = prepareQuery(d->mUpdateAlbumArtistQuery, updateAlbumArtistQueryText); | ||
4676 | 4971 | | |||
▲ Show 20 Lines • Show All 1190 Lines • ▼ Show 20 Line(s) | 6115 | { | |||
5867 | } | 6162 | } | ||
5868 | result[TrackDataType::key_type::PlayCounter] = trackRecord.value(26); | 6163 | result[TrackDataType::key_type::PlayCounter] = trackRecord.value(26); | ||
5869 | result[TrackDataType::key_type::PlayFrequency] = trackRecord.value(27); | 6164 | result[TrackDataType::key_type::PlayFrequency] = trackRecord.value(27); | ||
5870 | result[DataType::key_type::ElementTypeRole] = ElisaUtils::Track; | 6165 | result[DataType::key_type::ElementTypeRole] = ElisaUtils::Track; | ||
5871 | 6166 | | |||
5872 | return result; | 6167 | return result; | ||
5873 | } | 6168 | } | ||
5874 | 6169 | | |||
6170 | DatabaseInterface::TrackDataType DatabaseInterface::buildRadioDataFromDatabaseRecord(const QSqlRecord &trackRecord) const | ||||
6171 | { | ||||
6172 | TrackDataType result; | ||||
6173 | | ||||
6174 | result[TrackDataType::key_type::DatabaseIdRole] = trackRecord.value(0); | ||||
6175 | result[TrackDataType::key_type::TitleRole] = trackRecord.value(1); | ||||
6176 | | ||||
6177 | result[TrackDataType::key_type::AlbumRole] = QStringLiteral("Radios"); | ||||
6178 | result[TrackDataType::key_type::ArtistRole] = trackRecord.value(1); | ||||
6179 | | ||||
6180 | result[TrackDataType::key_type::ResourceRole] = trackRecord.value(2); | ||||
6181 | result[TrackDataType::key_type::RatingRole] = trackRecord.value(3); | ||||
6182 | if (!trackRecord.value(4).isNull()) { | ||||
6183 | result[TrackDataType::key_type::GenreRole] = trackRecord.value(4); | ||||
6184 | } | ||||
6185 | result[TrackDataType::key_type::CommentRole] = trackRecord.value(5); | ||||
6186 | result[DataType::key_type::ElementTypeRole] = ElisaUtils::Radio; | ||||
6187 | | ||||
6188 | return result; | ||||
6189 | } | ||||
6190 | | ||||
5875 | void DatabaseInterface::internalRemoveTracksList(const QList<QUrl> &removedTracks) | 6191 | void DatabaseInterface::internalRemoveTracksList(const QList<QUrl> &removedTracks) | ||
5876 | { | 6192 | { | ||
5877 | QSet<qulonglong> modifiedAlbums; | 6193 | QSet<qulonglong> modifiedAlbums; | ||
5878 | 6194 | | |||
5879 | QUrl::FormattingOptions currentOptions = QUrl::PreferLocalFile | | 6195 | QUrl::FormattingOptions currentOptions = QUrl::PreferLocalFile | | ||
5880 | QUrl::RemoveAuthority | QUrl::RemoveFilename | QUrl::RemoveFragment | | 6196 | QUrl::RemoveAuthority | QUrl::RemoveFilename | QUrl::RemoveFragment | | ||
5881 | QUrl::RemovePassword | QUrl::RemovePort | QUrl::RemoveQuery | | 6197 | QUrl::RemovePassword | QUrl::RemovePort | QUrl::RemoveQuery | | ||
5882 | QUrl::RemoveScheme | QUrl::RemoveUserInfo; | 6198 | QUrl::RemoveScheme | QUrl::RemoveUserInfo; | ||
▲ Show 20 Lines • Show All 371 Lines • ▼ Show 20 Line(s) | 6567 | if (!result || !d->mUpdateTrackQuery.isActive()) { | |||
6254 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.lastQuery(); | 6570 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.lastQuery(); | ||
6255 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.boundValues(); | 6571 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.boundValues(); | ||
6256 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.lastError(); | 6572 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.lastError(); | ||
6257 | } | 6573 | } | ||
6258 | 6574 | | |||
6259 | d->mUpdateTrackQuery.finish(); | 6575 | d->mUpdateTrackQuery.finish(); | ||
6260 | } | 6576 | } | ||
6261 | 6577 | | |||
6578 | void DatabaseInterface::updateRadioInDatabase(const TrackDataType &oneTrack) | ||||
6579 | { | ||||
6580 | QSqlQuery query = d->mUpdateRadioQuery; | ||||
6581 | bool isInsertion = false; | ||||
6582 | | ||||
6583 | if(oneTrack.databaseId() == -1ull){ | ||||
6584 | query = d->mInsertRadioQuery; | ||||
6585 | isInsertion = true; | ||||
6586 | } | ||||
6587 | | ||||
6588 | query.bindValue(QStringLiteral(":httpAddress"), oneTrack.resourceURI()); | ||||
6589 | query.bindValue(QStringLiteral(":radioId"), oneTrack.databaseId()); | ||||
6590 | query.bindValue(QStringLiteral(":title"), oneTrack.title()); | ||||
6591 | query.bindValue(QStringLiteral(":comment"), oneTrack.comment()); | ||||
6592 | query.bindValue(QStringLiteral(":trackRating"), oneTrack.rating()); | ||||
6593 | | ||||
6594 | auto result = execQuery(query); | ||||
6595 | | ||||
6596 | if (!result || !query.isActive()) { | ||||
6597 | Q_EMIT databaseError(); | ||||
6598 | | ||||
6599 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.lastQuery(); | ||||
6600 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.boundValues(); | ||||
6601 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.lastError(); | ||||
6602 | }else{ | ||||
6603 | TrackDataType radio(oneTrack); | ||||
6604 | radio[TrackDataType::key_type::ArtistRole] = radio[TrackDataType::key_type::TitleRole]; | ||||
6605 | if(radio[TrackDataType::key_type::DatabaseIdRole] == -1){ | ||||
6606 | radio[TrackDataType::key_type::DatabaseIdRole] = internalRadioIdFromHttpAddress(oneTrack.resourceURI().toString()); | ||||
6607 | radio[TrackDataType::key_type::AlbumRole] = QStringLiteral("Radios"); | ||||
6608 | radio[TrackDataType::key_type::ArtistRole] = radio[TrackDataType::key_type::TitleRole]; | ||||
6609 | radio[DataType::key_type::ElementTypeRole] = ElisaUtils::Radio; | ||||
6610 | //Genre and rating missing for now, see buildRadioDataFromDatabaseRecord. Should be added if used for radios. | ||||
6611 | } | ||||
6612 | Q_EMIT updateUIAfterRadioInsertOrUpdate(radio, isInsertion); | ||||
6613 | } | ||||
6614 | | ||||
6615 | query.finish(); | ||||
6616 | } | ||||
6617 | | ||||
6618 | void DatabaseInterface::deleteRadioInDatabase(qulonglong radioId) | ||||
6619 | { | ||||
6620 | QSqlQuery query = d->mDeleteRadioQuery; | ||||
6621 | | ||||
6622 | query.bindValue(QStringLiteral(":radioId"), radioId); | ||||
6623 | | ||||
6624 | auto result = execQuery(query); | ||||
6625 | | ||||
6626 | if (!result || !query.isActive()) { | ||||
6627 | Q_EMIT databaseError(); | ||||
6628 | | ||||
6629 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.lastQuery(); | ||||
6630 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.boundValues(); | ||||
6631 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.lastError(); | ||||
6632 | }else{ | ||||
6633 | Q_EMIT updateUIAfterRadioDeleted(radioId); | ||||
6634 | } | ||||
6635 | | ||||
6636 | query.finish(); | ||||
6637 | } | ||||
6638 | | ||||
6262 | void DatabaseInterface::removeAlbumInDatabase(qulonglong albumId) | 6639 | void DatabaseInterface::removeAlbumInDatabase(qulonglong albumId) | ||
6263 | { | 6640 | { | ||
6264 | d->mRemoveAlbumQuery.bindValue(QStringLiteral(":albumId"), albumId); | 6641 | d->mRemoveAlbumQuery.bindValue(QStringLiteral(":albumId"), albumId); | ||
6265 | 6642 | | |||
6266 | auto result = execQuery(d->mRemoveAlbumQuery); | 6643 | auto result = execQuery(d->mRemoveAlbumQuery); | ||
6267 | 6644 | | |||
6268 | if (!result || !d->mRemoveAlbumQuery.isActive()) { | 6645 | if (!result || !d->mRemoveAlbumQuery.isActive()) { | ||
6269 | Q_EMIT databaseError(); | 6646 | Q_EMIT databaseError(); | ||
▲ Show 20 Lines • Show All 325 Lines • ▼ Show 20 Line(s) | 6968 | if (d->mSelectTracksMapping.next()) { | |||
6595 | } | 6972 | } | ||
6596 | } | 6973 | } | ||
6597 | 6974 | | |||
6598 | d->mSelectTracksMapping.finish(); | 6975 | d->mSelectTracksMapping.finish(); | ||
6599 | 6976 | | |||
6600 | return result; | 6977 | return result; | ||
6601 | } | 6978 | } | ||
6602 | 6979 | | |||
6980 | qulonglong DatabaseInterface::internalRadioIdFromHttpAddress(const QString &httpAddress) | ||||
6981 | { | ||||
6982 | auto result = qulonglong(0); | ||||
6983 | | ||||
6984 | if (!d) { | ||||
6985 | return result; | ||||
6986 | } | ||||
6987 | | ||||
6988 | d->mSelectRadioIdFromHttpAddress.bindValue(QStringLiteral(":httpAddress"), httpAddress); | ||||
6989 | | ||||
6990 | auto queryResult = execQuery(d->mSelectRadioIdFromHttpAddress); | ||||
6991 | | ||||
6992 | if (!queryResult || !d->mSelectRadioIdFromHttpAddress.isSelect() || !d->mSelectRadioIdFromHttpAddress.isActive()) { | ||||
6993 | Q_EMIT databaseError(); | ||||
6994 | | ||||
6995 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalTrackIdFromFileName" << d->mSelectRadioIdFromHttpAddress.lastQuery(); | ||||
6996 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalTrackIdFromFileName" << d->mSelectRadioIdFromHttpAddress.boundValues(); | ||||
6997 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalTrackIdFromFileName" << d->mSelectRadioIdFromHttpAddress.lastError(); | ||||
6998 | | ||||
6999 | d->mSelectRadioIdFromHttpAddress.finish(); | ||||
7000 | | ||||
7001 | return result; | ||||
7002 | } | ||||
7003 | | ||||
7004 | if (d->mSelectRadioIdFromHttpAddress.next()) { | ||||
7005 | const auto ¤tRecordValue = d->mSelectRadioIdFromHttpAddress.record().value(0); | ||||
7006 | if (currentRecordValue.isValid()) { | ||||
7007 | result = currentRecordValue.toULongLong(); | ||||
7008 | } | ||||
7009 | } | ||||
7010 | | ||||
7011 | d->mSelectRadioIdFromHttpAddress.finish(); | ||||
7012 | | ||||
7013 | return result; | ||||
7014 | } | ||||
7015 | | ||||
6603 | DatabaseInterface::ListTrackDataType DatabaseInterface::internalTracksFromAuthor(const QString &ArtistName) | 7016 | DatabaseInterface::ListTrackDataType DatabaseInterface::internalTracksFromAuthor(const QString &ArtistName) | ||
6604 | { | 7017 | { | ||
6605 | auto allTracks = ListTrackDataType{}; | 7018 | auto allTracks = ListTrackDataType{}; | ||
6606 | 7019 | | |||
6607 | d->mSelectTracksFromArtist.bindValue(QStringLiteral(":artistName"), ArtistName); | 7020 | d->mSelectTracksFromArtist.bindValue(QStringLiteral(":artistName"), ArtistName); | ||
6608 | 7021 | | |||
6609 | auto result = execQuery(d->mSelectTracksFromArtist); | 7022 | auto result = execQuery(d->mSelectTracksFromArtist); | ||
6610 | 7023 | | |||
▲ Show 20 Lines • Show All 159 Lines • ▼ Show 20 Line(s) | 7178 | while(d->mSelectAllTracksQuery.next()) { | |||
6770 | result.push_back(newData); | 7183 | result.push_back(newData); | ||
6771 | } | 7184 | } | ||
6772 | 7185 | | |||
6773 | d->mSelectAllTracksQuery.finish(); | 7186 | d->mSelectAllTracksQuery.finish(); | ||
6774 | 7187 | | |||
6775 | return result; | 7188 | return result; | ||
6776 | } | 7189 | } | ||
6777 | 7190 | | |||
7191 | DatabaseInterface::ListTrackDataType DatabaseInterface::internalAllRadiosPartialData() | ||||
7192 | { | ||||
7193 | auto result = ListTrackDataType{}; | ||||
7194 | | ||||
7195 | if (!internalGenericPartialData(d->mSelectAllRadiosQuery)) { | ||||
7196 | return result; | ||||
7197 | } | ||||
7198 | | ||||
7199 | while(d->mSelectAllRadiosQuery.next()) { | ||||
7200 | const auto ¤tRecord = d->mSelectAllRadiosQuery.record(); | ||||
7201 | | ||||
7202 | auto newData = buildRadioDataFromDatabaseRecord(currentRecord); | ||||
7203 | | ||||
7204 | result.push_back(newData); | ||||
7205 | } | ||||
7206 | | ||||
7207 | d->mSelectAllRadiosQuery.finish(); | ||||
7208 | | ||||
7209 | return result; | ||||
7210 | } | ||||
7211 | | ||||
6778 | DatabaseInterface::ListTrackDataType DatabaseInterface::internalRecentlyPlayedTracksData(int count) | 7212 | DatabaseInterface::ListTrackDataType DatabaseInterface::internalRecentlyPlayedTracksData(int count) | ||
6779 | { | 7213 | { | ||
6780 | auto result = ListTrackDataType{}; | 7214 | auto result = ListTrackDataType{}; | ||
6781 | 7215 | | |||
6782 | d->mSelectAllRecentlyPlayedTracksQuery.bindValue(QStringLiteral(":maximumResults"), count); | 7216 | d->mSelectAllRecentlyPlayedTracksQuery.bindValue(QStringLiteral(":maximumResults"), count); | ||
6783 | 7217 | | |||
6784 | if (!internalGenericPartialData(d->mSelectAllRecentlyPlayedTracksQuery)) { | 7218 | if (!internalGenericPartialData(d->mSelectAllRecentlyPlayedTracksQuery)) { | ||
6785 | return result; | 7219 | return result; | ||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Line(s) | 7268 | if (d->mSelectTrackFromIdQuery.next()) { | |||
6837 | result = buildTrackDataFromDatabaseRecord(currentRecord); | 7271 | result = buildTrackDataFromDatabaseRecord(currentRecord); | ||
6838 | } | 7272 | } | ||
6839 | 7273 | | |||
6840 | d->mSelectTrackFromIdQuery.finish(); | 7274 | d->mSelectTrackFromIdQuery.finish(); | ||
6841 | 7275 | | |||
6842 | return result; | 7276 | return result; | ||
6843 | } | 7277 | } | ||
6844 | 7278 | | |||
7279 | DatabaseInterface::TrackDataType DatabaseInterface::internalOneRadioPartialData(qulonglong databaseId) | ||||
7280 | { | ||||
7281 | auto result = TrackDataType{}; | ||||
7282 | | ||||
7283 | d->mSelectRadioFromIdQuery.bindValue(QStringLiteral(":radioId"), databaseId); | ||||
7284 | | ||||
7285 | if (!internalGenericPartialData(d->mSelectRadioFromIdQuery)) { | ||||
7286 | return result; | ||||
7287 | } | ||||
7288 | | ||||
7289 | if (d->mSelectRadioFromIdQuery.next()) { | ||||
7290 | const auto ¤tRecord = d->mSelectRadioFromIdQuery.record(); | ||||
7291 | | ||||
7292 | result = buildRadioDataFromDatabaseRecord(currentRecord); | ||||
7293 | } | ||||
7294 | | ||||
7295 | d->mSelectRadioFromIdQuery.finish(); | ||||
7296 | | ||||
7297 | return result; | ||||
7298 | } | ||||
7299 | | ||||
6845 | DatabaseInterface::ListGenreDataType DatabaseInterface::internalAllGenresPartialData() | 7300 | DatabaseInterface::ListGenreDataType DatabaseInterface::internalAllGenresPartialData() | ||
6846 | { | 7301 | { | ||
6847 | ListGenreDataType result; | 7302 | ListGenreDataType result; | ||
6848 | 7303 | | |||
6849 | if (!internalGenericPartialData(d->mSelectAllGenresQuery)) { | 7304 | if (!internalGenericPartialData(d->mSelectAllGenresQuery)) { | ||
6850 | return result; | 7305 | return result; | ||
6851 | } | 7306 | } | ||
6852 | 7307 | | |||
▲ 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]