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