MythTV  master
lyricsdata.h
Go to the documentation of this file.
1 #ifndef LYRICSDATA_H_
2 #define LYRICSDATA_H_
3 
4 // C/C++
5 #include <cstdint>
6 #include <utility>
7 
8 // qt
9 #include <QObject>
10 
11 // MythTV
12 #include "libmythbase/mythdate.h"
15 
16 class LyricsData;
17 class TestLyrics;
18 
20 {
21  public:
22  LyricsLine() = default;
23  LyricsLine(std::chrono::milliseconds time, QString lyric) :
24  m_time(time), m_lyric(std::move(lyric)) { }
25 
26  std::chrono::milliseconds m_time {0ms};
27  QString m_lyric;
28 
29  QString toString(bool syncronized)
30  {
31  if (syncronized)
32  return formatTime() + m_lyric;
33 
34  return m_lyric;
35  }
36 
37  private:
38  QString formatTime(void) const
39  {
40  QString timestr = MythDate::formatTime(m_time,"mm:ss.zz");
41  return QString("[%1]").arg(timestr);
42  }
43 };
44 
45 using LyricsLineMap = QMap<std::chrono::milliseconds, LyricsLine*>;
46 
47 class META_PUBLIC LyricsData : public QObject
48 {
49  Q_OBJECT
50 
51  friend class TestLyrics;
52 
53  public:
54  LyricsData() = default;
55  explicit LyricsData(MusicMetadata *parent)
56  : m_parent(parent) {}
57  LyricsData(MusicMetadata *parent, QString grabber, QString artist,
58  QString album, QString title, bool syncronized)
59  : m_parent(parent), m_grabber(std::move(grabber)),
60  m_artist(std::move(artist)), m_album(std::move(album)),
61  m_title(std::move(title)), m_syncronized(syncronized) {}
62  ~LyricsData() override;
63 
64  QString grabber(void) { return m_grabber; }
65  void setGrabber(const QString &grabber) { m_grabber = grabber; }
66 
67  QString artist(void) { return m_artist; }
68  void setArtist(const QString &artist) { m_artist = artist; }
69 
70  QString album(void) { return m_album; }
71  void setAlbum(const QString &album) { m_album = album; }
72 
73  QString title(void) { return m_title; }
74  void setTitle(const QString &title) { m_title = title; }
75 
76  LyricsLineMap* lyrics(void) { return &m_lyricsMap; }
77  void setLyrics(const QStringList &lyrics);
78 
79  bool syncronized(void) const { return m_syncronized; }
80  void setSyncronized(bool syncronized ) { m_syncronized = syncronized; }
81 
82  bool changed(void) const { return m_changed; }
83  void setChanged(bool changed) { m_changed = changed; }
84 
85  enum Status : std::uint8_t
86  {
87  STATUS_NOTLOADED = 0, // not looked for any lyrics yet
88  STATUS_SEARCHING, // search is taking place
89  STATUS_FOUND, // search completed and some lyrics have been found
90  STATUS_NOTFOUND // search completed but no lyrics have been found
91  };
92 
93  Status getStatus(void) { return m_status; }
94 
95  void clear(void);
96  void clearLyrics(void);
97  void findLyrics(const QString &grabber);
98  void save(void);
99 
100  void customEvent(QEvent *event) override; // QObject
101 
102  signals:
103  void statusChanged(LyricsData::Status status, const QString &message);
104 
105  private:
106  void loadLyrics(const QString &xmlData);
107  QString createLyricsXML(void);
108 
110 
111  MusicMetadata *m_parent {nullptr};
112 
113  Status m_status {STATUS_NOTLOADED};
114 
115  QString m_grabber;
116  QString m_artist;
117  QString m_album;
118  QString m_title;
119  bool m_syncronized {false};
120  bool m_changed {false};
121 };
122 
124 
125 #endif
LyricsLineMap
QMap< std::chrono::milliseconds, LyricsLine * > LyricsLineMap
Definition: lyricsdata.h:45
LyricsData::getStatus
Status getStatus(void)
Definition: lyricsdata.h:93
LyricsData::lyrics
LyricsLineMap * lyrics(void)
Definition: lyricsdata.h:76
LyricsData::m_grabber
QString m_grabber
Definition: lyricsdata.h:115
LyricsData::STATUS_SEARCHING
@ STATUS_SEARCHING
Definition: lyricsdata.h:88
LyricsData::setArtist
void setArtist(const QString &artist)
Definition: lyricsdata.h:68
MythDate::formatTime
QString formatTime(std::chrono::milliseconds msecs, QString fmt)
Format a milliseconds time value.
Definition: mythdate.cpp:242
LyricsData::setAlbum
void setAlbum(const QString &album)
Definition: lyricsdata.h:71
LyricsLine::formatTime
QString formatTime(void) const
Definition: lyricsdata.h:38
MusicMetadata
Definition: musicmetadata.h:80
mythmetaexp.h
LyricsData::m_artist
QString m_artist
Definition: lyricsdata.h:116
LyricsLine::LyricsLine
LyricsLine(std::chrono::milliseconds time, QString lyric)
Definition: lyricsdata.h:23
mythdate.h
LyricsLine::m_lyric
QString m_lyric
Definition: lyricsdata.h:27
Q_DECLARE_METATYPE
Q_DECLARE_METATYPE(std::chrono::seconds)
LyricsLine
Definition: lyricsdata.h:19
LyricsData::setGrabber
void setGrabber(const QString &grabber)
Definition: lyricsdata.h:65
LyricsData::STATUS_FOUND
@ STATUS_FOUND
Definition: lyricsdata.h:89
LyricsData::changed
bool changed(void) const
Definition: lyricsdata.h:82
clear
static void clear(SettingsMap &cache, SettingsMap &overrides, const QString &myKey)
Definition: mythdb.cpp:949
LyricsData::setSyncronized
void setSyncronized(bool syncronized)
Definition: lyricsdata.h:80
LyricsData::Status
Status
Definition: lyricsdata.h:85
LyricsData
Definition: lyricsdata.h:47
LyricsData::m_album
QString m_album
Definition: lyricsdata.h:117
LyricsData::syncronized
bool syncronized(void) const
Definition: lyricsdata.h:79
LyricsData::setChanged
void setChanged(bool changed)
Definition: lyricsdata.h:83
LyricsData::artist
QString artist(void)
Definition: lyricsdata.h:67
LyricsData::title
QString title(void)
Definition: lyricsdata.h:73
LyricsData::m_lyricsMap
LyricsLineMap m_lyricsMap
Definition: lyricsdata.h:109
LyricsData::LyricsData
LyricsData(MusicMetadata *parent)
Definition: lyricsdata.h:55
LyricsData::grabber
QString grabber(void)
Definition: lyricsdata.h:64
LyricsData::setTitle
void setTitle(const QString &title)
Definition: lyricsdata.h:74
LyricsData::LyricsData
LyricsData(MusicMetadata *parent, QString grabber, QString artist, QString album, QString title, bool syncronized)
Definition: lyricsdata.h:57
LyricsData::m_title
QString m_title
Definition: lyricsdata.h:118
LyricsLine::toString
QString toString(bool syncronized)
Definition: lyricsdata.h:29
LyricsData::album
QString album(void)
Definition: lyricsdata.h:70
META_PUBLIC
#define META_PUBLIC
Definition: mythmetaexp.h:9
musicmetadata.h