pianod2
multisource multiuser scriptable networked music player
encapmusic.h
Go to the documentation of this file.
1 
11 #pragma once
12 
13 #include <config.h>
14 
15 #include <string>
16 
17 #include "musictypes.h"
18 #include "retainer.h"
19 
23 private:
25  const Type _type;
26  std::string _artistId;
27  std::string _artist;
28 public:
29  inline EncapsulatedArtist (Media::Source * const owner,
31  : _source (owner), _type (type) { };
32 
33  virtual Type type (void) const override { return _type; };
34  virtual Media::Source * const source (void) const override { return _source; };
35 
36  virtual const std::string &artistId (void) const override { return _artistId; };
37  virtual const std::string &artist (void) const override { return _artist; };
38 
39  inline void artistId (const std::string &a) { _artistId = a; };
40  inline void artistId (const char *a) { if (a) _artistId = a; };
41  inline void artist (const std::string &a) { _artist = a; };
42  inline void artist (const char *a) { if (a) _artist = a; };
43 };
44 
48 public:
50  PersistentArtist (Media::Source * const owner,
51  Type type,
52  const Parsnip::Data &data);
53  virtual Parsnip::Data persist() const;
54 };
55 
56 
60 private:
62  const Type _type;
63  std::string _artistId;
64  std::string _artist;
65 
66  std::string _albumId;
67  std::string _albumTitle;
68  std::string _coverArt;
69 public:
70  inline EncapsulatedAlbum (Media::Source * const owner,
71  Type item_type = Type::Album)
72  : _source (owner), _type (item_type) { };
73 
74  virtual Type type (void) const override { return _type; };
75  virtual Media::Source * const source (void) const override { return _source; };
76 
77  virtual const std::string &artistId (void) const override { return _artistId; };
78  virtual const std::string &artist (void) const override { return _artist; };
79 
80  virtual const std::string &albumId (void) const override { return _albumId; };
81  virtual const std::string &albumTitle (void) const override { return _albumTitle; };
82  virtual const std::string &coverArtUrl (void) const override { return _coverArt; };
83 
84  inline void artistId (const std::string &a) { _artistId = a; };
85  inline void artistId (const char *a) { if (a) _artistId = a; };
86  inline void artist (const std::string &a) { _artist = a; };
87  inline void artist (const char *a) { if (a) _artist = a; };
88 
89  inline void albumId (const std::string &a) { _albumId = a; };
90  inline void albumId (const char *a) { if (a) _albumId = a; };
91  inline void albumTitle (const std::string &t) { _albumTitle = t; };
92  inline void albumTitle (const char *t) { if (t) _albumTitle = t; };
93  inline void coverArtUrl (const std::string &u) { _coverArt = u; };
94  inline void coverArtUrl (const char *u) { if (u) _coverArt = u; };
95 };
96 
100 public:
102  PersistentAlbum (Media::Source * const owner,
103  Type type,
104  const Parsnip::Data &data);
105  virtual Parsnip::Data persist() const;
106 
107 };
108 
110 class EncapsulatedSong : public PianodSong {
111 private:
113  const Type _type;
114  std::string _artistId;
115  std::string _artist;
116 
117  std::string _albumId;
118  std::string _albumTitle;
119  std::string _coverArt;
120 
121  std::string _songId;
122  std::string _title;
123  std::string _genre;
124  std::string _infoUrl;
125  int _duration = 0;
126  int _year = 0;
127  int _trackNumber = 0;
129 
130 public:
132  : _source (owner), _type (type) { };
133 
134  virtual Type type (void) const override { return _type; };
135  virtual Media::Source * const source (void) const override { return _source; };
136 
137  virtual const std::string &songId (void) const override { return _songId; };
138 
139  virtual const std::string &artistId (void) const override { return _artistId; };
140  virtual const std::string &artist (void) const override { return _artist; };
141 
142  virtual const std::string &albumId (void) const override { return _albumId; };
143  virtual const std::string &albumTitle (void) const override { return _albumTitle; };
144  virtual const std::string &coverArtUrl (void) const override { return _coverArt; };
145 
146  virtual const std::string &title (void) const override { return _title; };
147  virtual const std::string &genre (void) const override { return _genre; };
148  virtual const std::string &infoUrl (void) const override { return _infoUrl; };
149  virtual int duration (void) const override { return _duration; };
150  virtual int year (void) const override { return _year; };
151  virtual time_t lastPlayed (void) const { return 0; };
152  virtual int trackNumber (void) const override { return _trackNumber; };
153  virtual PianodPlaylist *playlist (void) const override { return _playlist.get(); };
154 
155  void playlist (PianodPlaylist *play);
156 
157  inline void artistId (const std::string &a) { _artistId = a; };
158  inline void artistId (const char *a) { if (a) _artistId = a; };
159  inline void artist (const std::string &a) { _artist = a; };
160  inline void artist (const char *a) { if (a) _artist = a; };
161 
162  inline void albumId (const std::string &a) { _albumId = a; };
163  inline void albumId (const char *a) { if (a) _albumId = a; };
164  inline void albumTitle (const std::string &t) { _albumTitle = t; };
165  inline void albumTitle (const char *t) { if (t) _albumTitle = t; };
166  inline void coverArtUrl (const std::string &u) { _coverArt = u; };
167  inline void coverArtUrl (const char *u) { if (u) _coverArt = u; };
168 
169  inline void songId (const std::string &i) { _songId = i; };
170  inline void songId (const char *i) { if (i) _songId = i; };
171  inline void title (const std::string &t) { _title = t; };
172  inline void title (const char *t) { if (t) _title = t; };
173  inline void genre (const std::string &g) { _genre = g; };
174  inline void genre (const char *g) { if (g) _genre = g; };
175  inline void infoUrl (const std::string &i) { _infoUrl = i; };
176  inline void infoUrl (const char *i) { if (i) _infoUrl = i; };
177  inline void duration (int d) { _duration = d; };
178  inline void year (int y) { _year = y; };
179  inline void trackNumber (int n) { _trackNumber = n; };
180 
181  virtual RESPONSE_CODE rate (Rating , User *) override {
182  throw CommandError (E_INVALID);
183  };
184  virtual Rating rating (const User *) const override {
185  return Rating::UNRATED;
186  }
187 
188 };
189 
192 public:
194  PersistentSong (Media::Source * const owner,
195  Type type,
196  const Parsnip::Data &data);
197  virtual Parsnip::Data persist() const;
198 };
199 
202 private:
204  const Type _type;
206  std::string _playlistId;
207  std::string _playlistName;
208  std::string _genre;
209 public:
212  : _source (owner), _type (type) { };
213  virtual Type type (void) const override { return _type; };
214  virtual Media::Source * const source (void) const override { return _source; };
215 
216  virtual PlaylistType playlistType (void) const override { return _playlistType; };
217  virtual const std::string &playlistId (void) const override { return _playlistId; };
218  virtual const std::string &playlistName (void) const override { return _playlistName; };
219  virtual const std::string &genre (void) const override { return _genre; };
220 
221 
222  inline void playlistType (PlaylistType p) { _playlistType = p; };
223  inline void playlistId (const std::string &p) { _playlistId = p; };
224  inline void playlistId (const char *p) { if (p) _playlistId = p; };
225  inline void playlistName (const std::string &n) { _playlistName = n; };
226  inline void playlistName (const char * &n) { if (n) _playlistName = n; };
227  inline void genre (const std::string &g) { _genre = g; };
228  inline void genre (const char * &g) { if (g) _genre = g; };
229 };
230 
232 public:
234  PersistentPlaylist (Media::Source * const owner,
235  Type type,
236  const Parsnip::Data &data);
237  virtual Parsnip::Data persist() const;
238 };
239 
242  virtual bool includedInMix (void) const override;
243  virtual void includedInMix (bool include) override;
244  virtual void rename (const std::string &newname) override;
245  virtual void erase () override;
246 public:
248  MetaPlaylist (Media::Source * const owner,
250 };
251 
252 
254 public:
256  PersistentMetaPlaylist (Media::Source * const owner,
257  Type type,
258  const Parsnip::Data &data);
259  virtual Parsnip::Data persist() const;
260 };
Exception for command execution problems.
Definition: fundamentals.h:293
A PianodAlbum that is self-contained, unrelated to artists, songs, or playlists Encapsulated albums m...
Definition: encapmusic.h:59
virtual Type type(void) const override
Return the type letter for a thingie.
Definition: encapmusic.h:74
void albumId(const std::string &a)
Definition: encapmusic.h:89
void artist(const char *a)
Definition: encapmusic.h:87
virtual const std::string & albumTitle(void) const override
Definition: encapmusic.h:81
virtual const std::string & coverArtUrl(void) const override
Definition: encapmusic.h:82
void albumId(const char *a)
Definition: encapmusic.h:90
void artist(const std::string &a)
Definition: encapmusic.h:86
std::string _albumTitle
Definition: encapmusic.h:67
virtual const std::string & artistId(void) const override
Item's artist ID.
Definition: encapmusic.h:77
void artistId(const char *a)
Definition: encapmusic.h:85
void albumTitle(const std::string &t)
Definition: encapmusic.h:91
std::string _albumId
Definition: encapmusic.h:66
void coverArtUrl(const char *u)
Definition: encapmusic.h:94
virtual const std::string & albumId(void) const override
Item's album ID.
Definition: encapmusic.h:80
void coverArtUrl(const std::string &u)
Definition: encapmusic.h:93
std::string _coverArt
Definition: encapmusic.h:68
virtual Media::Source *const source(void) const override
MediaSource from which this thingie originates.
Definition: encapmusic.h:75
virtual const std::string & artist(void) const override
Get artist name.
Definition: encapmusic.h:78
void artistId(const std::string &a)
Definition: encapmusic.h:84
Media::Source *const _source
Definition: encapmusic.h:61
std::string _artistId
Definition: encapmusic.h:63
EncapsulatedAlbum(Media::Source *const owner, Type item_type=Type::Album)
Definition: encapmusic.h:70
std::string _artist
Definition: encapmusic.h:64
void albumTitle(const char *t)
Definition: encapmusic.h:92
const Type _type
Definition: encapmusic.h:62
A PianodArtist that is fully-contained in itself, unrelated to albums, songs, or playlists.
Definition: encapmusic.h:22
void artist(const char *a)
Definition: encapmusic.h:42
void artist(const std::string &a)
Definition: encapmusic.h:41
std::string _artistId
Definition: encapmusic.h:26
virtual Media::Source *const source(void) const override
MediaSource from which this thingie originates.
Definition: encapmusic.h:34
virtual const std::string & artistId(void) const override
Item's artist ID.
Definition: encapmusic.h:36
void artistId(const char *a)
Definition: encapmusic.h:40
void artistId(const std::string &a)
Definition: encapmusic.h:39
virtual Type type(void) const override
Return the type letter for a thingie.
Definition: encapmusic.h:33
EncapsulatedArtist(Media::Source *const owner, Type type=Type::Artist)
Definition: encapmusic.h:29
virtual const std::string & artist(void) const override
Get artist name.
Definition: encapmusic.h:37
Media::Source *const _source
Definition: encapmusic.h:24
const Type _type
Definition: encapmusic.h:25
std::string _artist
Definition: encapmusic.h:27
A PianodPlaylist that is self-contained.
Definition: encapmusic.h:201
Media::Source *const _source
Definition: encapmusic.h:203
void playlistType(PlaylistType p)
Definition: encapmusic.h:222
const Type _type
Definition: encapmusic.h:204
virtual const std::string & playlistId(void) const override
Item's playlist ID.
Definition: encapmusic.h:217
void playlistName(const std::string &n)
Definition: encapmusic.h:225
void genre(const std::string &g)
Definition: encapmusic.h:227
std::string _genre
Definition: encapmusic.h:208
void playlistName(const char *&n)
Definition: encapmusic.h:226
virtual Type type(void) const override
Return the type letter for a thingie.
Definition: encapmusic.h:213
virtual PlaylistType playlistType(void) const override
Mix, everything, transient or single list.
Definition: encapmusic.h:216
virtual const std::string & genre(void) const override
Get genre of this playlist.
Definition: encapmusic.h:219
virtual const std::string & playlistName(void) const override
Name of the playlist.
Definition: encapmusic.h:218
void playlistId(const std::string &p)
Definition: encapmusic.h:223
virtual Media::Source *const source(void) const override
MediaSource from which this thingie originates.
Definition: encapmusic.h:214
std::string _playlistId
Definition: encapmusic.h:206
void genre(const char *&g)
Definition: encapmusic.h:228
std::string _playlistName
Definition: encapmusic.h:207
PlaylistType _playlistType
Definition: encapmusic.h:205
void playlistId(const char *p)
Definition: encapmusic.h:224
EncapsulatedPlaylist(Media::Source *const owner, Type type=Type::Playlist)
Definition: encapmusic.h:210
A PianodSong that is self-contained, unrelated to albums or artists.
Definition: encapmusic.h:110
void coverArtUrl(const std::string &u)
Definition: encapmusic.h:166
virtual RESPONSE_CODE rate(Rating, User *) override
Rate a song.
Definition: encapmusic.h:181
void duration(int d)
Definition: encapmusic.h:177
virtual const std::string & coverArtUrl(void) const override
Definition: encapmusic.h:144
virtual const std::string & artist(void) const override
Get artist name.
Definition: encapmusic.h:140
Retainer< PianodPlaylist * > _playlist
Definition: encapmusic.h:128
void coverArtUrl(const char *u)
Definition: encapmusic.h:167
void albumId(const std::string &a)
Definition: encapmusic.h:162
virtual Rating rating(const User *) const override
Get a song's rating.
Definition: encapmusic.h:184
std::string _title
Definition: encapmusic.h:122
void year(int y)
Definition: encapmusic.h:178
int _year
Definition: encapmusic.h:126
std::string _songId
Definition: encapmusic.h:121
virtual const std::string & genre(void) const override
Get genre of this song.
Definition: encapmusic.h:147
virtual int duration(void) const override
Duration of song in seconds.
Definition: encapmusic.h:149
void genre(const char *g)
Definition: encapmusic.h:174
void artistId(const char *a)
Definition: encapmusic.h:158
virtual const std::string & artistId(void) const override
Item's artist ID.
Definition: encapmusic.h:139
void trackNumber(int n)
Definition: encapmusic.h:179
virtual int trackNumber(void) const override
Get track number (sequence number within an album/original media).
Definition: encapmusic.h:152
std::string _artistId
Definition: encapmusic.h:114
std::string _genre
Definition: encapmusic.h:123
virtual const std::string & infoUrl(void) const override
Provide a URL with additional info.
Definition: encapmusic.h:148
void albumTitle(const char *t)
Definition: encapmusic.h:165
void albumId(const char *a)
Definition: encapmusic.h:163
void artistId(const std::string &a)
Definition: encapmusic.h:157
EncapsulatedSong(Media::Source *const owner, Type type=Type::Song)
Definition: encapmusic.h:131
void title(const char *t)
Definition: encapmusic.h:172
void genre(const std::string &g)
Definition: encapmusic.h:173
std::string _coverArt
Definition: encapmusic.h:119
std::string _albumTitle
Definition: encapmusic.h:118
int _trackNumber
Definition: encapmusic.h:127
virtual time_t lastPlayed(void) const
Definition: encapmusic.h:151
virtual const std::string & albumTitle(void) const override
Definition: encapmusic.h:143
void title(const std::string &t)
Definition: encapmusic.h:171
void songId(const char *i)
Definition: encapmusic.h:170
virtual const std::string & title(void) const override
Get the song's title.
Definition: encapmusic.h:146
virtual Type type(void) const override
Return the type letter for a thingie.
Definition: encapmusic.h:134
virtual int year(void) const override
Year of release of song.
Definition: encapmusic.h:150
std::string _infoUrl
Definition: encapmusic.h:124
void artist(const std::string &a)
Definition: encapmusic.h:159
void infoUrl(const char *i)
Definition: encapmusic.h:176
virtual PianodPlaylist * playlist(void) const override
Get a playlist instance.
Definition: encapmusic.h:153
std::string _artist
Definition: encapmusic.h:115
virtual const std::string & songId(void) const override
Definition: encapmusic.h:137
virtual const std::string & albumId(void) const override
Item's album ID.
Definition: encapmusic.h:142
int _duration
Definition: encapmusic.h:125
void artist(const char *a)
Definition: encapmusic.h:160
void infoUrl(const std::string &i)
Definition: encapmusic.h:175
const Type _type
Definition: encapmusic.h:113
void songId(const std::string &i)
Definition: encapmusic.h:169
std::string _albumId
Definition: encapmusic.h:117
Media::Source *const _source
Definition: encapmusic.h:112
void albumTitle(const std::string &t)
Definition: encapmusic.h:164
virtual Media::Source *const source(void) const override
MediaSource from which this thingie originates.
Definition: encapmusic.h:135
Base class that wraps any audio source, such as Pandora, Spotify, or local music.
Definition: mediaunit.h:68
A faux playlist suitable for mix or everything playlists.
Definition: encapmusic.h:241
MetaPlaylist(Media::Source *const owner, PianodPlaylist::PlaylistType type)
Definition: encapmusic.cpp:154
virtual void erase() override
Definition: encapmusic.cpp:178
virtual void rename(const std::string &newname) override
Definition: encapmusic.cpp:174
virtual bool includedInMix(void) const override
Definition: encapmusic.cpp:165
Type
Access levels for an object.
Definition: fundamentals.h:355
Generic data type.
Definition: parsnip.h:81
A PianodAlbum that is self-contained, unrelated to artists, songs, or playlists Encapsulated albums m...
Definition: encapmusic.h:99
virtual Parsnip::Data persist() const
Assemble the song details for serialization.
Definition: encapmusic.cpp:59
PersistentAlbum(Media::Source *const owner, Type type, const Parsnip::Data &data)
Reconstruct a song from our persistence format.
Definition: encapmusic.cpp:49
A PianodArtist that is fully-contained in itself, unrelated to albums, songs, or playlists.
Definition: encapmusic.h:47
PersistentArtist(Media::Source *const owner, Type type, const Parsnip::Data &data)
Reconstruct a song from our persistence format.
Definition: encapmusic.cpp:28
virtual Parsnip::Data persist() const
Assemble the song details for serialization.
Definition: encapmusic.cpp:35
Definition: encapmusic.h:253
PersistentMetaPlaylist(Media::Source *const owner, Type type, const Parsnip::Data &data)
Reconstruct a song from our persistence format.
Definition: encapmusic.cpp:184
virtual Parsnip::Data persist() const
Assemble the song details for serialization.
Definition: encapmusic.cpp:190
Definition: encapmusic.h:231
virtual Parsnip::Data persist() const
Assemble the song details for serialization.
Definition: encapmusic.cpp:146
PersistentPlaylist(Media::Source *const owner, Type type, const Parsnip::Data &data)
Reconstruct a song from our persistence format.
Definition: encapmusic.cpp:140
A PianodSong that is self-contained, unrelated to albums or artists.
Definition: encapmusic.h:191
PersistentSong(Media::Source *const owner, Type type, const Parsnip::Data &data)
Reconstruct a song from our persistence format.
Definition: encapmusic.cpp:76
virtual Parsnip::Data persist() const
Assemble the song details for serialization.
Definition: encapmusic.cpp:92
Base class for albums, these are also MusicThingies and artists.
Definition: musictypes.h:307
Base class for artists, derived from MusicThingies.
Definition: musictypes.h:272
Base class for playlists, but still a MusicThingie.
Definition: musictypes.h:416
PlaylistType
Definition: musictypes.h:418
@ SINGLE
Definition: musictypes.h:419
Base class for songs, these are also MusicThingies, artists and albums.
Definition: musictypes.h:339
Media::Player * play(const AudioSettings &audio)
Play the song.
Definition: musictypes.cpp:646
value_type * get() const
Get the pointer itself.
Definition: retainer.h:128
Data about each user.
Definition: user.h:53
enum server_status_t RESPONSE_CODE
@ E_INVALID
Definition: fundamentals.h:192
Playlist / Artist / Album / Song data types.
const char * Song
Definition: musickeys.cpp:69
const char * Playlist
Definition: musickeys.cpp:66
const char * Album
Definition: musickeys.cpp:68
const char * Artist
Definition: musickeys.cpp:67
Rating
Discrete ratings values.
Definition: ratings.h:24
@ UNRATED
Unrated/no rating found, 0 enum.
Smart pointers for music thingie types.