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/PlaylistMode.h"
36 #include "Helper/Settings/SayonaraClass.h"
37 
38 #include "Components/PlayManager/PlayManager.h"
39 
40 #include <QTimer>
41 #include <memory>
42 
43 class DatabaseConnector;
48 class PlaylistHandler : public QObject, protected SayonaraClass {
49 
50  Q_OBJECT
51 
52  SINGLETON_QOBJECT(PlaylistHandler)
53 
54 public:
55 
59  enum class PlaylistIndex : quint8
60  {
61  Current=0,
62  Active
63  };
64 
65 
66 signals:
71  void sig_playlist_created(PlaylistPtr pl);
72 
78  void sig_cur_track_idx_changed(int track_idx, int playlist_idx);
79 
84  void sig_new_playlist_added(PlaylistPtr pl);
85 
90  void sig_playlist_name_changed(int idx);
91 
96 
97 
98  void sig_playlist_idx_changed(int idx);
99 
100 
101 public:
102 
107  void clear_playlist(int pl_idx);
108 
113  void play_next(const MetaDataList& v_md);
114 
121  void insert_tracks(const MetaDataList& v_md, int idx, int pl_idx);
122 
123 
129  void append_tracks(const MetaDataList& v_md, int pl_idx);
130 
137  void move_rows(const SP::Set<int>& indexes, int tgt_idx, int pl_idx);
138 
139 
145  void remove_rows(const SP::Set<int>& indexes, int pl_idx);
146 
147 
153  void change_track(int track_idx, int pl_idx);
154 
159  int get_active_idx_of_cur_track() const;
160 
161 
166  int get_active_idx() const;
167 
168  int get_current_idx() const;
169  void set_current_idx(int pl_idx);
170 
175  int get_playlist_count() const;
176 
177 
182  QStringList get_playlist_names() const;
183 
184 
190  PlaylistConstPtr get_playlist_at(int pl_idx) const;
191 
192 
197  void delete_playlist(int pl_idx);
198 
203  void close_playlist(int pl_idx);
204 
205 
210  void reset_playlist(int pl_idx);
211 
216  QString request_new_playlist_name() const;
217 
221  void save_all_playlists();
222 
228  PlaylistDBInterface::SaveAsAnswer save_playlist(int pl_idx);
229 
230 
238  PlaylistDBInterface::SaveAsAnswer save_playlist_as(int pl_idx, const QString& name, bool force_override);
239 
240 
247  PlaylistDBInterface::SaveAsAnswer rename_playlist(int pl_idx, const QString& name);
248 
249 
250 
256  void save_playlist_to_file(const QString& filename, bool relative);
257 
258 
259 
260 public slots:
261 
266  int load_old_playlists();
267 
268 
269 
278  int create_playlist(const MetaDataList& v_md, const QString& name=QString(), bool temporary=true, Playlist::Type type=Playlist::Type::Std);
279 
289  int create_playlist(const QStringList& path_list, const QString& name=QString(), bool temporary=true, Playlist::Type type=Playlist::Type::Std);
290 
300  int create_playlist(const QString& dir, const QString& name=QString(), bool temporary=true, Playlist::Type type=Playlist::Type::Std);
301 
307  int create_playlist(const CustomPlaylist& pl);
308 
309 
315  int create_empty_playlist(const QString& name);
316 
317 
318 
319 private slots:
320 
324  void played();
325 
329  void paused();
330 
334  void stopped();
335 
339  void previous();
340 
344  void next();
345 
346 
350  void playstate_changed(PlayManager::PlayState);
351 
352 private:
353 
354  DatabaseConnector* _db=nullptr;
355  PlayManager* _play_manager=nullptr;
356  QList<PlaylistPtr> _playlists;
357 
358  int _active_playlist_idx;
359  int _current_playlist_idx;
360 
361 
362  // adds a new playlist, creates it, if name is not in the list of playlists. If name already exists,
363  // this function returns the index
364  int add_new_playlist(const QString& name, bool editable, Playlist::Type type=Playlist::Type::Std);
365 
366  // raw creation of playlists
367  PlaylistPtr new_playlist(Playlist::Type type, int idx, QString name="");
368 
369 
375  int exists(const QString& name) const;
376 
377 
383  PlaylistPtr get_active();
384 
391  PlaylistPtr get_playlist(int pl_idx, PlaylistPtr fallback) const;
392 
393 
399  void emit_cur_track_changed();
400 
405  void set_active_idx(int pl_idx);
406 
407 
408 };
409 
410 #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
PlayState
Current Playing state.
Definition: PlayManager.h:79
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:46
void sig_saved_playlists_changed()
emitted when saved playlists have changed
PlaylistIndex
The PlaylistIndex enum.
Definition: PlaylistHandler.h:59
int get_playlist_count() const
get number of playlists
Global handler for current playback state (Singleton)
Definition: PlayManager.h:67
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:48
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