Version bump
[someplayer] / src / dbstorage.h
1 /*
2  * SomePlayer - An alternate music player for Maemo 5
3  * Copyright (C) 2010 Nikolay (somebody) Tischenko <niktischenko@gmail.com>
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18  */
19
20 #ifndef DB_STORAGE
21 #define DB_STORAGE
22
23 #include "someplayer.h"
24 #include "storage.h"
25 #include <QSqlDatabase>
26 #include <QSqlQuery>
27 #include "track.h"
28 #include "playlist.h"
29
30 #define _DATABASE_NAME_ "/library.sqlite3"
31
32 // represents database storage
33 // it store date into some database (e.g. tracks)
34
35 using SomePlayer::DataObjects::Playlist;
36 using SomePlayer::DataObjects::Track;
37
38 namespace SomePlayer {
39         namespace Storage {
40
41                 class DbStorage {
42                 public:
43                         DbStorage(QString path);
44                         ~DbStorage();
45                         QList<QString> getDirectories();
46                         QList<QString> getArtists();
47                         QMap<QString, int> getAlbumsForArtist(QString artist);
48                         QList<Track> getTracksForAlbum(QString album, QString artist); // hm...
49
50                         Playlist getFavorites();
51                         Playlist getMostPlayed();
52                         Playlist getNeverPlayed();
53                         Playlist getRecentlyAdded();
54
55                         QList<Track> searchTracks(QString pattern);
56
57                         int getArtistsCount();
58                         int getAlbumsCount();
59                         int getTracksCount();
60
61                         void removeTrack(Track track);
62                         void addToFavorites(Track track);
63                         void removeFromFavorites(Track track);
64
65                         void updateTrackCount(Track track);
66                         Track updateTrack(Track);
67                         void addTrack(Track track);
68
69                         void deleteTracksFrom(QString path);
70                         void checkTracksFrom(QString path);
71
72                         bool isFavorite(Track);
73
74                 private:
75                         QSqlDatabase db;
76                         void _create_database_structure();
77                         void _prepare_queries();
78
79                         int _check_add_artist(QString artist);
80                         int _check_add_album(QString album, int artist_id, int year);
81                         int _check_add_directory(QString path);
82
83                         void _cleanup();
84
85                         // queries
86                         QSqlQuery *_get_artists_query;
87                         QSqlQuery *_get_albums_for_artist_sort_name_query;
88                         QSqlQuery *_get_albums_for_artist_sort_year_query;
89                         QSqlQuery *_get_tracks_for_album_query;
90                         QSqlQuery *_get_favorites_query;
91                         QSqlQuery *_get_most_played_query;
92                         QSqlQuery *_get_never_played_query;
93                         QSqlQuery *_get_recently_added_query;
94                         QSqlQuery *_get_track_count_query;
95                         QSqlQuery *_get_tracks_by_pattern_query;
96                         QSqlQuery *_get_track_id_by_source_query;
97                         QSqlQuery *_get_directories_query;
98                         QSqlQuery *_get_artists_count_query;
99                         QSqlQuery *_get_albums_count_query;
100                         QSqlQuery *_get_tracks_count_query;
101                         QSqlQuery *_get_tracks_source_from_query;
102
103                         QSqlQuery *_check_artist_query;
104                         QSqlQuery *_check_album_query;
105                         QSqlQuery *_check_directory_query;
106                         QSqlQuery *_check_favorite_query;
107
108                         QSqlQuery *_insert_artist_query;
109                         QSqlQuery *_insert_album_query;
110                         QSqlQuery *_insert_track_query;
111                         QSqlQuery *_insert_date_query;
112                         QSqlQuery *_insert_favorites_query;
113                         QSqlQuery *_insert_directory_query;
114
115                         QSqlQuery *_update_track_count_query;
116
117                         QSqlQuery *_remove_track_query;
118                         QSqlQuery *_remove_empty_artists_query;
119                         QSqlQuery *_remove_empty_albums_query;
120                         QSqlQuery *_remove_tracks_from_query;
121                         QSqlQuery *_remove_directory_query;
122                         QSqlQuery *_remove_track_from_favorites_query;
123                 };
124         };
125 };
126
127 #endif