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) | ||||
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 | | ||||
251 | QSet<qulonglong> mModifiedTrackIds; | 266 | QSet<qulonglong> mModifiedTrackIds; | ||
252 | 267 | | |||
253 | QSet<qulonglong> mModifiedAlbumIds; | 268 | QSet<qulonglong> mModifiedAlbumIds; | ||
254 | 269 | | |||
255 | QSet<qulonglong> mModifiedArtistIds; | 270 | QSet<qulonglong> mModifiedArtistIds; | ||
256 | 271 | | |||
257 | QSet<qulonglong> mInsertedTracks; | 272 | QSet<qulonglong> mInsertedTracks; | ||
258 | 273 | | |||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Line(s) | 360 | { | |||
359 | transactionResult = finishTransaction(); | 374 | transactionResult = finishTransaction(); | ||
360 | if (!transactionResult) { | 375 | if (!transactionResult) { | ||
361 | return result; | 376 | return result; | ||
362 | } | 377 | } | ||
363 | 378 | | |||
364 | return result; | 379 | return result; | ||
365 | } | 380 | } | ||
366 | 381 | | |||
382 | DatabaseInterface::ListTrackDataType DatabaseInterface::allRadiosData() | ||||
383 | { | ||||
384 | auto result = ListTrackDataType{}; | ||||
385 | | ||||
386 | if (!d) { | ||||
387 | return result; | ||||
388 | } | ||||
389 | | ||||
390 | auto transactionResult = startTransaction(); | ||||
391 | if (!transactionResult) { | ||||
392 | return result; | ||||
393 | } | ||||
394 | | ||||
395 | result = internalAllRadiosPartialData(); | ||||
396 | | ||||
397 | transactionResult = finishTransaction(); | ||||
398 | if (!transactionResult) { | ||||
399 | return result; | ||||
400 | } | ||||
401 | | ||||
402 | return result; | ||||
403 | } | ||||
404 | | ||||
367 | DatabaseInterface::ListTrackDataType DatabaseInterface::recentlyPlayedTracksData(int count) | 405 | DatabaseInterface::ListTrackDataType DatabaseInterface::recentlyPlayedTracksData(int count) | ||
368 | { | 406 | { | ||
369 | auto result = ListTrackDataType{}; | 407 | auto result = ListTrackDataType{}; | ||
370 | 408 | | |||
371 | if (!d) { | 409 | if (!d) { | ||
372 | return result; | 410 | return result; | ||
373 | } | 411 | } | ||
374 | 412 | | |||
▲ Show 20 Lines • Show All 322 Lines • ▼ Show 20 Line(s) | 721 | { | |||
697 | transactionResult = finishTransaction(); | 735 | transactionResult = finishTransaction(); | ||
698 | if (!transactionResult) { | 736 | if (!transactionResult) { | ||
699 | return result; | 737 | return result; | ||
700 | } | 738 | } | ||
701 | 739 | | |||
702 | return result; | 740 | return result; | ||
703 | } | 741 | } | ||
704 | 742 | | |||
743 | DatabaseInterface::TrackDataType DatabaseInterface::radioDataFromDatabaseId(qulonglong id) | ||||
744 | { | ||||
745 | auto result = TrackDataType(); | ||||
746 | | ||||
747 | if (!d) { | ||||
748 | return result; | ||||
749 | } | ||||
750 | | ||||
751 | auto transactionResult = startTransaction(); | ||||
752 | if (!transactionResult) { | ||||
753 | return result; | ||||
754 | } | ||||
755 | | ||||
756 | result = internalOneRadioPartialData(id); | ||||
757 | | ||||
758 | transactionResult = finishTransaction(); | ||||
759 | if (!transactionResult) { | ||||
760 | return result; | ||||
761 | } | ||||
762 | | ||||
763 | return result; | ||||
764 | } | ||||
765 | | ||||
705 | qulonglong DatabaseInterface::trackIdFromTitleAlbumTrackDiscNumber(const QString &title, const QString &artist, const QString &album, | 766 | qulonglong DatabaseInterface::trackIdFromTitleAlbumTrackDiscNumber(const QString &title, const QString &artist, const QString &album, | ||
706 | int trackNumber, int discNumber) | 767 | int trackNumber, int discNumber) | ||
707 | { | 768 | { | ||
708 | auto result = qulonglong(0); | 769 | auto result = qulonglong(0); | ||
709 | 770 | | |||
710 | if (!d) { | 771 | if (!d) { | ||
711 | return result; | 772 | return result; | ||
712 | } | 773 | } | ||
▲ Show 20 Lines • Show All 435 Lines • ▼ Show 20 Line(s) | 1156 | { | |||
1148 | listTables = d->mTracksDatabase.tables(); | 1209 | listTables = d->mTracksDatabase.tables(); | ||
1149 | 1210 | | |||
1150 | if (listTables.contains(QStringLiteral("DatabaseVersionV5")) && | 1211 | if (listTables.contains(QStringLiteral("DatabaseVersionV5")) && | ||
1151 | !listTables.contains(QStringLiteral("DatabaseVersionV9"))) { | 1212 | !listTables.contains(QStringLiteral("DatabaseVersionV9"))) { | ||
1152 | upgradeDatabaseV9(); | 1213 | upgradeDatabaseV9(); | ||
1153 | upgradeDatabaseV11(); | 1214 | upgradeDatabaseV11(); | ||
1154 | upgradeDatabaseV12(); | 1215 | upgradeDatabaseV12(); | ||
1155 | upgradeDatabaseV13(); | 1216 | upgradeDatabaseV13(); | ||
1217 | upgradeDatabaseV14(); | ||||
1156 | 1218 | | |||
1157 | checkDatabaseSchema(); | 1219 | checkDatabaseSchema(); | ||
1158 | } else if (listTables.contains(QStringLiteral("DatabaseVersionV9"))) { | 1220 | } else if (listTables.contains(QStringLiteral("DatabaseVersionV9"))) { | ||
1159 | if (!listTables.contains(QStringLiteral("DatabaseVersionV11"))) { | 1221 | if (!listTables.contains(QStringLiteral("DatabaseVersionV11"))) { | ||
1160 | upgradeDatabaseV11(); | 1222 | upgradeDatabaseV11(); | ||
1161 | } | 1223 | } | ||
1162 | if (!listTables.contains(QStringLiteral("DatabaseVersionV12"))) { | 1224 | if (!listTables.contains(QStringLiteral("DatabaseVersionV12"))) { | ||
1163 | upgradeDatabaseV12(); | 1225 | upgradeDatabaseV12(); | ||
1164 | } | 1226 | } | ||
1165 | if (!listTables.contains(QStringLiteral("DatabaseVersionV13"))) { | 1227 | if (!listTables.contains(QStringLiteral("DatabaseVersionV13"))) { | ||
1166 | upgradeDatabaseV13(); | 1228 | upgradeDatabaseV13(); | ||
1167 | } | 1229 | } | ||
1230 | if(!listTables.contains(QStringLiteral("DatabaseVersionV14"))){ | ||||
1231 | upgradeDatabaseV14(); | ||||
1232 | } | ||||
1168 | 1233 | | |||
1169 | checkDatabaseSchema(); | 1234 | checkDatabaseSchema(); | ||
1170 | } else { | 1235 | } else { | ||
1171 | createDatabaseV9(); | 1236 | createDatabaseV9(); | ||
1172 | upgradeDatabaseV11(); | 1237 | upgradeDatabaseV11(); | ||
1173 | upgradeDatabaseV12(); | 1238 | upgradeDatabaseV12(); | ||
1174 | upgradeDatabaseV13(); | 1239 | upgradeDatabaseV13(); | ||
1240 | upgradeDatabaseV14(); | ||||
1175 | } | 1241 | } | ||
1176 | } | 1242 | } | ||
1177 | 1243 | | |||
1178 | void DatabaseInterface::createDatabaseV9() | 1244 | void DatabaseInterface::createDatabaseV9() | ||
1179 | { | 1245 | { | ||
1180 | qCInfo(orgKdeElisaDatabase) << "begin creation of v9 database schema"; | 1246 | qCInfo(orgKdeElisaDatabase) << "begin creation of v9 database schema"; | ||
1181 | 1247 | | |||
1182 | { | 1248 | { | ||
▲ Show 20 Lines • Show All 1547 Lines • ▼ Show 20 Line(s) | 2793 | if (!result) { | |||
2730 | 2796 | | |||
2731 | Q_EMIT databaseError(); | 2797 | Q_EMIT databaseError(); | ||
2732 | } | 2798 | } | ||
2733 | } | 2799 | } | ||
2734 | 2800 | | |||
2735 | qCInfo(orgKdeElisaDatabase) << "finished update to v13 of database schema"; | 2801 | qCInfo(orgKdeElisaDatabase) << "finished update to v13 of database schema"; | ||
2736 | } | 2802 | } | ||
2737 | 2803 | | |||
2804 | void DatabaseInterface::upgradeDatabaseV14() | ||||
2805 | { | ||||
2806 | qCInfo(orgKdeElisaDatabase) << "begin update to v14 of database schema"; | ||||
2807 | | ||||
2808 | { | ||||
2809 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | ||||
2810 | | ||||
2811 | const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `DatabaseVersionV14` (`Version` INTEGER PRIMARY KEY NOT NULL)")); | ||||
2812 | | ||||
2813 | if (!result) { | ||||
2814 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << createSchemaQuery.lastQuery(); | ||||
2815 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << createSchemaQuery.lastError(); | ||||
2816 | | ||||
2817 | Q_EMIT databaseError(); | ||||
2818 | } | ||||
2819 | } | ||||
2820 | | ||||
2821 | { | ||||
2822 | QSqlQuery disableForeignKeys(d->mTracksDatabase); | ||||
2823 | | ||||
2824 | auto result = disableForeignKeys.exec(QStringLiteral(" PRAGMA foreign_keys=OFF")); | ||||
2825 | | ||||
2826 | if (!result) { | ||||
2827 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << disableForeignKeys.lastQuery(); | ||||
2828 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << disableForeignKeys.lastError(); | ||||
2829 | | ||||
2830 | Q_EMIT databaseError(); | ||||
2831 | } | ||||
2832 | } | ||||
2833 | | ||||
2834 | d->mTracksDatabase.transaction(); | ||||
2835 | | ||||
2836 | { | ||||
2837 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | ||||
2838 | | ||||
2839 | const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `Radios` (" | ||||
2840 | "`ID` INTEGER PRIMARY KEY AUTOINCREMENT, " | ||||
2841 | "`HttpAddress` VARCHAR(255) NOT NULL, " | ||||
2842 | "`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… | |||||
2843 | "`Title` VARCHAR(85) NOT NULL, " | ||||
2844 | "`Rating` INTEGER NOT NULL DEFAULT 0, " | ||||
2845 | "`Genre` VARCHAR(55), " | ||||
2846 | "`Comment` VARCHAR(255), " | ||||
2847 | "UNIQUE (" | ||||
2848 | "`HttpAddress`" | ||||
2849 | "), " | ||||
2850 | "UNIQUE (" | ||||
2851 | "`Priority`, `Title`, `HttpAddress`" | ||||
2852 | ") " | ||||
2853 | "CONSTRAINT fk_tracks_genre FOREIGN KEY (`Genre`) REFERENCES `Genre`(`Name`))" | ||||
2854 | )); | ||||
2855 | | ||||
2856 | if (!result) { | ||||
2857 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << createSchemaQuery.lastQuery(); | ||||
2858 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << createSchemaQuery.lastError(); | ||||
2859 | | ||||
2860 | Q_EMIT databaseError(); | ||||
2861 | } | ||||
2862 | } | ||||
2863 | | ||||
2864 | { | ||||
2865 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | ||||
2866 | | ||||
2867 | //Find webradios (french): https://doc.ubuntu-fr.org/liste_radio_france | ||||
2868 | //English: https://www.radio.fr/language/english (to get the link play a radio and look for streamUrl in the html elements page). | ||||
2869 | const auto &result = createSchemaQuery.exec(QStringLiteral("INSERT INTO `Radios` (`HttpAddress`, `Priority`, `Title`) " | ||||
2870 | "SELECT 'http://classicrock.stream.ouifm.fr/ouifm3.mp3', 1, 'OuiFM_Classic_Rock' UNION ALL " | ||||
2871 | "SELECT 'http://rock70s.stream.ouifm.fr/ouifmseventies.mp3', 1, 'OuiFM_70s' UNION ALL " | ||||
2872 | "SELECT 'http://jazzradio.ice.infomaniak.ch/jazzradio-high.mp3', 2 , 'Jazz_Radio' UNION ALL " | ||||
2873 | "SELECT 'http://cdn.nrjaudio.fm/audio1/fr/30601/mp3_128.mp3?origine=playerweb', 1, 'Nostalgie' UNION ALL " | ||||
2874 | "SELECT 'https://scdn.nrjaudio.fm/audio1/fr/30713/aac_64.mp3?origine=playerweb', 1, 'Nostalgie Johnny' UNION ALL " | ||||
2875 | "SELECT 'http://sc-classrock.1.fm:8200', 1, 'Classic rock replay' UNION ALL " | ||||
2876 | "SELECT 'http://agnes.torontocast.com:8151/stream', 1, 'Instrumentals Forever' UNION ALL " | ||||
2877 | "SELECT 'https://stream.laut.fm/jahfari', 1, 'Jahfari'" | ||||
2878 | )); | ||||
2879 | if (!result) { | ||||
2880 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << createSchemaQuery.lastQuery(); | ||||
2881 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << createSchemaQuery.lastError(); | ||||
2882 | | ||||
2883 | Q_EMIT databaseError(); | ||||
2884 | } | ||||
2885 | } | ||||
2886 | | ||||
2887 | d->mTracksDatabase.commit(); | ||||
2888 | | ||||
2889 | { | ||||
2890 | QSqlQuery enableForeignKeys(d->mTracksDatabase); | ||||
2891 | | ||||
2892 | auto result = enableForeignKeys.exec(QStringLiteral(" PRAGMA foreign_keys=ON")); | ||||
2893 | | ||||
2894 | if (!result) { | ||||
2895 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << enableForeignKeys.lastQuery(); | ||||
2896 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << enableForeignKeys.lastError(); | ||||
2897 | | ||||
2898 | Q_EMIT databaseError(); | ||||
2899 | } | ||||
2900 | } | ||||
2901 | | ||||
2902 | qCInfo(orgKdeElisaDatabase) << "finished update to v14 of database schema"; | ||||
2903 | } | ||||
2904 | | ||||
2738 | void DatabaseInterface::checkDatabaseSchema() | 2905 | void DatabaseInterface::checkDatabaseSchema() | ||
2739 | { | 2906 | { | ||
2740 | checkAlbumsTableSchema(); | 2907 | checkAlbumsTableSchema(); | ||
2741 | if (d->mIsInBadState) | 2908 | if (d->mIsInBadState) | ||
2742 | { | 2909 | { | ||
2743 | resetDatabase(); | 2910 | resetDatabase(); | ||
2744 | return; | 2911 | return; | ||
2745 | } | 2912 | } | ||
▲ Show 20 Lines • Show All 635 Lines • ▼ Show 20 Line(s) | 3547 | if (!result) { | |||
3381 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTracksQuery.lastQuery(); | 3548 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTracksQuery.lastQuery(); | ||
3382 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTracksQuery.lastError(); | 3549 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTracksQuery.lastError(); | ||
3383 | 3550 | | |||
3384 | Q_EMIT databaseError(); | 3551 | Q_EMIT databaseError(); | ||
3385 | } | 3552 | } | ||
3386 | } | 3553 | } | ||
3387 | 3554 | | |||
3388 | { | 3555 | { | ||
3556 | auto selectAllRadiosText = QStringLiteral("SELECT " | ||||
3557 | "radios.`ID`, " | ||||
3558 | "radios.`Title`, " | ||||
3559 | "radios.`HttpAddress`, " | ||||
3560 | "radios.`Rating`, " | ||||
3561 | "trackGenre.`Name`, " | ||||
3562 | "radios.`Comment` " | ||||
3563 | "FROM " | ||||
3564 | "`Radios` radios " | ||||
3565 | "LEFT JOIN `Genre` trackGenre ON trackGenre.`Name` = radios.`Genre` " | ||||
3566 | ""); | ||||
3567 | | ||||
3568 | auto result = prepareQuery(d->mSelectAllRadiosQuery, selectAllRadiosText); | ||||
3569 | | ||||
3570 | if (!result) { | ||||
3571 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllRadiosQuery.lastQuery(); | ||||
3572 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllRadiosQuery.lastError(); | ||||
3573 | | ||||
3574 | Q_EMIT databaseError(); | ||||
3575 | } | ||||
3576 | } | ||||
3577 | | ||||
3578 | { | ||||
3389 | auto selectAllTracksText = QStringLiteral("SELECT " | 3579 | auto selectAllTracksText = QStringLiteral("SELECT " | ||
3390 | "tracks.`ID`, " | 3580 | "tracks.`ID`, " | ||
3391 | "tracks.`Title`, " | 3581 | "tracks.`Title`, " | ||
3392 | "album.`ID`, " | 3582 | "album.`ID`, " | ||
3393 | "tracks.`ArtistName`, " | 3583 | "tracks.`ArtistName`, " | ||
3394 | "tracks.`AlbumArtistName`, " | 3584 | "tracks.`AlbumArtistName`, " | ||
3395 | "tracksMapping.`FileName`, " | 3585 | "tracksMapping.`FileName`, " | ||
3396 | "tracksMapping.`FileModifiedTime`, " | 3586 | "tracksMapping.`FileModifiedTime`, " | ||
▲ Show 20 Lines • Show All 637 Lines • ▼ Show 20 Line(s) | 4137 | { | |||
4034 | 4224 | | |||
4035 | if (!result) { | 4225 | if (!result) { | ||
4036 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackFromIdQuery.lastQuery(); | 4226 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackFromIdQuery.lastQuery(); | ||
4037 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackFromIdQuery.lastError(); | 4227 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackFromIdQuery.lastError(); | ||
4038 | 4228 | | |||
4039 | Q_EMIT databaseError(); | 4229 | Q_EMIT databaseError(); | ||
4040 | } | 4230 | } | ||
4041 | } | 4231 | } | ||
4232 | | ||||
4233 | { | ||||
4234 | auto selectRadioFromIdQueryText = QStringLiteral("SELECT " | ||||
4235 | "radios.`ID`, " | ||||
4236 | "radios.`Title`, " | ||||
4237 | "radios.`HttpAddress`, " | ||||
4238 | "radios.`Rating`, " | ||||
4239 | "trackGenre.`Name`, " | ||||
4240 | "radios.`Comment` " | ||||
4241 | "FROM " | ||||
4242 | "`Radios` radios " | ||||
4243 | "LEFT JOIN `Genre` trackGenre ON trackGenre.`Name` = radios.`Genre` " | ||||
4244 | "WHERE " | ||||
4245 | "radios.`ID` = :radioId " | ||||
4246 | ""); | ||||
4247 | | ||||
4248 | auto result = prepareQuery(d->mSelectRadioFromIdQuery, selectRadioFromIdQueryText); | ||||
4249 | | ||||
4250 | if (!result) { | ||||
4251 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectRadioFromIdQuery.lastQuery(); | ||||
4252 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectRadioFromIdQuery.lastError(); | ||||
4253 | | ||||
4254 | Q_EMIT databaseError(); | ||||
4255 | } | ||||
4256 | } | ||||
4042 | { | 4257 | { | ||
4043 | auto selectCountAlbumsQueryText = QStringLiteral("SELECT count(*) " | 4258 | auto selectCountAlbumsQueryText = QStringLiteral("SELECT count(*) " | ||
4044 | "FROM `Albums` album " | 4259 | "FROM `Albums` album " | ||
4045 | "WHERE album.`ArtistName` = :artistName "); | 4260 | "WHERE album.`ArtistName` = :artistName "); | ||
4046 | 4261 | | |||
4047 | const auto result = prepareQuery(d->mSelectCountAlbumsForArtistQuery, selectCountAlbumsQueryText); | 4262 | const auto result = prepareQuery(d->mSelectCountAlbumsForArtistQuery, selectCountAlbumsQueryText); | ||
4048 | 4263 | | |||
4049 | if (!result) { | 4264 | if (!result) { | ||
▲ Show 20 Lines • Show All 362 Lines • ▼ Show 20 Line(s) | 4626 | if (!result) { | |||
4412 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMapping.lastQuery(); | 4627 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMapping.lastQuery(); | ||
4413 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMapping.lastError(); | 4628 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMapping.lastError(); | ||
4414 | 4629 | | |||
4415 | Q_EMIT databaseError(); | 4630 | Q_EMIT databaseError(); | ||
4416 | } | 4631 | } | ||
4417 | } | 4632 | } | ||
4418 | 4633 | | |||
4419 | { | 4634 | { | ||
4635 | auto selectRadioIdFromHttpAddress = QStringLiteral("SELECT " | ||||
4636 | "`ID` " | ||||
4637 | "FROM " | ||||
4638 | "`Radios` " | ||||
4639 | "WHERE " | ||||
4640 | "`HttpAddress` = :httpAddress"); | ||||
4641 | | ||||
4642 | auto result = prepareQuery(d->mSelectRadioIdFromHttpAddress, selectRadioIdFromHttpAddress); | ||||
4643 | | ||||
4644 | if (!result) { | ||||
4645 | qCInfo(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectRadioIdFromHttpAddress.lastQuery(); | ||||
4646 | qCInfo(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectRadioIdFromHttpAddress.lastError(); | ||||
4647 | | ||||
4648 | Q_EMIT databaseError(); | ||||
4649 | } | ||||
4650 | } | ||||
4651 | | ||||
4652 | { | ||||
4420 | auto selectTracksMappingPriorityQueryText = QStringLiteral("SELECT " | 4653 | auto selectTracksMappingPriorityQueryText = QStringLiteral("SELECT " | ||
4421 | "max(tracks.`Priority`) AS Priority " | 4654 | "max(tracks.`Priority`) AS Priority " | ||
4422 | "FROM " | 4655 | "FROM " | ||
4423 | "`Tracks` tracks, " | 4656 | "`Tracks` tracks, " | ||
4424 | "`Albums` albums " | 4657 | "`Albums` albums " | ||
4425 | "WHERE " | 4658 | "WHERE " | ||
4426 | "tracks.`Title` = :title AND " | 4659 | "tracks.`Title` = :title AND " | ||
4427 | "(tracks.`ArtistName` = :trackArtist OR tracks.`ArtistName` IS NULL) AND " | 4660 | "(tracks.`ArtistName` = :trackArtist OR tracks.`ArtistName` IS NULL) AND " | ||
▲ Show 20 Lines • Show All 205 Lines • ▼ Show 20 Line(s) | 4865 | if (!result) { | |||
4633 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackQuery.lastQuery(); | 4866 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackQuery.lastQuery(); | ||
4634 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackQuery.lastError(); | 4867 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackQuery.lastError(); | ||
4635 | 4868 | | |||
4636 | Q_EMIT databaseError(); | 4869 | Q_EMIT databaseError(); | ||
4637 | } | 4870 | } | ||
4638 | } | 4871 | } | ||
4639 | 4872 | | |||
4640 | { | 4873 | { | ||
4874 | auto insertRadioQueryText = QStringLiteral("INSERT INTO `Radios` " | ||||
4875 | "(" | ||||
4876 | "`Title`, " | ||||
4877 | "`httpAddress`, " | ||||
4878 | "`Comment`, " | ||||
4879 | "`Rating`, " | ||||
4880 | "`Priority`) " | ||||
4881 | "VALUES " | ||||
4882 | "(" | ||||
4883 | ":title, " | ||||
4884 | ":httpAddress, " | ||||
4885 | ":comment, " | ||||
4886 | ":trackRating," | ||||
4887 | "1)"); | ||||
4888 | | ||||
4889 | auto result = prepareQuery(d->mInsertRadioQuery, insertRadioQueryText); | ||||
4890 | | ||||
4891 | if (!result) { | ||||
4892 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertRadioQuery.lastQuery(); | ||||
4893 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertRadioQuery.lastError(); | ||||
4894 | | ||||
4895 | Q_EMIT databaseError(); | ||||
4896 | } | ||||
4897 | } | ||||
4898 | | ||||
4899 | { | ||||
4900 | auto updateRadioQueryText = QStringLiteral("UPDATE `Radios` " | ||||
4901 | "SET " | ||||
4902 | "`HttpAddress` = :httpAddress, " | ||||
4903 | "`Title` = :title, " | ||||
4904 | "`Comment` = :comment, " | ||||
4905 | "`Rating` = :trackRating " | ||||
4906 | "WHERE " | ||||
4907 | "`ID` = :radioId"); | ||||
4908 | | ||||
4909 | auto result = prepareQuery(d->mUpdateRadioQuery, updateRadioQueryText); | ||||
4910 | | ||||
4911 | if (!result) { | ||||
4912 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateRadioQuery.lastQuery(); | ||||
4913 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateRadioQuery.lastError(); | ||||
4914 | | ||||
4915 | Q_EMIT databaseError(); | ||||
4916 | } | ||||
4917 | } | ||||
4918 | | ||||
4919 | { | ||||
4641 | auto updateAlbumArtistQueryText = QStringLiteral("UPDATE `Albums` " | 4920 | auto updateAlbumArtistQueryText = QStringLiteral("UPDATE `Albums` " | ||
4642 | "SET " | 4921 | "SET " | ||
4643 | "`ArtistName` = :artistName " | 4922 | "`ArtistName` = :artistName " | ||
4644 | "WHERE " | 4923 | "WHERE " | ||
4645 | "`ID` = :albumId"); | 4924 | "`ID` = :albumId"); | ||
4646 | 4925 | | |||
4647 | auto result = prepareQuery(d->mUpdateAlbumArtistQuery, updateAlbumArtistQueryText); | 4926 | auto result = prepareQuery(d->mUpdateAlbumArtistQuery, updateAlbumArtistQueryText); | ||
4648 | 4927 | | |||
▲ Show 20 Lines • Show All 1180 Lines • ▼ Show 20 Line(s) | 6061 | { | |||
5829 | } | 6108 | } | ||
5830 | result[TrackDataType::key_type::PlayCounter] = trackRecord.value(26); | 6109 | result[TrackDataType::key_type::PlayCounter] = trackRecord.value(26); | ||
5831 | result[TrackDataType::key_type::PlayFrequency] = trackRecord.value(27); | 6110 | result[TrackDataType::key_type::PlayFrequency] = trackRecord.value(27); | ||
5832 | result[DataType::key_type::ElementTypeRole] = ElisaUtils::Track; | 6111 | result[DataType::key_type::ElementTypeRole] = ElisaUtils::Track; | ||
5833 | 6112 | | |||
5834 | return result; | 6113 | return result; | ||
5835 | } | 6114 | } | ||
5836 | 6115 | | |||
6116 | DatabaseInterface::TrackDataType DatabaseInterface::buildRadioDataFromDatabaseRecord(const QSqlRecord &trackRecord) const | ||||
6117 | { | ||||
6118 | TrackDataType result; | ||||
6119 | | ||||
6120 | result[TrackDataType::key_type::DatabaseIdRole] = trackRecord.value(0); | ||||
6121 | result[TrackDataType::key_type::TitleRole] = trackRecord.value(1); | ||||
6122 | | ||||
6123 | result[TrackDataType::key_type::AlbumRole] = QStringLiteral("Radios"); | ||||
6124 | result[TrackDataType::key_type::ArtistRole] = trackRecord.value(1); | ||||
6125 | | ||||
6126 | result[TrackDataType::key_type::HttpAddressRole] = trackRecord.value(2); | ||||
6127 | result[TrackDataType::key_type::ResourceRole] = trackRecord.value(2); | ||||
6128 | result[TrackDataType::key_type::RatingRole] = trackRecord.value(3); | ||||
6129 | if (!trackRecord.value(4).isNull()) { | ||||
6130 | result[TrackDataType::key_type::GenreRole] = trackRecord.value(4); | ||||
6131 | } | ||||
6132 | result[TrackDataType::key_type::CommentRole] = trackRecord.value(5); | ||||
6133 | result[DataType::key_type::ElementTypeRole] = ElisaUtils::Radio; | ||||
6134 | | ||||
6135 | return result; | ||||
6136 | } | ||||
6137 | | ||||
5837 | void DatabaseInterface::internalRemoveTracksList(const QList<QUrl> &removedTracks) | 6138 | void DatabaseInterface::internalRemoveTracksList(const QList<QUrl> &removedTracks) | ||
5838 | { | 6139 | { | ||
5839 | QSet<qulonglong> modifiedAlbums; | 6140 | QSet<qulonglong> modifiedAlbums; | ||
5840 | 6141 | | |||
5841 | QUrl::FormattingOptions currentOptions = QUrl::PreferLocalFile | | 6142 | QUrl::FormattingOptions currentOptions = QUrl::PreferLocalFile | | ||
5842 | QUrl::RemoveAuthority | QUrl::RemoveFilename | QUrl::RemoveFragment | | 6143 | QUrl::RemoveAuthority | QUrl::RemoveFilename | QUrl::RemoveFragment | | ||
5843 | QUrl::RemovePassword | QUrl::RemovePort | QUrl::RemoveQuery | | 6144 | QUrl::RemovePassword | QUrl::RemovePort | QUrl::RemoveQuery | | ||
5844 | QUrl::RemoveScheme | QUrl::RemoveUserInfo; | 6145 | QUrl::RemoveScheme | QUrl::RemoveUserInfo; | ||
▲ Show 20 Lines • Show All 371 Lines • ▼ Show 20 Line(s) | 6514 | if (!result || !d->mUpdateTrackQuery.isActive()) { | |||
6216 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.lastQuery(); | 6517 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.lastQuery(); | ||
6217 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.boundValues(); | 6518 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.boundValues(); | ||
6218 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.lastError(); | 6519 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.lastError(); | ||
6219 | } | 6520 | } | ||
6220 | 6521 | | |||
6221 | d->mUpdateTrackQuery.finish(); | 6522 | d->mUpdateTrackQuery.finish(); | ||
6222 | } | 6523 | } | ||
6223 | 6524 | | |||
6525 | void DatabaseInterface::updateRadioInDatabase(const TrackDataType &oneTrack) | ||||
6526 | { | ||||
6527 | QSqlQuery query = d->mUpdateRadioQuery; | ||||
6528 | bool isInsertion = false; | ||||
6529 | | ||||
6530 | if(oneTrack.databaseId() == -1ull){ | ||||
6531 | query = d->mInsertRadioQuery; | ||||
6532 | isInsertion = true; | ||||
6533 | } | ||||
6534 | | ||||
6535 | query.bindValue(QStringLiteral(":httpAddress"), oneTrack.httpAddress()); | ||||
6536 | query.bindValue(QStringLiteral(":radioId"), oneTrack.databaseId()); | ||||
6537 | query.bindValue(QStringLiteral(":title"), oneTrack.title()); | ||||
6538 | query.bindValue(QStringLiteral(":comment"), oneTrack.comment()); | ||||
6539 | query.bindValue(QStringLiteral(":trackRating"), oneTrack.rating()); | ||||
6540 | | ||||
6541 | auto result = execQuery(query); | ||||
6542 | | ||||
6543 | if (!result || !query.isActive()) { | ||||
6544 | Q_EMIT databaseError(); | ||||
6545 | | ||||
6546 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.lastQuery(); | ||||
6547 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.boundValues(); | ||||
6548 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.lastError(); | ||||
6549 | }else{ | ||||
6550 | TrackDataType radio(oneTrack); | ||||
6551 | radio[TrackDataType::key_type::DatabaseIdRole] = internalRadioIdFromHttpAddress(oneTrack.httpAddress()); | ||||
6552 | Q_EMIT updateUIAfterRadioInsertOrUpdate(radio, isInsertion); | ||||
6553 | } | ||||
6554 | | ||||
6555 | query.finish(); | ||||
6556 | } | ||||
6557 | | ||||
6224 | void DatabaseInterface::removeAlbumInDatabase(qulonglong albumId) | 6558 | void DatabaseInterface::removeAlbumInDatabase(qulonglong albumId) | ||
6225 | { | 6559 | { | ||
6226 | d->mRemoveAlbumQuery.bindValue(QStringLiteral(":albumId"), albumId); | 6560 | d->mRemoveAlbumQuery.bindValue(QStringLiteral(":albumId"), albumId); | ||
6227 | 6561 | | |||
6228 | auto result = execQuery(d->mRemoveAlbumQuery); | 6562 | auto result = execQuery(d->mRemoveAlbumQuery); | ||
6229 | 6563 | | |||
6230 | if (!result || !d->mRemoveAlbumQuery.isActive()) { | 6564 | if (!result || !d->mRemoveAlbumQuery.isActive()) { | ||
6231 | Q_EMIT databaseError(); | 6565 | Q_EMIT databaseError(); | ||
▲ Show 20 Lines • Show All 335 Lines • ▼ Show 20 Line(s) | 6897 | if (d->mSelectTracksMapping.next()) { | |||
6567 | } | 6901 | } | ||
6568 | } | 6902 | } | ||
6569 | 6903 | | |||
6570 | d->mSelectTracksMapping.finish(); | 6904 | d->mSelectTracksMapping.finish(); | ||
6571 | 6905 | | |||
6572 | return result; | 6906 | return result; | ||
6573 | } | 6907 | } | ||
6574 | 6908 | | |||
6909 | qulonglong DatabaseInterface::internalRadioIdFromHttpAddress(const QString &httpAddress) | ||||
6910 | { | ||||
6911 | auto result = qulonglong(0); | ||||
6912 | | ||||
6913 | if (!d) { | ||||
6914 | return result; | ||||
6915 | } | ||||
6916 | | ||||
6917 | d->mSelectRadioIdFromHttpAddress.bindValue(QStringLiteral(":httpAddress"), httpAddress); | ||||
6918 | | ||||
6919 | auto queryResult = execQuery(d->mSelectRadioIdFromHttpAddress); | ||||
6920 | | ||||
6921 | if (!queryResult || !d->mSelectRadioIdFromHttpAddress.isSelect() || !d->mSelectRadioIdFromHttpAddress.isActive()) { | ||||
6922 | Q_EMIT databaseError(); | ||||
6923 | | ||||
6924 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalTrackIdFromFileName" << d->mSelectRadioIdFromHttpAddress.lastQuery(); | ||||
6925 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalTrackIdFromFileName" << d->mSelectRadioIdFromHttpAddress.boundValues(); | ||||
6926 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalTrackIdFromFileName" << d->mSelectRadioIdFromHttpAddress.lastError(); | ||||
6927 | | ||||
6928 | d->mSelectRadioIdFromHttpAddress.finish(); | ||||
6929 | | ||||
6930 | return result; | ||||
6931 | } | ||||
6932 | | ||||
6933 | if (d->mSelectRadioIdFromHttpAddress.next()) { | ||||
6934 | const auto ¤tRecordValue = d->mSelectRadioIdFromHttpAddress.record().value(0); | ||||
6935 | if (currentRecordValue.isValid()) { | ||||
6936 | result = currentRecordValue.toULongLong(); | ||||
6937 | } | ||||
6938 | } | ||||
6939 | | ||||
6940 | d->mSelectRadioIdFromHttpAddress.finish(); | ||||
6941 | | ||||
6942 | return result; | ||||
6943 | } | ||||
6944 | | ||||
6575 | DatabaseInterface::ListTrackDataType DatabaseInterface::internalTracksFromAuthor(const QString &ArtistName) | 6945 | DatabaseInterface::ListTrackDataType DatabaseInterface::internalTracksFromAuthor(const QString &ArtistName) | ||
6576 | { | 6946 | { | ||
6577 | auto allTracks = ListTrackDataType{}; | 6947 | auto allTracks = ListTrackDataType{}; | ||
6578 | 6948 | | |||
6579 | d->mSelectTracksFromArtist.bindValue(QStringLiteral(":artistName"), ArtistName); | 6949 | d->mSelectTracksFromArtist.bindValue(QStringLiteral(":artistName"), ArtistName); | ||
6580 | 6950 | | |||
6581 | auto result = execQuery(d->mSelectTracksFromArtist); | 6951 | auto result = execQuery(d->mSelectTracksFromArtist); | ||
6582 | 6952 | | |||
▲ Show 20 Lines • Show All 159 Lines • ▼ Show 20 Line(s) | 7107 | while(d->mSelectAllTracksQuery.next()) { | |||
6742 | result.push_back(newData); | 7112 | result.push_back(newData); | ||
6743 | } | 7113 | } | ||
6744 | 7114 | | |||
6745 | d->mSelectAllTracksQuery.finish(); | 7115 | d->mSelectAllTracksQuery.finish(); | ||
6746 | 7116 | | |||
6747 | return result; | 7117 | return result; | ||
6748 | } | 7118 | } | ||
6749 | 7119 | | |||
7120 | DatabaseInterface::ListTrackDataType DatabaseInterface::internalAllRadiosPartialData() | ||||
7121 | { | ||||
7122 | auto result = ListTrackDataType{}; | ||||
7123 | | ||||
7124 | if (!internalGenericPartialData(d->mSelectAllRadiosQuery)) { | ||||
7125 | return result; | ||||
7126 | } | ||||
7127 | | ||||
7128 | while(d->mSelectAllRadiosQuery.next()) { | ||||
7129 | const auto ¤tRecord = d->mSelectAllRadiosQuery.record(); | ||||
7130 | | ||||
7131 | auto newData = buildRadioDataFromDatabaseRecord(currentRecord); | ||||
7132 | | ||||
7133 | result.push_back(newData); | ||||
7134 | } | ||||
7135 | | ||||
7136 | d->mSelectAllRadiosQuery.finish(); | ||||
7137 | | ||||
7138 | return result; | ||||
7139 | } | ||||
7140 | | ||||
6750 | DatabaseInterface::ListTrackDataType DatabaseInterface::internalRecentlyPlayedTracksData(int count) | 7141 | DatabaseInterface::ListTrackDataType DatabaseInterface::internalRecentlyPlayedTracksData(int count) | ||
6751 | { | 7142 | { | ||
6752 | auto result = ListTrackDataType{}; | 7143 | auto result = ListTrackDataType{}; | ||
6753 | 7144 | | |||
6754 | d->mSelectAllRecentlyPlayedTracksQuery.bindValue(QStringLiteral(":maximumResults"), count); | 7145 | d->mSelectAllRecentlyPlayedTracksQuery.bindValue(QStringLiteral(":maximumResults"), count); | ||
6755 | 7146 | | |||
6756 | if (!internalGenericPartialData(d->mSelectAllRecentlyPlayedTracksQuery)) { | 7147 | if (!internalGenericPartialData(d->mSelectAllRecentlyPlayedTracksQuery)) { | ||
6757 | return result; | 7148 | return result; | ||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Line(s) | 7197 | if (d->mSelectTrackFromIdQuery.next()) { | |||
6809 | result = buildTrackDataFromDatabaseRecord(currentRecord); | 7200 | result = buildTrackDataFromDatabaseRecord(currentRecord); | ||
6810 | } | 7201 | } | ||
6811 | 7202 | | |||
6812 | d->mSelectTrackFromIdQuery.finish(); | 7203 | d->mSelectTrackFromIdQuery.finish(); | ||
6813 | 7204 | | |||
6814 | return result; | 7205 | return result; | ||
6815 | } | 7206 | } | ||
6816 | 7207 | | |||
7208 | DatabaseInterface::TrackDataType DatabaseInterface::internalOneRadioPartialData(qulonglong databaseId) | ||||
7209 | { | ||||
7210 | auto result = TrackDataType{}; | ||||
7211 | | ||||
7212 | d->mSelectRadioFromIdQuery.bindValue(QStringLiteral(":radioId"), databaseId); | ||||
7213 | | ||||
7214 | if (!internalGenericPartialData(d->mSelectRadioFromIdQuery)) { | ||||
7215 | return result; | ||||
7216 | } | ||||
7217 | | ||||
7218 | if (d->mSelectRadioFromIdQuery.next()) { | ||||
7219 | const auto ¤tRecord = d->mSelectRadioFromIdQuery.record(); | ||||
7220 | | ||||
7221 | result = buildRadioDataFromDatabaseRecord(currentRecord); | ||||
7222 | } | ||||
7223 | | ||||
7224 | d->mSelectRadioFromIdQuery.finish(); | ||||
7225 | | ||||
7226 | return result; | ||||
7227 | } | ||||
7228 | | ||||
6817 | DatabaseInterface::ListGenreDataType DatabaseInterface::internalAllGenresPartialData() | 7229 | DatabaseInterface::ListGenreDataType DatabaseInterface::internalAllGenresPartialData() | ||
6818 | { | 7230 | { | ||
6819 | ListGenreDataType result; | 7231 | ListGenreDataType result; | ||
6820 | 7232 | | |||
6821 | if (!internalGenericPartialData(d->mSelectAllGenresQuery)) { | 7233 | if (!internalGenericPartialData(d->mSelectAllGenresQuery)) { | ||
6822 | return result; | 7234 | return result; | ||
6823 | } | 7235 | } | ||
6824 | 7236 | | |||
▲ 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]