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 2835 Lines • ▼ Show 20 Line(s) | 2807 | { | |||
---|---|---|---|---|---|
2836 | d->mTracksDatabase.transaction(); | 2836 | d->mTracksDatabase.transaction(); | ||
2837 | 2837 | | |||
2838 | { | 2838 | { | ||
2839 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | 2839 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | ||
2840 | 2840 | | |||
2841 | const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `Radios` (" | 2841 | const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `Radios` (" | ||
2842 | "`ID` INTEGER PRIMARY KEY AUTOINCREMENT, " | 2842 | "`ID` INTEGER PRIMARY KEY AUTOINCREMENT, " | ||
2843 | "`HttpAddress` VARCHAR(255) NOT NULL, " | 2843 | "`HttpAddress` VARCHAR(255) NOT NULL, " | ||
2844 | "`Priority` INTEGER NOT NULL, " | 2844 | "`ImageAddress` VARCHAR(255) NOT NULL, " | ||
mgallien: Even though this branch has not been released, can you bump the database version and do this… | |||||
Thanks for the feedback. I wonder if there is a particular reason for creating some tables to check the database version? (DatabaseVersionV13, DatabaseVersionV14 ...). Maybe we could use on table with a version field? It could be more efficient/readable in DatabaseInterface::initDatabase ? jguidon: Thanks for the feedback.
I wonder if there is a particular reason for creating some tables to… | |||||
The current solution was what I found enough to do the job. mgallien: The current solution was what I found enough to do the job.
Feel free to propose another… | |||||
2845 | "`Title` VARCHAR(85) NOT NULL, " | 2845 | "`Title` VARCHAR(85) NOT NULL, " | ||
2846 | "`Rating` INTEGER NOT NULL DEFAULT 0, " | 2846 | "`Rating` INTEGER NOT NULL DEFAULT 0, " | ||
2847 | "`Genre` VARCHAR(55), " | 2847 | "`Genre` VARCHAR(55), " | ||
2848 | "`Comment` VARCHAR(255), " | 2848 | "`Comment` VARCHAR(255), " | ||
2849 | "UNIQUE (" | 2849 | "UNIQUE (" | ||
2850 | "`HttpAddress`" | 2850 | "`HttpAddress`" | ||
2851 | "), " | 2851 | "), " | ||
2852 | "UNIQUE (" | 2852 | "UNIQUE (" | ||
2853 | "`Priority`, `Title`, `HttpAddress`" | 2853 | "`Title`, `HttpAddress`" | ||
2854 | ") " | 2854 | ") " | ||
2855 | "CONSTRAINT fk_tracks_genre FOREIGN KEY (`Genre`) REFERENCES `Genre`(`Name`))" | 2855 | "CONSTRAINT fk_tracks_genre FOREIGN KEY (`Genre`) REFERENCES `Genre`(`Name`))" | ||
2856 | )); | 2856 | )); | ||
2857 | 2857 | | |||
2858 | if (!result) { | 2858 | if (!result) { | ||
2859 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << createSchemaQuery.lastQuery(); | 2859 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << createSchemaQuery.lastQuery(); | ||
2860 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << createSchemaQuery.lastError(); | 2860 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV14" << createSchemaQuery.lastError(); | ||
2861 | 2861 | | |||
2862 | Q_EMIT databaseError(); | 2862 | Q_EMIT databaseError(); | ||
2863 | } | 2863 | } | ||
2864 | } | 2864 | } | ||
2865 | 2865 | | |||
2866 | { | 2866 | { | ||
2867 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | 2867 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | ||
2868 | 2868 | | |||
2869 | //Find webradios (french): https://doc.ubuntu-fr.org/liste_radio_france | 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). | 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`) " | 2871 | const auto &result = createSchemaQuery.exec(QStringLiteral("INSERT INTO `Radios` (`HttpAddress`, `ImageAddress`, `Title`) " | ||
2872 | "SELECT 'http://classicrock.stream.ouifm.fr/ouifm3.mp3', 1, 'OuiFM_Classic_Rock' UNION ALL " | 2872 | "SELECT 'http://classicrock.stream.ouifm.fr/ouifm3.mp3', '', 'OuiFM_Classic_Rock' UNION ALL " | ||
2873 | "SELECT 'http://rock70s.stream.ouifm.fr/ouifmseventies.mp3', 1, 'OuiFM_70s' UNION ALL " | 2873 | "SELECT 'http://rock70s.stream.ouifm.fr/ouifmseventies.mp3', '', 'OuiFM_70s' UNION ALL " | ||
2874 | "SELECT 'http://jazzradio.ice.infomaniak.ch/jazzradio-high.mp3', 2 , 'Jazz_Radio' UNION ALL " | 2874 | "SELECT 'http://jazzradio.ice.infomaniak.ch/jazzradio-high.mp3', '' , 'Jazz_Radio' UNION ALL " | ||
2875 | "SELECT 'http://cdn.nrjaudio.fm/audio1/fr/30601/mp3_128.mp3?origine=playerweb', 1, 'Nostalgie' UNION ALL " | 2875 | "SELECT 'http://cdn.nrjaudio.fm/audio1/fr/30601/mp3_128.mp3?origine=playerweb', '', 'Nostalgie' UNION ALL " | ||
2876 | "SELECT 'https://scdn.nrjaudio.fm/audio1/fr/30713/aac_64.mp3?origine=playerweb', 1, 'Nostalgie Johnny' UNION ALL " | 2876 | "SELECT 'https://scdn.nrjaudio.fm/audio1/fr/30713/aac_64.mp3?origine=playerweb', '', 'Nostalgie Johnny' UNION ALL " | ||
2877 | "SELECT 'http://sc-classrock.1.fm:8200', 1, 'Classic rock replay' UNION ALL " | 2877 | "SELECT 'http://sc-classrock.1.fm:8200', '', 'Classic rock replay' UNION ALL " | ||
2878 | "SELECT 'http://agnes.torontocast.com:8151/stream', 1, 'Instrumentals Forever' UNION ALL " | 2878 | "SELECT 'http://agnes.torontocast.com:8151/stream', '', 'Instrumentals Forever' UNION ALL " | ||
2879 | "SELECT 'https://stream.laut.fm/jahfari', 1, 'Jahfari'" | 2879 | "SELECT 'https://stream.laut.fm/jahfari', '', 'Jahfari' UNION ALL " | ||
2880 | "SELECT 'https://chai5she.cdn.dvmr.fr/francemusique-lofi.mp3', 'https://static.radio.fr/images/broadcasts/07/f7/3366/c44.png', 'France Musique'" | ||||
2880 | )); | 2881 | )); | ||
2881 | if (!result) { | 2882 | if (!result) { | ||
2882 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << createSchemaQuery.lastQuery(); | 2883 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << createSchemaQuery.lastQuery(); | ||
2883 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << createSchemaQuery.lastError(); | 2884 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << createSchemaQuery.lastError(); | ||
2884 | 2885 | | |||
2885 | Q_EMIT databaseError(); | 2886 | Q_EMIT databaseError(); | ||
2886 | } | 2887 | } | ||
2887 | } | 2888 | } | ||
▲ Show 20 Lines • Show All 736 Lines • ▼ Show 20 Line(s) | 3505 | { | |||
3624 | } | 3625 | } | ||
3625 | } | 3626 | } | ||
3626 | 3627 | | |||
3627 | { | 3628 | { | ||
3628 | auto selectAllRadiosText = QStringLiteral("SELECT " | 3629 | auto selectAllRadiosText = QStringLiteral("SELECT " | ||
3629 | "radios.`ID`, " | 3630 | "radios.`ID`, " | ||
3630 | "radios.`Title`, " | 3631 | "radios.`Title`, " | ||
3631 | "radios.`HttpAddress`, " | 3632 | "radios.`HttpAddress`, " | ||
3633 | "radios.`ImageAddress`, " | ||||
3632 | "radios.`Rating`, " | 3634 | "radios.`Rating`, " | ||
3633 | "trackGenre.`Name`, " | 3635 | "trackGenre.`Name`, " | ||
3634 | "radios.`Comment` " | 3636 | "radios.`Comment` " | ||
3635 | "FROM " | 3637 | "FROM " | ||
3636 | "`Radios` radios " | 3638 | "`Radios` radios " | ||
3637 | "LEFT JOIN `Genre` trackGenre ON trackGenre.`Name` = radios.`Genre` " | 3639 | "LEFT JOIN `Genre` trackGenre ON trackGenre.`Name` = radios.`Genre` " | ||
3638 | ""); | 3640 | ""); | ||
3639 | 3641 | | |||
▲ Show 20 Lines • Show All 802 Lines • ▼ Show 20 Line(s) | 4323 | { | |||
4442 | } | 4444 | } | ||
4443 | } | 4445 | } | ||
4444 | 4446 | | |||
4445 | { | 4447 | { | ||
4446 | auto selectRadioFromIdQueryText = QStringLiteral("SELECT " | 4448 | auto selectRadioFromIdQueryText = QStringLiteral("SELECT " | ||
4447 | "radios.`ID`, " | 4449 | "radios.`ID`, " | ||
4448 | "radios.`Title`, " | 4450 | "radios.`Title`, " | ||
4449 | "radios.`HttpAddress`, " | 4451 | "radios.`HttpAddress`, " | ||
4452 | "radios.`ImageAddress`, " | ||||
4450 | "radios.`Rating`, " | 4453 | "radios.`Rating`, " | ||
4451 | "trackGenre.`Name`, " | 4454 | "trackGenre.`Name`, " | ||
4452 | "radios.`Comment` " | 4455 | "radios.`Comment` " | ||
4453 | "FROM " | 4456 | "FROM " | ||
4454 | "`Radios` radios " | 4457 | "`Radios` radios " | ||
4455 | "LEFT JOIN `Genre` trackGenre ON trackGenre.`Name` = radios.`Genre` " | 4458 | "LEFT JOIN `Genre` trackGenre ON trackGenre.`Name` = radios.`Genre` " | ||
4456 | "WHERE " | 4459 | "WHERE " | ||
4457 | "radios.`ID` = :radioId " | 4460 | "radios.`ID` = :radioId " | ||
▲ Show 20 Lines • Show All 654 Lines • ▼ Show 20 Line(s) | |||||
5112 | 5115 | | |||
5113 | { | 5116 | { | ||
5114 | auto insertRadioQueryText = QStringLiteral("INSERT INTO `Radios` " | 5117 | auto insertRadioQueryText = QStringLiteral("INSERT INTO `Radios` " | ||
5115 | "(" | 5118 | "(" | ||
5116 | "`Title`, " | 5119 | "`Title`, " | ||
5117 | "`httpAddress`, " | 5120 | "`httpAddress`, " | ||
5118 | "`Comment`, " | 5121 | "`Comment`, " | ||
5119 | "`Rating`, " | 5122 | "`Rating`, " | ||
5120 | "`Priority`) " | 5123 | "`ImageAddress`) " | ||
5121 | "VALUES " | 5124 | "VALUES " | ||
5122 | "(" | 5125 | "(" | ||
5123 | ":title, " | 5126 | ":title, " | ||
5124 | ":httpAddress, " | 5127 | ":httpAddress, " | ||
5125 | ":comment, " | 5128 | ":comment, " | ||
5126 | ":trackRating," | 5129 | ":trackRating," | ||
5127 | "1)"); | 5130 | ":imageAddress)"); | ||
5128 | 5131 | | |||
5129 | auto result = prepareQuery(d->mInsertRadioQuery, insertRadioQueryText); | 5132 | auto result = prepareQuery(d->mInsertRadioQuery, insertRadioQueryText); | ||
5130 | 5133 | | |||
5131 | if (!result) { | 5134 | if (!result) { | ||
5132 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertRadioQuery.lastQuery(); | 5135 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertRadioQuery.lastQuery(); | ||
5133 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertRadioQuery.lastError(); | 5136 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertRadioQuery.lastError(); | ||
5134 | 5137 | | |||
5135 | Q_EMIT databaseError(); | 5138 | Q_EMIT databaseError(); | ||
Show All 15 Lines | |||||
5151 | } | 5154 | } | ||
5152 | 5155 | | |||
5153 | { | 5156 | { | ||
5154 | auto updateRadioQueryText = QStringLiteral("UPDATE `Radios` " | 5157 | auto updateRadioQueryText = QStringLiteral("UPDATE `Radios` " | ||
5155 | "SET " | 5158 | "SET " | ||
5156 | "`HttpAddress` = :httpAddress, " | 5159 | "`HttpAddress` = :httpAddress, " | ||
5157 | "`Title` = :title, " | 5160 | "`Title` = :title, " | ||
5158 | "`Comment` = :comment, " | 5161 | "`Comment` = :comment, " | ||
5159 | "`Rating` = :trackRating " | 5162 | "`Rating` = :trackRating, " | ||
5163 | "`ImageAddress` = :imageAddress " | ||||
5160 | "WHERE " | 5164 | "WHERE " | ||
5161 | "`ID` = :radioId"); | 5165 | "`ID` = :radioId"); | ||
5162 | 5166 | | |||
5163 | auto result = prepareQuery(d->mUpdateRadioQuery, updateRadioQueryText); | 5167 | auto result = prepareQuery(d->mUpdateRadioQuery, updateRadioQueryText); | ||
5164 | 5168 | | |||
5165 | if (!result) { | 5169 | if (!result) { | ||
5166 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateRadioQuery.lastQuery(); | 5170 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateRadioQuery.lastQuery(); | ||
5167 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateRadioQuery.lastError(); | 5171 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateRadioQuery.lastError(); | ||
▲ Show 20 Lines • Show All 1228 Lines • ▼ Show 20 Line(s) | 6398 | { | |||
6396 | 6400 | | |||
6397 | result[TrackDataType::key_type::DatabaseIdRole] = trackRecord.value(0); | 6401 | result[TrackDataType::key_type::DatabaseIdRole] = trackRecord.value(0); | ||
6398 | result[TrackDataType::key_type::TitleRole] = trackRecord.value(1); | 6402 | result[TrackDataType::key_type::TitleRole] = trackRecord.value(1); | ||
6399 | 6403 | | |||
6400 | result[TrackDataType::key_type::AlbumRole] = QStringLiteral("Radios"); | 6404 | result[TrackDataType::key_type::AlbumRole] = QStringLiteral("Radios"); | ||
6401 | result[TrackDataType::key_type::ArtistRole] = trackRecord.value(1); | 6405 | result[TrackDataType::key_type::ArtistRole] = trackRecord.value(1); | ||
6402 | 6406 | | |||
6403 | result[TrackDataType::key_type::ResourceRole] = trackRecord.value(2); | 6407 | result[TrackDataType::key_type::ResourceRole] = trackRecord.value(2); | ||
6404 | result[TrackDataType::key_type::RatingRole] = trackRecord.value(3); | 6408 | result[TrackDataType::key_type::ImageUrlRole] = trackRecord.value(3); | ||
6409 | result[TrackDataType::key_type::RatingRole] = trackRecord.value(4); | ||||
6405 | if (!trackRecord.value(4).isNull()) { | 6410 | if (!trackRecord.value(4).isNull()) { | ||
6406 | result[TrackDataType::key_type::GenreRole] = trackRecord.value(4); | 6411 | result[TrackDataType::key_type::GenreRole] = trackRecord.value(5); | ||
6407 | } | 6412 | } | ||
6408 | result[TrackDataType::key_type::CommentRole] = trackRecord.value(5); | 6413 | result[TrackDataType::key_type::CommentRole] = trackRecord.value(6); | ||
6409 | result[TrackDataType::key_type::ElementTypeRole] = ElisaUtils::Radio; | 6414 | result[TrackDataType::key_type::ElementTypeRole] = ElisaUtils::Radio; | ||
6410 | 6415 | | |||
6411 | return result; | 6416 | return result; | ||
6412 | } | 6417 | } | ||
6413 | 6418 | | |||
6414 | void DatabaseInterface::internalRemoveTracksList(const QList<QUrl> &removedTracks) | 6419 | void DatabaseInterface::internalRemoveTracksList(const QList<QUrl> &removedTracks) | ||
6415 | { | 6420 | { | ||
6416 | QSet<qulonglong> modifiedAlbums; | 6421 | QSet<qulonglong> modifiedAlbums; | ||
▲ Show 20 Lines • Show All 389 Lines • ▼ Show 20 Line(s) | 6810 | if (oneTrack.databaseId() == -1ull) { | |||
6806 | query = d->mInsertRadioQuery; | 6811 | query = d->mInsertRadioQuery; | ||
6807 | } | 6812 | } | ||
6808 | 6813 | | |||
6809 | query.bindValue(QStringLiteral(":httpAddress"), oneTrack.resourceURI()); | 6814 | query.bindValue(QStringLiteral(":httpAddress"), oneTrack.resourceURI()); | ||
6810 | query.bindValue(QStringLiteral(":radioId"), oneTrack.databaseId()); | 6815 | query.bindValue(QStringLiteral(":radioId"), oneTrack.databaseId()); | ||
6811 | query.bindValue(QStringLiteral(":title"), oneTrack.title()); | 6816 | query.bindValue(QStringLiteral(":title"), oneTrack.title()); | ||
6812 | query.bindValue(QStringLiteral(":comment"), oneTrack.comment()); | 6817 | query.bindValue(QStringLiteral(":comment"), oneTrack.comment()); | ||
6813 | query.bindValue(QStringLiteral(":trackRating"), oneTrack.rating()); | 6818 | query.bindValue(QStringLiteral(":trackRating"), oneTrack.rating()); | ||
6819 | query.bindValue(QStringLiteral(":imageAddress"), oneTrack.albumCover()); | ||||
6814 | 6820 | | |||
6815 | auto result = execQuery(query); | 6821 | auto result = execQuery(query); | ||
6816 | 6822 | | |||
6817 | if (!result || !query.isActive()) { | 6823 | if (!result || !query.isActive()) { | ||
6818 | Q_EMIT databaseError(); | 6824 | Q_EMIT databaseError(); | ||
6819 | 6825 | | |||
6820 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.lastQuery(); | 6826 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.lastQuery(); | ||
6821 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.boundValues(); | 6827 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.boundValues(); | ||
▲ Show 20 Lines • Show All 912 Lines • Show Last 20 Lines |
Even though this branch has not been released, can you bump the database version and do this modification via a database upgrade. That will be nicer for people using builds from trunk (think of early testers via the flatpak package built by KDE for example).