MythTV master
playlist.h
Go to the documentation of this file.
1#ifndef PLAYLIST_H_
2#define PLAYLIST_H_
3
4// c++
5#include <utility>
6
7// qt
8#include <QList>
9#include <QMap>
10
11// MythTV
13
14// mythmusic
15#include "musicplayer.h"
16#include "playlistcontainer.h"
17
19class Playlist;
21
22enum InsertPLOption : std::uint8_t
23{
28};
29
30enum PlayPLOption : std::uint8_t
31{
35};
36
38{
41};
42
43using SongList = QList<MusicMetadata::IdType>;
44
45class Playlist : public QObject
46{
47 Q_OBJECT
48
49 public:
50 Playlist(void);
51 ~Playlist() override;
52
53 void setParent(PlaylistContainer *myparent) { m_parent = myparent; }
54
55 void loadPlaylist(const QString& a_name, const QString& a_host);
56 void loadPlaylistByID(int id, const QString& a_host);
57
58 void savePlaylist(const QString& a_name, const QString& a_host);
59
61
62 void describeYourself(void) const; // debugging
63
64 void fillSongsFromSonglist(const QString& songList);
65 int fillSonglistFromQuery(const QString& whereClause,
66 bool removeDuplicates = false,
67 InsertPLOption insertOption = PL_REPLACE,
68 int currentTrackID = 0);
69 int fillSonglistFromSmartPlaylist(const QString& category, const QString& name,
70 bool removeDuplicates = false,
71 InsertPLOption insertOption = PL_REPLACE,
72 int currentTrackID = 0);
73 int fillSonglistFromList(const QList<int> &songList,
74 bool removeDuplicates,
75 InsertPLOption insertOption,
76 int currentTrackID);
77 QString toRawSonglist(bool shuffled = false, bool tracksOnly = false);
78
79
80 MusicMetadata* getSongAt(int pos) const;
81
82 int getTrackCount(void) { return m_songs.count(); }
83
84 void moveTrackUpDown(bool flag, int where_its_at);
85
86 bool checkTrack(MusicMetadata::IdType trackID) const;
87
88 void addTrack(MusicMetadata::IdType trackID, bool update_display);
89
90 int getTrackPosition(MusicMetadata::IdType trackID) { return m_shuffledSongs.indexOf(trackID); }
91
93 void removeAllTracks(void);
94 void removeAllCDTracks(void);
95
96 void copyTracks(Playlist *to_ptr, bool update_display);
97
98 bool hasChanged(void) const { return m_changed; }
99 void changed(void);
100
102 void disableSaves(void) { m_doSave = false; }
103 void enableSaves(void) { m_doSave = true; }
104 bool doSaves(void) const { return m_doSave; }
105
106 QString getName(void) { return m_name; }
107 void setName(const QString& a_name) { m_name = a_name; }
108
110
111 int getID(void) const { return m_playlistid; }
112 void setID(int x) { m_playlistid = x; }
113
114 void getStats(uint *trackCount, std::chrono::seconds *totalLength,
115 uint currentTrack = 0, std::chrono::seconds *playedLength = nullptr) const;
116
117 void resync(void);
118
119#ifdef CD_WRTITING_FIXED
120 void computeSize(double &size_in_MB, double &size_in_sec);
121 int CreateCDMP3(void);
122 int CreateCDAudio(void);
123
124 private slots:
125 void mkisofsData(int fd);
126 void cdrecordData(int fd);
127 void processExit(uint retval);
128 void processExit();
129#endif
130
131 private:
132 MusicMetadata* getRawSongAt(int pos) const;
133 static QString removeItemsFromList(const QString &remove_list, const QString &source_list);
134
136 QString m_name;
137
140
142 bool m_changed {false};
143 bool m_doSave {true};
144#ifdef CD_WRTITING_FIXED
145 MythProgressDialog *m_progress {nullptr};
146 MythSystemLegacy *m_proc {nullptr};
147 uint m_procExitVal {0};
148#endif
149};
150
151#endif
uint32_t IdType
Definition: musicmetadata.h:86
void loadPlaylistByID(int id, const QString &a_host)
Definition: playlist.cpp:585
int getID(void) const
Definition: playlist.h:111
int getTrackPosition(MusicMetadata::IdType trackID)
Definition: playlist.h:90
void setName(const QString &a_name)
Definition: playlist.h:107
void removeAllCDTracks(void)
Definition: playlist.cpp:97
bool doSaves(void) const
Definition: playlist.h:104
MusicMetadata * getRawSongAt(int pos) const
Definition: playlist.cpp:1114
QString getName(void)
Definition: playlist.h:106
QString toRawSonglist(bool shuffled=false, bool tracksOnly=false)
Definition: playlist.cpp:855
bool m_doSave
Definition: playlist.h:143
void copyTracks(Playlist *to_ptr, bool update_display)
Definition: playlist.cpp:43
void resync(void)
make sure all tracks are still valid after a scan
Definition: playlist.cpp:613
bool isActivePlaylist(void)
Definition: playlist.h:109
void setID(int x)
Definition: playlist.h:112
int fillSonglistFromSmartPlaylist(const QString &category, const QString &name, bool removeDuplicates=false, InsertPLOption insertOption=PL_REPLACE, int currentTrackID=0)
Definition: playlist.cpp:898
static QString removeItemsFromList(const QString &remove_list, const QString &source_list)
Definition: playlist.cpp:1081
void enableSaves(void)
Definition: playlist.h:103
void describeYourself(void) const
Definition: playlist.cpp:481
void removeAllTracks(void)
Definition: playlist.cpp:89
int fillSonglistFromQuery(const QString &whereClause, bool removeDuplicates=false, InsertPLOption insertOption=PL_REPLACE, int currentTrackID=0)
Definition: playlist.cpp:686
void changed(void)
Definition: playlist.cpp:990
void fillSongsFromSonglist(const QString &songList)
Definition: playlist.cpp:641
PlaylistContainer * m_parent
Definition: playlist.h:141
int getTrackCount(void)
Definition: playlist.h:82
void setParent(PlaylistContainer *myparent)
Definition: playlist.h:53
void disableSaves(void)
whether any changes should be saved to the DB
Definition: playlist.h:102
SongList m_shuffledSongs
Definition: playlist.h:139
void savePlaylist(const QString &a_name, const QString &a_host)
Definition: playlist.cpp:998
void getStats(uint *trackCount, std::chrono::seconds *totalLength, uint currentTrack=0, std::chrono::seconds *playedLength=nullptr) const
Definition: playlist.cpp:501
void moveTrackUpDown(bool flag, int where_its_at)
Definition: playlist.cpp:130
void loadPlaylist(const QString &a_name, const QString &a_host)
Definition: playlist.cpp:529
~Playlist() override
Definition: playlist.cpp:151
QString m_name
Definition: playlist.h:136
void shuffleTracks(MusicPlayer::ShuffleMode mode)
Definition: playlist.cpp:157
MusicMetadata * getSongAt(int pos) const
Definition: playlist.cpp:1096
bool m_changed
Definition: playlist.h:142
Playlist(void)
Definition: playlist.cpp:146
SongList m_songs
Definition: playlist.h:138
int m_playlistid
Definition: playlist.h:135
int fillSonglistFromList(const QList< int > &songList, bool removeDuplicates, InsertPLOption insertOption, int currentTrackID)
Definition: playlist.cpp:785
void removeTrack(MusicMetadata::IdType trackID)
Definition: playlist.cpp:119
bool hasChanged(void) const
Definition: playlist.h:98
void addTrack(MusicMetadata::IdType trackID, bool update_display)
Given a tracks ID, add that track to this playlist.
Definition: playlist.cpp:63
bool checkTrack(MusicMetadata::IdType trackID) const
Definition: playlist.cpp:38
unsigned int uint
Definition: freesurround.h:24
QList< MusicMetadata::IdType > SongList
Definition: playlist.h:43
PlayPLOption
Definition: playlist.h:31
@ PL_FIRST
Definition: playlist.h:32
@ PL_FIRSTNEW
Definition: playlist.h:33
@ PL_CURRENT
Definition: playlist.h:34
InsertPLOption
Definition: playlist.h:23
@ PL_INSERTAFTERCURRENT
Definition: playlist.h:27
@ PL_INSERTATBEGINNING
Definition: playlist.h:25
@ PL_REPLACE
Definition: playlist.h:24
@ PL_INSERTATEND
Definition: playlist.h:26
static constexpr const char * DEFAULT_PLAYLIST_NAME
PlayPLOption playPLOption
Definition: playlist.h:40
InsertPLOption insertPLOption
Definition: playlist.h:39