Sayonara Player
PlaylistHandler.h
1 /* Playlist.h */
2 
3 /* Copyright (C) 2011-2019 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 "PlaylistDBInterface.h"
33 
34 #include "Components/PlayManager/PlayState.h"
35 
36 #include "Utils/Pimpl.h"
37 #include "Utils/Singleton.h"
38 #include "Utils/Playlist/PlaylistFwd.h"
39 #include "Utils/Library/LibraryNamespaces.h"
40 
41 #include <QObject>
42 
43 class CustomPlaylist;
44 
45 namespace Playlist
46 {
51  class Handler :
52  public QObject
53  {
54  Q_OBJECT
55  PIMPL(Handler)
56  SINGLETON_QOBJECT(Handler)
57 
58  public:
59 
63  enum class PlaylistIndex : uint8_t
64  {
65  Current=0,
66  Active
67  };
68 
69  signals:
74  void sig_playlist_created(PlaylistPtr pl);
75 
81  void sig_current_track_changed(int track_idx, int playlist_idx);
82 
87  void sig_new_playlist_added(PlaylistPtr pl);
88 
93  void sig_playlist_name_changed(int idx);
94 
99  void sig_current_playlist_changed(int idx);
100 
107 
108  void sig_find_track_requested(TrackID track_id);
109 
110 
111  public:
112 
117  void shutdown();
118 
123  void clear_playlist(int pl_idx);
124 
129  void play_next(const MetaDataList& v_md);
130 
137  void insert_tracks(const MetaDataList& v_md, int idx, int pl_idx);
138 
139 
145  void append_tracks(const MetaDataList& v_md, int pl_idx);
146  void append_tracks(const QStringList& paths, int pl_idx);
147 
154  void move_rows(const IndexSet& indexes, int tgt_idx, int pl_idx);
155 
156 
162  void remove_rows(const IndexSet& indexes, int pl_idx);
163 
164 
170  void change_track(int track_idx, int pl_idx);
171 
172 
177  int active_index() const;
178  PlaylistConstPtr active_playlist() const;
179 
180 
181  int current_index() const;
182  void set_current_index(int pl_idx);
183 
188  int count() const;
189 
190 
196  PlaylistConstPtr playlist(int pl_idx) const;
197 
198 
203  void delete_playlist(int pl_idx);
204 
209  int close_playlist(int pl_idx);
210 
211 
216  void reset_playlist(int pl_idx);
217 
225  QString request_new_playlist_name(const QString& prefix=QString()) const;
226 
227 
233  Util::SaveAsAnswer save_playlist(int pl_idx);
234 
235 
243  Util::SaveAsAnswer save_playlist_as(int pl_idx, const QString& name, bool force_override);
244 
245 
252  Util::SaveAsAnswer rename_playlist(int pl_idx, const QString& name);
253 
254 
260  void save_playlist_to_file(int pl_idx, const QString& filename, bool relative);
261 
270  int create_playlist(const MetaDataList& v_md, const QString& name=QString(), bool temporary=true, PlaylistType type=PlaylistType::Std);
271 
280  int create_playlist(const QStringList& path_list, const QString& name=QString(), bool temporary=true, PlaylistType type=PlaylistType::Std);
281 
291  int create_playlist(const QString& dir, const QString& name=QString(), bool temporary=true, PlaylistType type=PlaylistType::Std);
292 
293 
299  int create_playlist(const CustomPlaylist& pl);
300 
301 
307  int create_empty_playlist(bool override_current=false);
308 
309  int create_empty_playlist(const QString& name);
310 
311 
312  void delete_tracks(int pl_idx, const IndexSet& rows, Library::TrackDeletionMode deletion_mode);
313 
314  public slots:
319  int load_old_playlists();
320 
321 
322  private slots:
323 
327  void played();
328 
332  void stopped();
333 
337  void previous();
338 
342  void next();
343 
344  void wake_up();
345 
346 
350  void playstate_changed(PlayState state);
351 
352  void www_track_finished(const MetaData& md);
353 
354  void current_track_changed(int index);
355  void playlist_stopped();
356 
357  void playlist_renamed(int id, const QString& old_name, const QString& new_name);
358  void playlist_deleted(int id);
359 
360  private:
368  int add_new_playlist(const QString& name, bool editable, PlaylistType type=PlaylistType::Std);
369 
377  PlaylistPtr new_playlist(PlaylistType type, QString name);
378 
379 
385  int exists(const QString& name) const;
386 
387 
393  PlaylistPtr active_playlist();
394 
401  PlaylistPtr playlist(int pl_idx, PlaylistPtr fallback) const;
402 
403 
409  void emit_cur_track_changed();
410 
415  void set_active_idx(int pl_idx);
416  };
417 }
418 
419 #endif /* PLAYLISTHANDLER_H_ */
int create_playlist(const MetaDataList &v_md, const QString &name=QString(), bool temporary=true, PlaylistType type=PlaylistType::Std)
create a new playlist
void insert_tracks(const MetaDataList &v_md, int idx, int pl_idx)
insert tracks into a playlist at a given index
Util::SaveAsAnswer save_playlist_as(int pl_idx, const QString &name, bool force_override)
Save playlist under new name.
void save_playlist_to_file(int pl_idx, const QString &filename, bool relative)
save a playlist to file
void sig_current_track_changed(int track_idx, int playlist_idx)
emitted when current track index has changed
int create_empty_playlist(bool override_current=false)
create a new empty playlist
void delete_playlist(int pl_idx)
delete the given playlist from database
Global handler for playlists.
Definition: PlaylistHandler.h:51
void remove_rows(const IndexSet &indexes, int pl_idx)
remove rows from playlist
PlayState
The PlayState enum.
Definition: PlayState.h:28
void sig_current_playlist_changed(int idx)
emitted when tracks were added/removed or have changed
The MetaData class.
Definition: MetaData.h:44
void sig_track_deletion_requested(const MetaDataList &v_md, Library::TrackDeletionMode deletion_mode)
emitted when a track deletion was triggered over the Ui
int close_playlist(int pl_idx)
close playlist
int active_index() const
get active playlist index
int count() const
Returns number of playlists.
The MetaDataList class.
Definition: MetaDataList.h:37
void shutdown()
Call this before the program stops. Singletons and Destructors don't work out so well.
void play_next(const MetaDataList &v_md)
insert tracks to active playlist after current playback position
void sig_playlist_name_changed(int idx)
emitted when playlist name has changed
void sig_playlist_created(PlaylistPtr pl)
emitted when new playlist has been created
PlaylistIndex
The PlaylistIndex enum.
Definition: PlaylistHandler.h:63
int load_old_playlists()
load playlists of last session from database
PlaylistConstPtr playlist(int pl_idx) const
get specific playlist at given index
void change_track(int track_idx, int pl_idx)
change the track in a given playlist
A set structure. Inherited from std::set with some useful methods. For integer and String this set is...
Definition: Set.h:35
QString request_new_playlist_name(const QString &prefix=QString()) const
Request a new name for the playlist (usually New %1 is returned). If the prefix differs,...
TrackDeletionMode
The TrackDeletionMode enum.
Definition: LibraryNamespaces.h:36
Util::SaveAsAnswer save_playlist(int pl_idx)
save playlist to database, overwrite old one
void append_tracks(const MetaDataList &v_md, int pl_idx)
append tracks at a given playlist index
void clear_playlist(int pl_idx)
clears the current visible playlist
void sig_new_playlist_added(PlaylistPtr pl)
emitted when new playlist has been added
The CustomPlaylist class.
Definition: CustomPlaylist.h:31
Util::SaveAsAnswer rename_playlist(int pl_idx, const QString &name)
rename playlist
void reset_playlist(int pl_idx)
reload playlist from db
void move_rows(const IndexSet &indexes, int tgt_idx, int pl_idx)
move rows within playlist