Sayonara Player
PlaylistHandler.h
1 /* Playlist.h */
2 
3 /* Copyright (C) 2011-2017 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 #include "Components/PlayManager/PlayState.h"
34 
35 #include "Utils/Pimpl.h"
36 #include "Utils/Singleton.h"
37 #include "Utils/Settings/SayonaraClass.h"
38 #include "Utils/Playlist/PlaylistFwd.h"
39 #include "Utils/Library/LibraryNamespaces.h"
40 
41 class CustomPlaylist;
42 class MetaData;
43 class MetaDataList;
44 
45 namespace SP
46 {
47  template<typename T>
48  class Set;
49 }
50 
51 namespace Playlist
52 {
57  class Handler :
58  public QObject,
59  public SayonaraClass
60  {
61  Q_OBJECT
62  PIMPL(Handler)
63  SINGLETON_QOBJECT(Handler)
64 
65  public:
66 
70  enum class PlaylistIndex : uint8_t
71  {
72  Current=0,
73  Active
74  };
75 
76 
77  signals:
83 
89  void sig_cur_track_idx_changed(int track_idx, int playlist_idx);
90 
96 
101  void sig_playlist_name_changed(int idx);
102 
107 
108 
109  void sig_playlist_idx_changed(int idx);
110 
111  void sig_track_deletion_requested(const MetaDataList& v_md, Library::TrackDeletionMode deletion_mode);
112 
113 
114  public:
115 
120  void clear_playlist(int pl_idx);
121 
126  void play_next(const MetaDataList& v_md);
127 
134  void insert_tracks(const MetaDataList& v_md, int idx, int pl_idx);
135 
136 
142  void append_tracks(const MetaDataList& v_md, int pl_idx);
143 
150  void move_rows(const IndexSet& indexes, int tgt_idx, int pl_idx);
151 
152 
158  void remove_rows(const IndexSet& indexes, int pl_idx);
159 
160 
166  void change_track(int track_idx, int pl_idx);
167 
168 
173  int active_index() const;
174 
175  int current_index() const;
176  void set_current_index(int pl_idx);
177 
178 
184  PlaylistConstPtr playlist(int pl_idx) const;
185 
186 
191  void delete_playlist(int pl_idx);
192 
197  void close_playlist(int pl_idx);
198 
199 
204  void reset_playlist(int pl_idx);
205 
210  QString request_new_playlist_name() const;
211 
215  void save_all_playlists();
216 
222  DBInterface::SaveAsAnswer save_playlist(int pl_idx);
223 
224 
232  DBInterface::SaveAsAnswer save_playlist_as(int pl_idx, const QString& name, bool force_override);
233 
234 
241  DBInterface::SaveAsAnswer rename_playlist(int pl_idx, const QString& name);
242 
243 
249  void save_playlist_to_file(int pl_idx, const QString& filename, bool relative);
250 
251 
252  public slots:
253 
258  int load_old_playlists();
259 
260 
269  int create_playlist(const MetaDataList& v_md, const QString& name=QString(), bool temporary=true, Playlist::Type type=Playlist::Type::Std);
270 
280  int create_playlist(const QStringList& path_list, const QString& name=QString(), bool temporary=true, Playlist::Type type=Playlist::Type::Std);
281 
291  int create_playlist(const QString& dir, const QString& name=QString(), bool temporary=true, Playlist::Type type=Playlist::Type::Std);
292 
298  int create_playlist(const CustomPlaylist& pl);
299 
300 
306  int create_empty_playlist(bool override_current=false);
307 
308  int create_empty_playlist(const QString& name);
309 
310 
311  void delete_tracks(const IndexSet& rows, Library::TrackDeletionMode deletion_mode);
312 
313 
314  private slots:
315 
319  void played();
320 
324  void paused();
325 
329  void stopped();
330 
334  void previous();
335 
339  void next();
340 
341  void wake_up();
342 
343 
347  void playstate_changed(PlayState state);
348 
349  void www_track_finished(const MetaData& md);
350 
351 
352 
353  private:
354  // adds a new playlist, creates it, if name is not in the list of playlists. If name already exists,
355  // this function returns the index
356  int add_new_playlist(const QString& name, bool editable, Playlist::Type type=Playlist::Type::Std);
357 
358  // raw creation of playlists
359  PlaylistPtr new_playlist(Playlist::Type type, int idx, QString name="");
360 
361 
367  int exists(const QString& name) const;
368 
369 
375  PlaylistPtr active_playlist();
376 
383  PlaylistPtr playlist(int pl_idx, PlaylistPtr fallback) const;
384 
385 
391  void emit_cur_track_changed();
392 
397  void set_active_idx(int pl_idx);
398  };
399 }
400 
401 #endif /* PLAYLISTHANDLER_H_ */
void insert_tracks(const MetaDataList &v_md, int idx, int pl_idx)
insert tracks into a playlist at a given index
DBInterface::SaveAsAnswer rename_playlist(int pl_idx, const QString &name)
rename playlist
void save_playlist_to_file(int pl_idx, const QString &filename, bool relative)
save a playlist to file
void sig_cur_track_idx_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:57
TrackDeletionMode
The TrackDeletionMode enum.
Definition: LibraryNamespaces.h:35
Definition: AbstractPlaylist.h:33
The SayonaraClass class provides access to Settings and notifications.
Definition: SayonaraClass.h:29
void remove_rows(const IndexSet &indexes, int pl_idx)
remove rows from playlist
PlayState
The PlayState enum.
Definition: PlayState.h:28
void close_playlist(int pl_idx)
close playlist
The MetaData class.
Definition: MetaData.h:48
int active_index() const
get active playlist index
The MetaDataList class.
Definition: MetaDataList.h:38
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:70
int load_old_playlists()
load playlists of last session from database
Set namespace defines the setting: Which key and which type.
Definition: SettingKey.h:216
DBInterface::SaveAsAnswer save_playlist_as(int pl_idx, const QString &name, bool force_override)
Save playlist under new name.
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
std::shared_ptr< const Playlist::Base > PlaylistConstPtr
PlaylistConstPtr read only Playlist Pointer.
Definition: PlaylistFwd.h:45
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 save_all_playlists()
save all playlists to database. This could be done in destructor
void sig_new_playlist_added(PlaylistPtr pl)
emitted when new playlist has been added
int create_playlist(const MetaDataList &v_md, const QString &name=QString(), bool temporary=true, Playlist::Type type=Playlist::Type::Std)
create a new playlist
The CustomPlaylist class.
Definition: CustomPlaylist.h:31
QString request_new_playlist_name() const
Request a new name for the playlist (usually new %1 is returned)
void reset_playlist(int pl_idx)
reload playlist from db
void sig_saved_playlists_changed()
emitted when saved playlists have changed
A set structure. Inherited from std::set with some useful methods. For integer and String this set is...
Definition: AbstractPlaylist.h:36
std::shared_ptr< Playlist::Base > PlaylistPtr
PlaylistPtr Playlist Pointer (only used internally)
Definition: PlaylistFwd.h:38
Definition: AbstractPlaylist.h:42
DBInterface::SaveAsAnswer save_playlist(int pl_idx)
save playlist to database, overwrite old one
void move_rows(const IndexSet &indexes, int tgt_idx, int pl_idx)
move rows within playlist