1 /*
2  *  Copyright (C) 2005-2018 Team Kodi
3  *  This file is part of Kodi - https://kodi.tv
4  *
5  *  SPDX-License-Identifier: GPL-2.0-or-later
6  *  See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "threads/CriticalSection.h"
12 #include "utils/IArchivable.h"
13 #include "utils/ISerializable.h"
14 
15 #include <deque>
16 #include <string>
17 
18 namespace PVR
19 {
20 
21 class CPVRRadioRDSInfoTag final : public IArchivable, public ISerializable
22 {
23 public:
24   CPVRRadioRDSInfoTag();
25 
26   bool operator ==(const CPVRRadioRDSInfoTag& right) const;
27   bool operator !=(const CPVRRadioRDSInfoTag& right) const;
28 
29   void Archive(CArchive& ar) override;
30   void Serialize(CVariant& value) const override;
31 
32   void Clear();
33   void ResetSongInformation();
34 
35   /**! Basic RDS related information */
36   void SetSpeechActive(bool active);
37   void SetLanguage(const std::string& strLanguage);
38   const std::string& GetLanguage() const;
39   void SetCountry(const std::string& strCountry);
40   const std::string& GetCountry() const;
41 
42   /**! RDS Radiotext related information */
43   void SetTitle(const std::string& strTitle);
44   void SetBand(const std::string& strBand);
45   void SetArtist(const std::string& strArtist);
46   void SetComposer(const std::string& strComposer);
47   void SetConductor(const std::string& strConductor);
48   void SetAlbum(const std::string& strAlbum);
49   void SetComment(const std::string& strComment);
50   void SetAlbumTrackNumber(int track);
51 
52   const std::string& GetTitle() const;
53   const std::string& GetBand() const;
54   const std::string& GetArtist() const;
55   const std::string& GetComposer() const;
56   const std::string& GetConductor() const;
57   const std::string& GetAlbum() const;
58   const std::string& GetComment() const;
59   int GetAlbumTrackNumber() const;
60 
61   void SetProgStation(const std::string& strProgStation);
62   void SetProgStyle(const std::string& strProgStyle);
63   void SetProgHost(const std::string& strProgHost);
64   void SetProgWebsite(const std::string& strWebsite);
65   void SetProgNow(const std::string& strNow);
66   void SetProgNext(const std::string& strNext);
67   void SetPhoneHotline(const std::string& strHotline);
68   void SetEMailHotline(const std::string& strHotline);
69   void SetPhoneStudio(const std::string& strPhone);
70   void SetEMailStudio(const std::string& strEMail);
71   void SetSMSStudio(const std::string& strSMS);
72 
73   const std::string& GetProgStation() const;
74   const std::string& GetProgStyle() const;
75   const std::string& GetProgHost() const;
76   const std::string& GetProgWebsite() const;
77   const std::string& GetProgNow() const;
78   const std::string& GetProgNext() const;
79   const std::string& GetPhoneHotline() const;
80   const std::string& GetEMailHotline() const;
81   const std::string& GetPhoneStudio() const;
82   const std::string& GetEMailStudio() const;
83   const std::string& GetSMSStudio() const;
84 
85   void SetInfoNews(const std::string& strNews);
86   const std::string GetInfoNews() const;
87 
88   void SetInfoNewsLocal(const std::string& strNews);
89   const std::string GetInfoNewsLocal() const;
90 
91   void SetInfoSport(const std::string& strSport);
92   const std::string GetInfoSport() const;
93 
94   void SetInfoStock(const std::string& strSport);
95   const std::string GetInfoStock() const;
96 
97   void SetInfoWeather(const std::string& strWeather);
98   const std::string GetInfoWeather() const;
99 
100   void SetInfoHoroscope(const std::string& strHoroscope);
101   const std::string GetInfoHoroscope() const;
102 
103   void SetInfoCinema(const std::string& strCinema);
104   const std::string GetInfoCinema() const;
105 
106   void SetInfoLottery(const std::string& strLottery);
107   const std::string GetInfoLottery() const;
108 
109   void SetInfoOther(const std::string& strOther);
110   const std::string GetInfoOther() const;
111 
112   void SetEditorialStaff(const std::string& strEditorialStaff);
113   const std::string GetEditorialStaff() const;
114 
115   void SetRadioStyle(const std::string& style);
116   const std::string GetRadioStyle() const;
117 
118   void SetPlayingRadiotext(bool yesNo);
119   bool IsPlayingRadiotext() const;
120 
121   void SetPlayingRadiotextPlus(bool yesNo);
122   bool IsPlayingRadiotextPlus() const;
123 
124 private:
125   CPVRRadioRDSInfoTag(const CPVRRadioRDSInfoTag& tag) = delete;
126   const CPVRRadioRDSInfoTag& operator =(const CPVRRadioRDSInfoTag& tag) = delete;
127 
128   static std::string Trim(const std::string& value);
129 
130   mutable CCriticalSection m_critSection;
131 
132   bool m_RDS_SpeechActive;
133 
134   std::string m_strLanguage;
135   std::string m_strCountry;
136   std::string m_strTitle;
137   std::string m_strBand;
138   std::string m_strArtist;
139   std::string m_strComposer;
140   std::string m_strConductor;
141   std::string m_strAlbum;
142   std::string m_strComment;
143   int m_iAlbumTracknumber;
144   std::string m_strRadioStyle;
145 
146   class Info
147   {
148   public:
149     Info() = default;
150 
151     bool operator==(const Info& right) const;
152 
153     void Clear();
154     void Add(const std::string& text);
GetText()155     const std::string& GetText() const { return m_infoText; }
156 
157   private:
158     std::deque<std::string> m_data;
159     std::string m_infoText;
160   };
161 
162   Info m_strInfoNews;
163   Info m_strInfoNewsLocal;
164   Info m_strInfoSport;
165   Info m_strInfoStock;
166   Info m_strInfoWeather;
167   Info m_strInfoLottery;
168   Info m_strInfoOther;
169   Info m_strInfoHoroscope;
170   Info m_strInfoCinema;
171   Info m_strEditorialStaff;
172 
173   std::string m_strProgStyle;
174   std::string m_strProgHost;
175   std::string m_strProgStation;
176   std::string m_strProgWebsite;
177   std::string m_strProgNow;
178   std::string m_strProgNext;
179   std::string m_strPhoneHotline;
180   std::string m_strEMailHotline;
181   std::string m_strPhoneStudio;
182   std::string m_strEMailStudio;
183   std::string m_strSMSStudio;
184 
185   bool m_bHaveRadiotext;
186   bool m_bHaveRadiotextPlus;
187 };
188 }
189