MythTV master
cdrip.h
Go to the documentation of this file.
1#ifndef CDRIP_H_
2#define CDRIP_H_
3
4// C++
5#include <utility>
6
7// qt
8#include <QCoreApplication>
9#include <QEvent>
10#include <QVector>
11
12// MythTV
13#include <libmythbase/mthread.h>
16
17class MythUIText;
18class MythUITextEdit;
19class MythUIImage;
20class MythUIButton;
22class MythUICheckBox;
23
24class CdDecoder;
25class Encoder;
26class Ripper;
27
29{
30 public:
31 explicit CDScannerThread(Ripper *ripper)
32 : MThread("CDScanner"), m_parent(ripper) {}
33
34 protected:
35 void run() override; // MThread
36
37 private:
38 Ripper *m_parent {nullptr};
39};
40
42{
43 public:
44 explicit CDEjectorThread(Ripper *ripper)
45 : MThread("CDEjector"), m_parent(ripper) {}
46
47 protected:
48 void run() override; // MThread
49
50 private:
51 Ripper *m_parent {nullptr};
52};
53
55{
56 MusicMetadata *metadata { nullptr };
57 bool active { false };
58 std::chrono::milliseconds length { 0 };
59 bool isNew { false };
60};
61
63
64class RipStatus;
65
67{
69
70 public:
71 CDRipperThread(RipStatus *parent, QString device,
72 QVector<RipTrack*> *tracks, int quality);
73 ~CDRipperThread() override;
74
75 void cancel(void);
76
77 protected:
78 void run(void) override; // MThread
79
80 private:
81 int ripTrack(QString &cddevice, Encoder *encoder, int tracknum);
82
83 bool isCancelled(void) const;
84
85 RipStatus *m_parent {nullptr};
86 bool m_quit {false};
87 QString m_cdDevice;
89 QVector<RipTrack*> *m_tracks {nullptr};
90
91 long int m_totalSectors {0};
92 long int m_totalSectorsDone {0};
93
96
98
99};
100
101class Ripper : public MythScreenType
102{
103 Q_OBJECT
104 public:
105 Ripper(MythScreenStack *parent, QString device);
106 ~Ripper(void) override;
107
108 bool Create(void) override; // MythScreenType
109 bool keyPressEvent(QKeyEvent *event) override; // MythScreenType
110
111 bool somethingWasRipped() const;
112 void scanCD(void);
113 void ejectCD(void);
114
115 void ShowMenu(void) override; // MythScreenType
116
117 protected:
118 void customEvent(QEvent *event) override; // MythUIType
119
120 protected slots:
121 void startRipper(void);
122 void startScanCD(void);
123 void startEjectCD(void);
124 void artistChanged(void);
125 void albumChanged(void);
126 void genreChanged(void);
127 void yearChanged(void);
128 void compilationChanged(bool state);
130 void searchArtist(void) const;
131 void searchAlbum(void) const;
132 void searchGenre(void);
133 void setArtist(const QString& artist);
134 void setAlbum(const QString& album);
135 void setGenre(const QString& genre);
136 void RipComplete(bool result);
139 void EjectFinished(void);
140 void ScanFinished(void);
141 void metadataChanged(void);
142 void showEditMetadataDialog(void);
143 void chooseBackend(void) const;
144 void setSaveHost(const QString& host);
145
146 signals:
147 void ripFinished(void);
148
149 private:
150 bool deleteExistingTrack(RipTrack *track);
151 void deleteAllExistingTracks(void);
152 void updateTrackList(void);
153 void updateTrackLengths(void);
154 void toggleTrackActive(RipTrack *track);
155 void ShowConflictMenu(RipTrack *track);
156
158
160
165
167
170
177
178 QVector<RipTrack*> *m_tracks {nullptr};
179
180 QString m_albumName;
182 QString m_genreName;
183 QString m_year;
184 QStringList m_searchList;
187
188 QString m_cdDevice;
189
192};
193
194
195class RipStatusEvent : public QEvent
196{
197 public:
198 RipStatusEvent(Type type, int val) :
199 QEvent(type), m_text(""), m_value(val) {}
200 RipStatusEvent(Type type, QString val) :
201 QEvent(type), m_text(std::move(val)) {}
202 ~RipStatusEvent() override = default;
203
204 QString m_text;
205 int m_value {-1};
206
207 static const Type kTrackTextEvent;
208 static const Type kOverallTextEvent;
209 static const Type kStatusTextEvent;
210 static const Type kTrackProgressEvent;
211 static const Type kTrackPercentEvent;
212 static const Type kTrackStartEvent;
213 static const Type kOverallProgressEvent;
214 static const Type kOverallPercentEvent;
215 static const Type kOverallStartEvent;
216 static const Type kCopyStartEvent;
217 static const Type kCopyEndEvent;
218 static const Type kFinishedEvent;
219 static const Type kEncoderErrorEvent;
220};
221
223{
224 Q_OBJECT
225 public:
226 RipStatus(MythScreenStack *parent, QString device,
227 QVector<RipTrack*> *tracks, int quality)
228 : MythScreenType(parent, "ripstatus"), m_tracks(tracks),
229 m_quality(quality), m_cdDevice(std::move(device)) {}
230 ~RipStatus(void) override;
231
232 bool Create(void) override; // MythScreenType
233 bool keyPressEvent(QKeyEvent *event) override; // MythScreenType
234
235 signals:
236 void Result(bool);
237
238 protected slots:
239 void startRip(void);
240
241 protected:
242 void customEvent(QEvent *event) override; // MythUIType
243
244 private:
245 QVector<RipTrack*> *m_tracks {nullptr};
247 QString m_cdDevice;
248
256
258};
259
260#endif
CDEjectorThread(Ripper *ripper)
Definition: cdrip.h:44
Ripper * m_parent
Definition: cdrip.h:51
void run() override
Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead.
Definition: cdrip.cpp:110
QVector< RipTrack * > * m_tracks
Definition: cdrip.h:89
~CDRipperThread() override
Definition: cdrip.cpp:184
long int m_totalSectors
Definition: cdrip.h:91
bool isCancelled(void) const
Definition: cdrip.cpp:195
QString m_musicStorageDir
Definition: cdrip.h:97
bool m_quit
Definition: cdrip.h:86
Q_DECLARE_TR_FUNCTIONS(CDRipperThread)
long int m_totalSectorsDone
Definition: cdrip.h:92
int m_quality
Definition: cdrip.h:88
int m_lastTrackPct
Definition: cdrip.h:94
int m_lastOverallPct
Definition: cdrip.h:95
QString m_cdDevice
Definition: cdrip.h:87
void run(void) override
Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead.
Definition: cdrip.cpp:200
RipStatus * m_parent
Definition: cdrip.h:85
void cancel(void)
Definition: cdrip.cpp:190
int ripTrack(QString &cddevice, Encoder *encoder, int tracknum)
Definition: cdrip.cpp:395
CDRipperThread(RipStatus *parent, QString device, QVector< RipTrack * > *tracks, int quality)
Definition: cdrip.cpp:166
void run() override
Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead.
Definition: cdrip.cpp:101
Ripper * m_parent
Definition: cdrip.h:38
CDScannerThread(Ripper *ripper)
Definition: cdrip.h:31
This is a wrapper around QThread that does several additional things.
Definition: mthread.h:49
Screen in which all other widgets are contained and rendered.
List widget, displays list items in a variety of themeable arrangements and can trigger signals when ...
A single button widget.
Definition: mythuibutton.h:22
A checkbox widget supporting three check states - on,off,half and two conditions - selected and unsel...
Image widget, displays a single image or multiple images in sequence.
Definition: mythuiimage.h:98
Progress bar widget.
A text entry and edit widget.
All purpose text widget, displays a text string.
Definition: mythuitext.h:29
static const Type kOverallStartEvent
Definition: cdrip.h:215
static const Type kTrackPercentEvent
Definition: cdrip.h:211
static const Type kOverallProgressEvent
Definition: cdrip.h:213
static const Type kCopyEndEvent
Definition: cdrip.h:217
QString m_text
Definition: cdrip.h:204
static const Type kTrackTextEvent
Definition: cdrip.h:207
static const Type kOverallPercentEvent
Definition: cdrip.h:214
~RipStatusEvent() override=default
static const Type kStatusTextEvent
Definition: cdrip.h:209
static const Type kTrackStartEvent
Definition: cdrip.h:212
static const Type kFinishedEvent
Definition: cdrip.h:218
RipStatusEvent(Type type, int val)
Definition: cdrip.h:198
int m_value
Definition: cdrip.h:205
static const Type kOverallTextEvent
Definition: cdrip.h:208
static const Type kCopyStartEvent
Definition: cdrip.h:216
static const Type kTrackProgressEvent
Definition: cdrip.h:210
static const Type kEncoderErrorEvent
Definition: cdrip.h:219
RipStatusEvent(Type type, QString val)
Definition: cdrip.h:200
QString m_cdDevice
Definition: cdrip.h:247
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Definition: cdrip.cpp:1510
RipStatus(MythScreenStack *parent, QString device, QVector< RipTrack * > *tracks, int quality)
Definition: cdrip.h:226
MythUIProgressBar * m_overallProgress
Definition: cdrip.h:254
int m_quality
Definition: cdrip.h:246
MythUIText * m_overallText
Definition: cdrip.h:249
void startRip(void)
Definition: cdrip.cpp:1638
bool Create(void) override
Definition: cdrip.cpp:1489
MythUIText * m_statusText
Definition: cdrip.h:251
void Result(bool)
CDRipperThread * m_ripperThread
Definition: cdrip.h:257
MythUIText * m_overallPctText
Definition: cdrip.h:252
void customEvent(QEvent *event) override
Definition: cdrip.cpp:1544
~RipStatus(void) override
Definition: cdrip.cpp:1482
MythUIProgressBar * m_trackProgress
Definition: cdrip.h:255
MythUIText * m_trackPctText
Definition: cdrip.h:253
MythUIText * m_trackText
Definition: cdrip.h:250
QVector< RipTrack * > * m_tracks
Definition: cdrip.h:245
Definition: cdrip.h:102
MythUITextEdit * m_yearEdit
Definition: cdrip.h:164
MythUICheckBox * m_compilationCheck
Definition: cdrip.h:166
MythUIButton * m_searchArtistButton
Definition: cdrip.h:174
bool m_somethingwasripped
Definition: cdrip.h:185
MythUIButton * m_switchTitleArtist
Definition: cdrip.h:171
void metadataChanged(void)
Definition: cdrip.cpp:1350
void setArtist(const QString &artist)
Definition: cdrip.cpp:1264
MythUIButton * m_searchAlbumButton
Definition: cdrip.h:175
void chooseBackend(void) const
Definition: cdrip.cpp:692
bool deleteExistingTrack(RipTrack *track)
Definition: cdrip.cpp:868
QString m_musicStorageDir
Definition: cdrip.h:157
void ShowConflictMenu(RipTrack *track)
Definition: cdrip.cpp:1394
QString m_artistName
Definition: cdrip.h:181
void updateTrackLengths(void)
Definition: cdrip.cpp:1420
MythUITextEdit * m_artistEdit
Definition: cdrip.h:161
void artistChanged(void)
Definition: cdrip.cpp:951
void ShowMenu(void) override
Definition: cdrip.cpp:662
void setSaveHost(const QString &host)
Definition: cdrip.cpp:735
void ripFinished(void)
MythUIButtonList * m_trackList
Definition: cdrip.h:168
void switchTitlesAndArtists()
Definition: cdrip.cpp:1076
void searchAlbum(void) const
Definition: cdrip.cpp:1269
MythUIButton * m_searchGenreButton
Definition: cdrip.h:176
CDScannerThread * m_scanThread
Definition: cdrip.h:191
QString m_genreName
Definition: cdrip.h:182
void updateTrackList(void)
Definition: cdrip.cpp:1193
bool m_mediaMonitorActive
Definition: cdrip.h:186
MythUIButton * m_ripButton
Definition: cdrip.h:173
MythUITextEdit * m_genreEdit
Definition: cdrip.h:163
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Definition: cdrip.cpp:635
void setGenre(const QString &genre)
Definition: cdrip.cpp:1317
void ScanFinished(void)
Definition: cdrip.cpp:757
bool Create(void) override
Definition: cdrip.cpp:573
bool somethingWasRipped() const
Definition: cdrip.cpp:946
void deleteAllExistingTracks(void)
Definition: cdrip.cpp:851
~Ripper(void) override
Definition: cdrip.cpp:551
MythUITextEdit * m_albumEdit
Definition: cdrip.h:162
MythUIButton * m_scanButton
Definition: cdrip.h:172
CDEjectorThread * m_ejectThread
Definition: cdrip.h:190
QStringList m_searchList
Definition: cdrip.h:184
void showEditMetadataDialog(void)
Definition: cdrip.cpp:687
void toggleTrackActive(MythUIButtonListItem *item)
Definition: cdrip.cpp:1365
void genreChanged(void)
Definition: cdrip.cpp:997
MythUIButtonList * m_qualityList
Definition: cdrip.h:169
void setAlbum(const QString &album)
Definition: cdrip.cpp:1288
void searchArtist(void) const
Definition: cdrip.cpp:1245
QString m_cdDevice
Definition: cdrip.h:188
void yearChanged(void)
Definition: cdrip.cpp:1014
void customEvent(QEvent *event) override
Definition: cdrip.cpp:1441
void compilationChanged(bool state)
Definition: cdrip.cpp:1031
void RipComplete(bool result)
Definition: cdrip.cpp:1126
void searchGenre(void)
Definition: cdrip.cpp:1293
void scanCD(void)
Definition: cdrip.cpp:835
void EjectFinished(void)
Definition: cdrip.cpp:1159
QVector< RipTrack * > * m_tracks
Definition: cdrip.h:178
void startRipper(void)
Definition: cdrip.cpp:1101
Ripper(MythScreenStack *parent, QString device)
Definition: cdrip.cpp:521
void startEjectCD(void)
Definition: cdrip.cpp:1144
QString m_albumName
Definition: cdrip.h:180
QString m_year
Definition: cdrip.h:183
void albumChanged(void)
Definition: cdrip.cpp:980
CdDecoder * m_decoder
Definition: cdrip.h:159
void startScanCD(void)
Definition: cdrip.cpp:744
void ejectCD(void)
Definition: cdrip.cpp:1167
Q_DECLARE_METATYPE(std::chrono::seconds)
Definition: cdrip.h:55
bool isNew
Definition: cdrip.h:59
std::chrono::milliseconds length
Definition: cdrip.h:58
bool active
Definition: cdrip.h:57
MusicMetadata * metadata
Definition: cdrip.h:56