pianod2
multisource multiuser scriptable networked music player
pandoratypes.h
Go to the documentation of this file.
1 
9 #pragma once
10 
11 #include <config.h>
12 
13 #include <string>
14 #include <unordered_map>
15 
16 #include <parsnip/parsnip.h>
17 
18 #include "fundamentals.h"
19 #include "musictypes.h"
20 #include "encapmusic.h"
21 #include "retainer.h"
22 
23 namespace Pandora {
24  class Source;
25  class Station;
26 
27  extern const Rating ThumbsDown;
28  extern const Rating ThumbsUp;
29 
30  namespace Key {
31  extern const char *TrackToken;
32  }
33 
34  std::string pandora_to_music_id (const std::string &musicId);
35 
37  class Song : public PersistentSong {
38  protected:
39  inline Source * const pandora() const {
40  return reinterpret_cast<Source * const > (source());
41  }
42 
43  public:
44  // Constructors
45  Song (Source * const owner, MusicThingie::Type type, const Parsnip::Data &message);
46 
47  // API support
48  virtual RatingScheme ratingScheme (void) const override;
49  virtual RESPONSE_CODE rate (Rating value, User *user) override;
50  virtual Rating rating (const User *user) const override;
51 
52  protected:
53  Song (Source * const owner);
54  };
55 
57  class PlayableSong : public Song {
58  friend Source;
59  friend Song;
60 
61  protected:
62  inline Source * const pandora() const {
63  return reinterpret_cast<Source * const > (source());
64  }
65 
66  private:
67  std::string audio_url;
68  std::string track_token;
69  double audio_gain;
70 
71  public:
72  PlayableSong (Source * const owner, const Parsnip::Data &message);
73  PlayableSong (Source * const owner, const Parsnip::Data &message, bool persist_flag);
74 
75 
76  // API support
77  virtual RESPONSE_CODE rateOverplayed (User *) override;
78  virtual bool canSkip (time_t *whenAllowed = nullptr) override;
79  virtual bool canQueue() const override;
80 
81  inline const std::string &trackToken() const {
82  return track_token;
83  }
84  };
85 
89  class SongRating : public EncapsulatedSong {
90  friend class Station;
92  public:
93  SongRating (Station *owner, const Parsnip::Data &message);
94  virtual RatingScheme ratingScheme (void) const override;
95  virtual RESPONSE_CODE rate (Rating value, User *user) override;
96  virtual Rating rating (const User *user) const override;
97  };
98 
100  class SongSeed : public EncapsulatedSong {
101  friend class Station;
102  public:
103  SongSeed (Station *owner, const Parsnip::Data &message);
104  };
105 
107  class SongSuggestion : public Song {
108  public:
109  SongSuggestion (Source * const owner, const Parsnip::Data &message);
110  };
111 
112  class Advert : public EncapsulatedSong {
113  friend class Source;
114  private:
116  double audio_gain;
117  std::string audio_url;
118  std::vector<std::string> ad_tokens;
119  public:
120  Advert (Source * const owner, const Parsnip::Data &message, Station *station);
121  static Advert *construct (Station *station, const std::string &track_info);
122 
123  // API support
124  virtual RatingScheme ratingScheme (void) const override;
125  virtual RESPONSE_CODE rate (Rating value, User *user) override;
126  virtual Rating rating (const User *user) const override;
127  virtual RESPONSE_CODE rateOverplayed (User *) override;
128  virtual bool canSkip (time_t *whenAllowed = nullptr) override;
129  virtual bool mustPlay () const override;
130  };
131 
133  class Artist : public PersistentArtist {
134  protected:
135  inline Source * const pandora() const {
136  return reinterpret_cast<Source * const > (source());
137  }
138  public:
139  Artist (Source * const owner);
140  Artist (Source * const owner, MusicThingie::Type type, const Parsnip::Data &message);
141  };
142 
144  class ArtistSuggestion : public Artist {
145  public:
146  ArtistSuggestion (Source * const owner, const Parsnip::Data &message);
147  };
148 
151  friend class Station;
152  public:
153  ArtistSeed (Source *const owner, const Parsnip::Data &message);
154  };
155 
158  public:
159  GenreSuggestion (Source * const owner, const Parsnip::Data &message);
160  GenreSuggestion (Source * const owner, MusicThingie::Type type, const Parsnip::Data &message);
161  };
162 
164  class GenreSeed : public MetaPlaylist {
165  friend class Station;
166  public:
167  GenreSeed (Source *owner, const Parsnip::Data &message);
168  };
169 
170 } // namespace Pandora
171 
A PianodArtist that is fully-contained in itself, unrelated to albums, songs, or playlists.
Definition: encapmusic.h:22
virtual Media::Source *const source(void) const override
MediaSource from which this thingie originates.
Definition: encapmusic.h:34
virtual Type type(void) const override
Return the type letter for a thingie.
Definition: encapmusic.h:33
virtual Type type(void) const override
Return the type letter for a thingie.
Definition: encapmusic.h:213
A PianodSong that is self-contained, unrelated to albums or artists.
Definition: encapmusic.h:110
virtual Type type(void) const override
Return the type letter for a thingie.
Definition: encapmusic.h:134
virtual Media::Source *const source(void) const override
MediaSource from which this thingie originates.
Definition: encapmusic.h:135
A faux playlist suitable for mix or everything playlists.
Definition: encapmusic.h:241
Type
Definition: musictypes.h:86
Definition: pandoratypes.h:112
Advert(Source *const owner, const Parsnip::Data &message, Station *station)
Definition: pandoratypes.cpp:275
std::string audio_url
Definition: pandoratypes.h:117
double audio_gain
Definition: pandoratypes.h:116
Retainer< EncapsulatedPlaylist * > ad_station
Definition: pandoratypes.h:115
virtual RESPONSE_CODE rate(Rating value, User *user) override
Rate a song.
Definition: pandoratypes.cpp:296
static Advert * construct(Station *station, const std::string &track_info)
Definition: pandoratypes.cpp:269
virtual RatingScheme ratingScheme(void) const override
Definition: pandoratypes.cpp:292
virtual Rating rating(const User *user) const override
Get a song's rating.
Definition: pandoratypes.cpp:301
virtual RESPONSE_CODE rateOverplayed(User *) override
Definition: pandoratypes.cpp:306
virtual bool canSkip(time_t *whenAllowed=nullptr) override
Check for permission to skip a song.
Definition: pandoratypes.cpp:310
virtual bool mustPlay() const override
Mark songs (err, adverts) as must-play; they can't be skipped over even when playlist selections are ...
Definition: pandoratypes.cpp:314
std::vector< std::string > ad_tokens
Definition: pandoratypes.h:118
Class for Pandora artists. Constructed from annotations.
Definition: pandoratypes.h:133
Source *const pandora() const
Definition: pandoratypes.h:135
Artist(Source *const owner)
Definition: pandoratypes.cpp:322
A artist contructed from station seed information.
Definition: pandoratypes.h:150
ArtistSeed(Source *const owner, const Parsnip::Data &message)
Construct an artist from a Pandora annotation message.
Definition: pandoratypes.cpp:331
An artist contructed from search results.
Definition: pandoratypes.h:144
ArtistSuggestion(Source *const owner, const Parsnip::Data &message)
Definition: pandoratypes.cpp:336
A class for Pandora genre seeds.
Definition: pandoratypes.h:164
GenreSeed(Source *owner, const Parsnip::Data &message)
Construct a genre seed from seed information.
Definition: pandoratypes.cpp:367
A genre constructed from a suggestion.
Definition: pandoratypes.h:157
GenreSuggestion(Source *const owner, const Parsnip::Data &message)
Construct a genre suggestion from search/annotation result.
Definition: pandoratypes.cpp:348
Playable song: a song with playback information.
Definition: pandoratypes.h:57
Source *const pandora() const
Definition: pandoratypes.h:62
virtual RESPONSE_CODE rateOverplayed(User *) override
Definition: pandoratypes.cpp:167
virtual bool canSkip(time_t *whenAllowed=nullptr) override
Determine if a skip is allowed, and if so, record one.
Definition: pandoratypes.cpp:180
double audio_gain
Definition: pandoratypes.h:69
friend Song
Definition: pandoratypes.h:59
PlayableSong(Source *const owner, const Parsnip::Data &message)
Construct a Song from a Pandora annotation message.
Definition: pandoratypes.cpp:141
friend Source
Definition: pandoratypes.h:58
virtual bool canQueue() const override
Indicate if specific item can be queued/requested.
Definition: pandoratypes.cpp:202
std::string track_token
Definition: pandoratypes.h:68
PlayableSong(Source *const owner, const Parsnip::Data &message, bool persist_flag)
std::string audio_url
Definition: pandoratypes.h:67
const std::string & trackToken() const
Definition: pandoratypes.h:81
Class for Pandora songs. Constructed from annotations.
Definition: pandoratypes.h:37
virtual RESPONSE_CODE rate(Rating value, User *user) override
Rate a song.
Definition: pandoratypes.cpp:70
virtual RatingScheme ratingScheme(void) const override
Definition: pandoratypes.cpp:66
Source *const pandora() const
Definition: pandoratypes.h:39
Song(Source *const owner, MusicThingie::Type type, const Parsnip::Data &message)
Restore a song from the persistence file.
Definition: pandoratypes.cpp:55
virtual Rating rating(const User *user) const override
Get a song's rating.
Definition: pandoratypes.cpp:109
A song that contains rating information.
Definition: pandoratypes.h:89
virtual RESPONSE_CODE rate(Rating value, User *user) override
Rate a song.
Definition: pandoratypes.cpp:238
virtual Rating rating(const User *user) const override
Get a song's rating.
Definition: pandoratypes.cpp:261
virtual RatingScheme ratingScheme(void) const override
Definition: pandoratypes.cpp:234
SongRating(Station *owner, const Parsnip::Data &message)
Construct a Song from a list of station feedback.
Definition: pandoratypes.cpp:225
Rating song_rating
Definition: pandoratypes.h:91
A song contructed from station seed information.
Definition: pandoratypes.h:100
SongSeed(Station *owner, const Parsnip::Data &message)
Construct a Song from a station seed list.
Definition: pandoratypes.cpp:213
A song constructed from a suggestion.
Definition: pandoratypes.h:107
SongSuggestion(Source *const owner, const Parsnip::Data &message)
Definition: pandoratypes.cpp:128
Definition: pandora.h:44
Definition: pandorastation.h:77
Generic data type.
Definition: parsnip.h:81
A PianodArtist that is fully-contained in itself, unrelated to albums, songs, or playlists.
Definition: encapmusic.h:47
Definition: encapmusic.h:253
A PianodSong that is self-contained, unrelated to albums or artists.
Definition: encapmusic.h:191
Data about each user.
Definition: user.h:53
Playlist / Artist / Album / Song datatypes that are self-implemented.
Essential data structures and support.
enum server_status_t RESPONSE_CODE
Playlist / Artist / Album / Song data types.
uint32_t value
Definition: audiooutput.cpp:68
Definition: musiccache.cpp:18
const char * Source
Definition: pandoratypes.h:113
const char * TrackToken
Definition: pandoratypes.cpp:28
Pandora source, player and related datatype specializations.
Definition: pandora.h:32
const Rating ThumbsDown
Rating value for negative Pandora feedback.
Definition: pandoratypes.cpp:25
const Rating ThumbsUp
Rating value for positive Pandora feedback.
Definition: pandoratypes.cpp:26
std::string pandora_to_music_id(const std::string &musicId)
Parsnip serialization.
Rating
Discrete ratings values.
Definition: ratings.h:24
@ UNRATED
Unrated/no rating found, 0 enum.
RatingScheme
Rules of who may rate an object.
Definition: ratings.h:17
Smart pointers for music thingie types.