Fixed broken image issue in taglib
[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
64                         void updateTrackCount(Track track);
65                         Track updateTrack(Track);
66                         void addTrack(Track track);
67
68                         void deleteTracksFrom(QString path);
69                         void checkTracksFrom(QString path);
70
71                 private:
72                         QSqlDatabase db;
73                         void _create_database_structure();
74                         void _prepare_queries();
75
76                         int _check_add_artist(QString artist);
77                         int _check_add_album(QString album, int artist_id, int year);
78                         int _check_add_directory(QString path);
79
80                         void _cleanup();
81
82                         // queries
83                         QSqlQuery *_get_artists_query;
84                         QSqlQuery *_get_albums_for_artist_sort_name_query;
85                         QSqlQuery *_get_albums_for_artist_sort_year_query;
86                         QSqlQuery *_get_tracks_for_album_query;
87                         QSqlQuery *_get_favorites_query;
88                         QSqlQuery *_get_most_played_query;
89                         QSqlQuery *_get_never_played_query;
90                         QSqlQuery *_get_recently_added_query;
91                         QSqlQuery *_get_track_count_query;
92                         QSqlQuery *_get_tracks_by_pattern_query;
93                         QSqlQuery *_get_track_id_by_source_query;
94                         QSqlQuery *_get_directories_query;
95                         QSqlQuery *_get_artists_count_query;
96                         QSqlQuery *_get_albums_count_query;
97                         QSqlQuery *_get_tracks_count_query;
98                         QSqlQuery *_get_tracks_source_from_query;
99
100                         QSqlQuery *_check_artist_query;
101                         QSqlQuery *_check_album_query;
102                         QSqlQuery *_check_directory_query;
103
104                         QSqlQuery *_insert_artist_query;
105                         QSqlQuery *_insert_album_query;
106                         QSqlQuery *_insert_track_query;
107                         QSqlQuery *_insert_date_query;
108                         QSqlQuery *_insert_favorites_query;
109                         QSqlQuery *_insert_directory_query;
110
111                         QSqlQuery *_update_track_count_query;
112
113                         QSqlQuery *_remove_track_query;
114                         QSqlQuery *_remove_empty_artists_query;
115                         QSqlQuery *_remove_empty_albums_query;
116                         QSqlQuery *_remove_tracks_from_query;
117                         QSqlQuery *_remove_directory_query;
118                 };
119         };
120 };
121
122 #endif