Changeset View
Changeset View
Standalone View
Standalone View
src/databaseinterface.h
Show First 20 Lines • Show All 81 Lines • ▼ Show 20 Line(s) | 50 | enum ColumnsRoles { | |||
---|---|---|---|---|---|
82 | HasEmbeddedCover, | 82 | HasEmbeddedCover, | ||
83 | FileModificationTime, | 83 | FileModificationTime, | ||
84 | FirstPlayDate, | 84 | FirstPlayDate, | ||
85 | LastPlayDate, | 85 | LastPlayDate, | ||
86 | PlayCounter, | 86 | PlayCounter, | ||
87 | PlayFrequency, | 87 | PlayFrequency, | ||
88 | ElementTypeRole, | 88 | ElementTypeRole, | ||
89 | LyricsRole, | 89 | LyricsRole, | ||
90 | }; | 90 | }; | ||
astippich: I think this is unneeded, the resource role QUrl should be able to handle http adresses just… | |||||
91 | 91 | | |||
92 | Q_ENUM(ColumnsRoles) | 92 | Q_ENUM(ColumnsRoles) | ||
93 | 93 | | |||
94 | private: | 94 | private: | ||
95 | 95 | | |||
96 | using DataType = QMap<ColumnsRoles, QVariant>; | 96 | using DataType = QMap<ColumnsRoles, QVariant>; | ||
97 | 97 | | |||
98 | public: | 98 | public: | ||
▲ Show 20 Lines • Show All 253 Lines • ▼ Show 20 Line(s) | |||||
352 | ~DatabaseInterface() override; | 352 | ~DatabaseInterface() override; | ||
353 | 353 | | |||
354 | Q_INVOKABLE void init(const QString &dbName, const QString &databaseFileName = {}); | 354 | Q_INVOKABLE void init(const QString &dbName, const QString &databaseFileName = {}); | ||
355 | 355 | | |||
356 | qulonglong albumIdFromTitleAndArtist(const QString &title, const QString &artist); | 356 | qulonglong albumIdFromTitleAndArtist(const QString &title, const QString &artist); | ||
357 | 357 | | |||
358 | ListTrackDataType allTracksData(); | 358 | ListTrackDataType allTracksData(); | ||
359 | 359 | | |||
360 | ListTrackDataType allRadiosData(); | ||||
361 | | ||||
360 | ListTrackDataType recentlyPlayedTracksData(int count); | 362 | ListTrackDataType recentlyPlayedTracksData(int count); | ||
361 | 363 | | |||
362 | ListTrackDataType frequentlyPlayedTracksData(int count); | 364 | ListTrackDataType frequentlyPlayedTracksData(int count); | ||
363 | 365 | | |||
364 | ListAlbumDataType allAlbumsData(); | 366 | ListAlbumDataType allAlbumsData(); | ||
365 | 367 | | |||
366 | ListAlbumDataType allAlbumsDataByGenreAndArtist(const QString &genre, const QString &artist); | 368 | ListAlbumDataType allAlbumsDataByGenreAndArtist(const QString &genre, const QString &artist); | ||
367 | 369 | | |||
Show All 10 Lines | |||||
378 | ListGenreDataType allGenresData(); | 380 | ListGenreDataType allGenresData(); | ||
379 | 381 | | |||
380 | bool internalArtistMatchGenre(qulonglong databaseId, const QString &genre); | 382 | bool internalArtistMatchGenre(qulonglong databaseId, const QString &genre); | ||
381 | 383 | | |||
382 | ListTrackDataType tracksDataFromAuthor(const QString &artistName); | 384 | ListTrackDataType tracksDataFromAuthor(const QString &artistName); | ||
383 | 385 | | |||
384 | TrackDataType trackDataFromDatabaseId(qulonglong id); | 386 | TrackDataType trackDataFromDatabaseId(qulonglong id); | ||
385 | 387 | | |||
386 | qulonglong trackIdFromTitleAlbumTrackDiscNumber(const QString &title, const QString &artist, const std::optional<QString> &album, | 388 | TrackDataType radioDataFromDatabaseId(qulonglong id); | ||
387 | std::optional<int> trackNumber, std::optional<int> discNumber); | 389 | | ||
390 | qulonglong trackIdFromTitleAlbumTrackDiscNumber(const QString &title, const QString &artist, const std::optional<QString> &album, std::optional<int> trackNumber, std::optional<int> discNumber); | ||||
mgallien: Please remove this unrelated change. | |||||
388 | 391 | | |||
389 | qulonglong trackIdFromFileName(const QUrl &fileName); | 392 | qulonglong trackIdFromFileName(const QUrl &fileName); | ||
390 | 393 | | |||
391 | void applicationAboutToQuit(); | 394 | void applicationAboutToQuit(); | ||
392 | 395 | | |||
393 | Q_SIGNALS: | 396 | Q_SIGNALS: | ||
394 | 397 | | |||
395 | void artistsAdded(const DatabaseInterface::ListArtistDataType &newArtists); | 398 | void artistsAdded(const DatabaseInterface::ListArtistDataType &newArtists); | ||
Show All 25 Lines | |||||
421 | void restoredTracks(QHash<QUrl, QDateTime> allFiles); | 424 | void restoredTracks(QHash<QUrl, QDateTime> allFiles); | ||
422 | 425 | | |||
423 | void cleanedDatabase(); | 426 | void cleanedDatabase(); | ||
424 | 427 | | |||
425 | void finishInsertingTracksList(); | 428 | void finishInsertingTracksList(); | ||
426 | 429 | | |||
427 | void finishRemovingTracksList(); | 430 | void finishRemovingTracksList(); | ||
428 | 431 | | |||
432 | void updateUIAfterRadioInsertOrUpdate(TrackDataType radio, bool isInsertion); | ||||
433 | | ||||
434 | void updateUIAfterRadioDeleted(qulonglong radioId); | ||||
can you make them consistently with the other, e.g. radioRemoved(), radiosAdded()? astippich: can you make them consistently with the other, e.g. radioRemoved(), radiosAdded()? | |||||
Why are they needed ? mgallien: Why are they needed ?
The database should just signal that a radio has been modified or removed… | |||||
updateUIAfterRadioDeleted has the same role as trackRemoved for tracks. I think I should name them radioRemoved and radioModified. jguidon: updateUIAfterRadioDeleted has the same role as trackRemoved for tracks. | |||||
435 | | ||||
429 | public Q_SLOTS: | 436 | public Q_SLOTS: | ||
430 | 437 | | |||
431 | void insertTracksList(const QList<MusicAudioTrack> &tracks, const QHash<QString, QUrl> &covers); | 438 | void insertTracksList(const QList<MusicAudioTrack> &tracks, const QHash<QString, QUrl> &covers); | ||
432 | 439 | | |||
433 | void removeTracksList(const QList<QUrl> &removedTracks); | 440 | void removeTracksList(const QList<QUrl> &removedTracks); | ||
434 | 441 | | |||
435 | void askRestoredTracks(); | 442 | void askRestoredTracks(); | ||
436 | 443 | | |||
437 | void trackHasStartedPlaying(const QUrl &fileName, const QDateTime &time); | 444 | void trackHasStartedPlaying(const QUrl &fileName, const QDateTime &time); | ||
438 | 445 | | |||
439 | void clearData(); | 446 | void clearData(); | ||
440 | 447 | | |||
448 | void updateRadioInDatabase(const TrackDataType &oneTrack); | ||||
Is update also dealing with insert ? If it is the case, please follow the existing convention of using insert for insert or modify. You can always change all of them in a later diff. mgallien: Is update also dealing with insert ? If it is the case, please follow the existing convention… | |||||
449 | | ||||
450 | void deleteRadioInDatabase(qulonglong radioId); | ||||
451 | | ||||
441 | private: | 452 | private: | ||
442 | 453 | | |||
443 | enum class TrackFileInsertType { | 454 | enum class TrackFileInsertType { | ||
444 | NewTrackFileInsert, | 455 | NewTrackFileInsert, | ||
445 | ModifiedTrackFileInsert, | 456 | ModifiedTrackFileInsert, | ||
446 | }; | 457 | }; | ||
447 | 458 | | |||
448 | void initChangesTrackers(); | 459 | void initChangesTrackers(); | ||
Show All 18 Lines | 477 | qulonglong internalTrackIdFromTitleAlbumTracDiscNumber(const QString &title, const QString &artist, const std::optional<QString> &album, | |||
467 | std::optional<int> trackNumber, std::optional<int> discNumber); | 478 | std::optional<int> trackNumber, std::optional<int> discNumber); | ||
468 | 479 | | |||
469 | qulonglong getDuplicateTrackIdFromTitleAlbumTrackDiscNumber(const QString &title, const QString &trackArtist, const QString &album, | 480 | qulonglong getDuplicateTrackIdFromTitleAlbumTrackDiscNumber(const QString &title, const QString &trackArtist, const QString &album, | ||
470 | const QString &albumArtist, const QString &trackPath, int trackNumber, | 481 | const QString &albumArtist, const QString &trackPath, int trackNumber, | ||
471 | int discNumber, int priority); | 482 | int discNumber, int priority); | ||
472 | 483 | | |||
473 | qulonglong internalTrackIdFromFileName(const QUrl &fileName); | 484 | qulonglong internalTrackIdFromFileName(const QUrl &fileName); | ||
474 | 485 | | |||
486 | qulonglong internalRadioIdFromHttpAddress(const QString &httpAddress); | ||||
487 | | ||||
475 | ListTrackDataType internalTracksFromAuthor(const QString &artistName); | 488 | ListTrackDataType internalTracksFromAuthor(const QString &artistName); | ||
476 | 489 | | |||
477 | QList<qulonglong> internalAlbumIdsFromAuthor(const QString &artistName); | 490 | QList<qulonglong> internalAlbumIdsFromAuthor(const QString &artistName); | ||
478 | 491 | | |||
479 | void initDatabase(); | 492 | void initDatabase(); | ||
480 | 493 | | |||
481 | void initRequest(); | 494 | void initRequest(); | ||
482 | 495 | | |||
Show All 29 Lines | |||||
512 | 525 | | |||
513 | qulonglong internalInsertTrack(const MusicAudioTrack &oneModifiedTrack, | 526 | qulonglong internalInsertTrack(const MusicAudioTrack &oneModifiedTrack, | ||
514 | const QHash<QString, QUrl> &covers, bool &isInserted); | 527 | const QHash<QString, QUrl> &covers, bool &isInserted); | ||
515 | 528 | | |||
516 | MusicAudioTrack buildTrackFromDatabaseRecord(const QSqlRecord &trackRecord) const; | 529 | MusicAudioTrack buildTrackFromDatabaseRecord(const QSqlRecord &trackRecord) const; | ||
517 | 530 | | |||
518 | TrackDataType buildTrackDataFromDatabaseRecord(const QSqlRecord &trackRecord) const; | 531 | TrackDataType buildTrackDataFromDatabaseRecord(const QSqlRecord &trackRecord) const; | ||
519 | 532 | | |||
533 | TrackDataType buildRadioDataFromDatabaseRecord(const QSqlRecord &trackRecord) const; | ||||
534 | | ||||
520 | void internalRemoveTracksList(const QList<QUrl> &removedTracks); | 535 | void internalRemoveTracksList(const QList<QUrl> &removedTracks); | ||
521 | 536 | | |||
522 | void internalRemoveTracksList(const QHash<QUrl, QDateTime> &removedTracks, qulonglong sourceId); | 537 | void internalRemoveTracksList(const QHash<QUrl, QDateTime> &removedTracks, qulonglong sourceId); | ||
523 | 538 | | |||
524 | QUrl internalAlbumArtUriFromAlbumId(qulonglong albumId); | 539 | QUrl internalAlbumArtUriFromAlbumId(qulonglong albumId); | ||
525 | 540 | | |||
526 | bool isValidArtist(qulonglong albumId); | 541 | bool isValidArtist(qulonglong albumId); | ||
527 | 542 | | |||
528 | qulonglong insertComposer(const QString &name); | 543 | qulonglong insertComposer(const QString &name); | ||
529 | 544 | | |||
530 | qulonglong insertLyricist(const QString &name); | 545 | qulonglong insertLyricist(const QString &name); | ||
531 | 546 | | |||
532 | QHash<QUrl, QDateTime> internalAllFileName(); | 547 | QHash<QUrl, QDateTime> internalAllFileName(); | ||
533 | 548 | | |||
534 | bool internalGenericPartialData(QSqlQuery &query); | 549 | bool internalGenericPartialData(QSqlQuery &query); | ||
535 | 550 | | |||
536 | ListArtistDataType internalAllArtistsPartialData(QSqlQuery &artistsQuery); | 551 | ListArtistDataType internalAllArtistsPartialData(QSqlQuery &artistsQuery); | ||
537 | 552 | | |||
538 | ListAlbumDataType internalAllAlbumsPartialData(QSqlQuery &query); | 553 | ListAlbumDataType internalAllAlbumsPartialData(QSqlQuery &query); | ||
539 | 554 | | |||
540 | AlbumDataType internalOneAlbumPartialData(qulonglong databaseId); | 555 | AlbumDataType internalOneAlbumPartialData(qulonglong databaseId); | ||
541 | 556 | | |||
542 | ListTrackDataType internalAllTracksPartialData(); | 557 | ListTrackDataType internalAllTracksPartialData(); | ||
543 | 558 | | |||
559 | ListTrackDataType internalAllRadiosPartialData(); | ||||
560 | | ||||
544 | ListTrackDataType internalRecentlyPlayedTracksData(int count); | 561 | ListTrackDataType internalRecentlyPlayedTracksData(int count); | ||
545 | 562 | | |||
546 | ListTrackDataType internalFrequentlyPlayedTracksData(int count); | 563 | ListTrackDataType internalFrequentlyPlayedTracksData(int count); | ||
547 | 564 | | |||
548 | TrackDataType internalOneTrackPartialData(qulonglong databaseId); | 565 | TrackDataType internalOneTrackPartialData(qulonglong databaseId); | ||
549 | 566 | | |||
567 | TrackDataType internalOneRadioPartialData(qulonglong databaseId); | ||||
568 | | ||||
550 | ListGenreDataType internalAllGenresPartialData(); | 569 | ListGenreDataType internalAllGenresPartialData(); | ||
551 | 570 | | |||
552 | ListArtistDataType internalAllComposersPartialData(); | 571 | ListArtistDataType internalAllComposersPartialData(); | ||
553 | 572 | | |||
554 | ListArtistDataType internalAllLyricistsPartialData(); | 573 | ListArtistDataType internalAllLyricistsPartialData(); | ||
555 | 574 | | |||
556 | bool prepareQuery(QSqlQuery &query, const QString &queryText) const; | 575 | bool prepareQuery(QSqlQuery &query, const QString &queryText) const; | ||
557 | 576 | | |||
Show All 9 Lines | |||||
567 | void upgradeDatabaseV9(); | 586 | void upgradeDatabaseV9(); | ||
568 | 587 | | |||
569 | void upgradeDatabaseV11(); | 588 | void upgradeDatabaseV11(); | ||
570 | 589 | | |||
571 | void upgradeDatabaseV12(); | 590 | void upgradeDatabaseV12(); | ||
572 | 591 | | |||
573 | void upgradeDatabaseV13(); | 592 | void upgradeDatabaseV13(); | ||
574 | 593 | | |||
594 | void upgradeDatabaseV14(); | ||||
595 | | ||||
575 | void checkDatabaseSchema(); | 596 | void checkDatabaseSchema(); | ||
576 | 597 | | |||
577 | void checkAlbumsTableSchema(); | 598 | void checkAlbumsTableSchema(); | ||
578 | 599 | | |||
579 | void checkArtistsTableSchema(); | 600 | void checkArtistsTableSchema(); | ||
580 | 601 | | |||
581 | void checkComposerTableSchema(); | 602 | void checkComposerTableSchema(); | ||
582 | 603 | | |||
Show All 27 Lines |
I think this is unneeded, the resource role QUrl should be able to handle http adresses just fine.