Sayonara Player
PlaylistHandler.h
1 /* Playlist.h */
2 
3 /* Copyright (C) 2011-2016 Lucio Carreras
4  *
5  * This file is part of sayonara player
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11 
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16 
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  */
20 
21 
22 /*
23  * Playlist.h
24  *
25  * Created on: Apr 6, 2011
26  * Author: Lucio Carreras
27  */
28 
29 #ifndef PLAYLISTHANDLER_H_
30 #define PLAYLISTHANDLER_H_
31 
32 #include "Playlist.h"
33 
34 #include "Helper/globals.h"
35 #include "Helper/Settings/SayonaraClass.h"
36 
37 #include "Components/PlayManager/PlayManager.h"
38 
39 #include <QTimer>
40 #include <memory>
41 
42 class DatabaseConnector;
47 class PlaylistHandler : public QObject, protected SayonaraClass {
48 
49  Q_OBJECT
50 
51  SINGLETON_QOBJECT(PlaylistHandler)
52 
53 public:
54 
58  enum class PlaylistIndex : quint8
59  {
60  Current=0,
61  Active
62  };
63 
64 
65 signals:
70  void sig_playlist_created(PlaylistPtr pl);
71 
77  void sig_cur_track_idx_changed(int track_idx, int playlist_idx);
78 
83  void sig_new_playlist_added(PlaylistPtr pl);
84 
89  void sig_playlist_name_changed(int idx);
90 
95 
96 
97  void sig_playlist_idx_changed(int idx);
98 
99 
100 public:
101 
106  void clear_playlist(int pl_idx);
107 
112  void play_next(const MetaDataList& v_md);
113 
120  void insert_tracks(const MetaDataList& v_md, int idx, int pl_idx);
121 
122 
128  void append_tracks(const MetaDataList& v_md, int pl_idx);
129 
136  void move_rows(const SP::Set<int>& indexes, int tgt_idx, int pl_idx);
137 
138 
144  void remove_rows(const SP::Set<int>& indexes, int pl_idx);
145 
146 
152  void change_track(int track_idx, int pl_idx);
153 
158  int get_active_idx_of_cur_track() const;
159 
160 
165  int get_active_idx() const;
166 
167  int get_current_idx() const;
168  void set_current_idx(int pl_idx);
169 
174  int get_playlist_count() const;
175 
176 
181  QStringList get_playlist_names() const;
182 
183 
189  PlaylistConstPtr get_playlist_at(int pl_idx) const;
190 
191 
196  void delete_playlist(int pl_idx);
197 
202  void close_playlist(int pl_idx);
203 
204 
209  void reset_playlist(int pl_idx);
210 
215  QString request_new_playlist_name() const;
216 
220  void save_all_playlists();
221 
227  PlaylistDBInterface::SaveAsAnswer save_playlist(int pl_idx);
228 
229 
237  PlaylistDBInterface::SaveAsAnswer save_playlist_as(int pl_idx, const QString& name, bool force_override);
238 
239 
246  PlaylistDBInterface::SaveAsAnswer rename_playlist(int pl_idx, const QString& name);
247 
248 
249 
255  void save_playlist_to_file(const QString& filename, bool relative);
256 
257 
258 
259 public slots:
260 
265  int load_old_playlists();
266 
267 
268 
277  int create_playlist(const MetaDataList& v_md, const QString& name=QString(), bool temporary=true, Playlist::Type type=Playlist::Type::Std);
278 
288  int create_playlist(const QStringList& path_list, const QString& name=QString(), bool temporary=true, Playlist::Type type=Playlist::Type::Std);
289 
299  int create_playlist(const QString& dir, const QString& name=QString(), bool temporary=true, Playlist::Type type=Playlist::Type::Std);
300 
306  int create_playlist(const CustomPlaylist& pl);
307 
308 
314  int create_empty_playlist(const QString& name);
315 
316 
317 
318 private slots:
319 
323  void played();
324 
328  void paused();
329 
333  void stopped();
334 
338  void previous();
339 
343  void next();
344 
345 
349  void playstate_changed(PlayManager::PlayState);
350 
351  void www_track_finished(const MetaData& md);
352 
353 private:
354 
355  DatabaseConnector* _db=nullptr;
356  PlayManager* _play_manager=nullptr;
357  QList<PlaylistPtr> _playlists;
358 
359  int _active_playlist_idx;
360  int _current_playlist_idx;
361 
362 
363  // adds a new playlist, creates it, if name is not in the list of playlists. If name already exists,
364  // this function returns the index
365  int add_new_playlist(const QString& name, bool editable, Playlist::Type type=Playlist::Type::Std);
366 
367  // raw creation of playlists
368  PlaylistPtr new_playlist(Playlist::Type type, int idx, QString name="");
369 
370 
376  int exists(const QString& name) const;
377 
378 
384  PlaylistPtr get_active();
385 
392  PlaylistPtr get_playlist(int pl_idx, PlaylistPtr fallback) const;
393 
394 
400  void emit_cur_track_changed();
401 
406  void set_active_idx(int pl_idx);
407 
408 
409 };
410 
411 #endif /* PLAYLISTHANDLER_H_ */
void delete_playlist(int pl_idx)
delete the given playlist from database
QStringList get_playlist_names() const
get names of playlists
void save_all_playlists()
save all playlists to database. This could be done in destructor
PlaylistDBInterface::SaveAsAnswer rename_playlist(int pl_idx, const QString &name)
rename playlist
The SayonaraClass class provides access to Settings and notifications.
Definition: SayonaraClass.h:31
void sig_cur_track_idx_changed(int track_idx, int playlist_idx)
emitted when current track index has changed
Definition: MetaData.h:49
PlayState
Current Playing state.
Definition: PlayManager.h:91
void insert_tracks(const MetaDataList &v_md, int idx, int pl_idx)
insert tracks into a playlist at a given index
void remove_rows(const SP::Set< int > &indexes, int pl_idx)
remove rows from playlist
QString request_new_playlist_name() const
Request a new name for the playlist (usually new %1 is returned)
PlaylistDBInterface::SaveAsAnswer save_playlist(int pl_idx)
save playlist to database, overwrite old one
Definition: DatabaseConnector.h:40
Definition: MetaDataList.h:44
void sig_saved_playlists_changed()
emitted when saved playlists have changed
PlaylistIndex
The PlaylistIndex enum.
Definition: PlaylistHandler.h:58
int get_playlist_count() const
get number of playlists
Global handler for current playback state (Singleton)
Definition: PlayManager.h:79
int create_empty_playlist(const QString &name)
create a new empty playlist
void clear_playlist(int pl_idx)
clears the current visible playlist
int create_playlist(const MetaDataList &v_md, const QString &name=QString(), bool temporary=true, Playlist::Type type=Playlist::Type::Std)
create a new playlist
int load_old_playlists()
load playlists of last session from database
void save_playlist_to_file(const QString &filename, bool relative)
save a playlist to file
PlaylistDBInterface::SaveAsAnswer save_playlist_as(int pl_idx, const QString &name, bool force_override)
Save playlist under new name.
void sig_playlist_name_changed(int idx)
emitted when playlist name has changed
void play_next(const MetaDataList &v_md)
insert tracks to active playlist after current playback position
void sig_playlist_created(PlaylistPtr pl)
emitted when new playlist has been created
void change_track(int track_idx, int pl_idx)
change the track in a given playlist
PlaylistConstPtr get_playlist_at(int pl_idx) const
get specific playlist at given index
Global handler for playlists.
Definition: PlaylistHandler.h:47
The CustomPlaylist class.
Definition: CustomPlaylist.h:50
void reset_playlist(int pl_idx)
reload playlist from db
int get_active_idx_of_cur_track() const
get playlist where current track is playing
void append_tracks(const MetaDataList &v_md, int pl_idx)
append tracks at a given playlist index
int get_active_idx() const
get active playlist index
void move_rows(const SP::Set< int > &indexes, int tgt_idx, int pl_idx)
move rows within playlist
void sig_new_playlist_added(PlaylistPtr pl)
emitted when new playlist has been added
void close_playlist(int pl_idx)
close playlist