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