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 void run() override; // MThread
34
35 private:
36 Ripper *m_parent {nullptr};
37};
38
40{
41 public:
42 explicit CDEjectorThread(Ripper *ripper)
43 : MThread("CDEjector"), m_parent(ripper) {}
44 void run() override; // MThread
45
46 private:
47 Ripper *m_parent {nullptr};
48};
49
51{
52 MusicMetadata *metadata { nullptr };
53 bool active { false };
54 std::chrono::milliseconds length { 0 };
55 bool isNew { false };
56};
57
59
60class RipStatus;
61
63{
65
66 public:
67 CDRipperThread(RipStatus *parent, QString device,
68 QVector<RipTrack*> *tracks, int quality);
69 ~CDRipperThread() override;
70
71 void cancel(void);
72
73 private:
74 void run(void) override; // MThread
75 int ripTrack(QString &cddevice, Encoder *encoder, int tracknum);
76
77 bool isCancelled(void) const;
78
79 RipStatus *m_parent {nullptr};
80 bool m_quit {false};
81 QString m_cdDevice;
83 QVector<RipTrack*> *m_tracks {nullptr};
84
85 long int m_totalSectors {0};
86 long int m_totalSectorsDone {0};
87
90
92
93};
94
95class Ripper : public MythScreenType
96{
97 Q_OBJECT
98 public:
99 Ripper(MythScreenStack *parent, QString device);
100 ~Ripper(void) override;
101
102 bool Create(void) override; // MythScreenType
103 bool keyPressEvent(QKeyEvent *event) override; // MythScreenType
104 void customEvent(QEvent *event) override; // MythUIType
105
106 bool somethingWasRipped() const;
107 void scanCD(void);
108 void ejectCD(void);
109
110 void ShowMenu(void) override; // MythScreenType
111
112 protected slots:
113 void startRipper(void);
114 void startScanCD(void);
115 void startEjectCD(void);
116 void artistChanged(void);
117 void albumChanged(void);
118 void genreChanged(void);
119 void yearChanged(void);
120 void compilationChanged(bool state);
122 void searchArtist(void) const;
123 void searchAlbum(void) const;
124 void searchGenre(void);
125 void setArtist(const QString& artist);
126 void setAlbum(const QString& album);
127 void setGenre(const QString& genre);
128 void RipComplete(bool result);
131 void EjectFinished(void);
132 void ScanFinished(void);
133 void metadataChanged(void);
134 void showEditMetadataDialog(void);
135 void chooseBackend(void) const;
136 void setSaveHost(const QString& host);
137
138 signals:
139 void ripFinished(void);
140
141 private:
142 bool deleteExistingTrack(RipTrack *track);
143 void deleteAllExistingTracks(void);
144 void updateTrackList(void);
145 void updateTrackLengths(void);
146 void toggleTrackActive(RipTrack *track);
147 void ShowConflictMenu(RipTrack *track);
148
150
152
157
159
162
169
170 QVector<RipTrack*> *m_tracks {nullptr};
171
172 QString m_albumName;
174 QString m_genreName;
175 QString m_year;
176 QStringList m_searchList;
179
180 QString m_cdDevice;
181
184};
185
186
187class RipStatusEvent : public QEvent
188{
189 public:
190 RipStatusEvent(Type type, int val) :
191 QEvent(type), m_text(""), m_value(val) {}
192 RipStatusEvent(Type type, QString val) :
193 QEvent(type), m_text(std::move(val)) {}
194 ~RipStatusEvent() override = default;
195
196 QString m_text;
197 int m_value {-1};
198
199 static const Type kTrackTextEvent;
200 static const Type kOverallTextEvent;
201 static const Type kStatusTextEvent;
202 static const Type kTrackProgressEvent;
203 static const Type kTrackPercentEvent;
204 static const Type kTrackStartEvent;
205 static const Type kOverallProgressEvent;
206 static const Type kOverallPercentEvent;
207 static const Type kOverallStartEvent;
208 static const Type kCopyStartEvent;
209 static const Type kCopyEndEvent;
210 static const Type kFinishedEvent;
211 static const Type kEncoderErrorEvent;
212};
213
215{
216 Q_OBJECT
217 public:
218 RipStatus(MythScreenStack *parent, QString device,
219 QVector<RipTrack*> *tracks, int quality)
220 : MythScreenType(parent, "ripstatus"), m_tracks(tracks),
221 m_quality(quality), m_cdDevice(std::move(device)) {}
222 ~RipStatus(void) override;
223
224 bool Create(void) override; // MythScreenType
225 bool keyPressEvent(QKeyEvent *event) override; // MythScreenType
226
227 signals:
228 void Result(bool);
229
230 protected slots:
231 void startRip(void);
232
233 private:
234 void customEvent(QEvent *event) override; // MythUIType
235
236 QVector<RipTrack*> *m_tracks {nullptr};
238 QString m_cdDevice;
239
247
249};
250
251#endif
CDEjectorThread(Ripper *ripper)
Definition: cdrip.h:42
Ripper * m_parent
Definition: cdrip.h:47
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:106
QVector< RipTrack * > * m_tracks
Definition: cdrip.h:83
~CDRipperThread() override
Definition: cdrip.cpp:180
long int m_totalSectors
Definition: cdrip.h:85
bool isCancelled(void) const
Definition: cdrip.cpp:191
QString m_musicStorageDir
Definition: cdrip.h:91
bool m_quit
Definition: cdrip.h:80
Q_DECLARE_TR_FUNCTIONS(CDRipperThread)
long int m_totalSectorsDone
Definition: cdrip.h:86
int m_quality
Definition: cdrip.h:82
int m_lastTrackPct
Definition: cdrip.h:88
int m_lastOverallPct
Definition: cdrip.h:89
QString m_cdDevice
Definition: cdrip.h:81
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:196
RipStatus * m_parent
Definition: cdrip.h:79
void cancel(void)
Definition: cdrip.cpp:186
int ripTrack(QString &cddevice, Encoder *encoder, int tracknum)
Definition: cdrip.cpp:391
CDRipperThread(RipStatus *parent, QString device, QVector< RipTrack * > *tracks, int quality)
Definition: cdrip.cpp:162
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:97
Ripper * m_parent
Definition: cdrip.h:36
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:207
static const Type kTrackPercentEvent
Definition: cdrip.h:203
static const Type kOverallProgressEvent
Definition: cdrip.h:205
static const Type kCopyEndEvent
Definition: cdrip.h:209
QString m_text
Definition: cdrip.h:196
static const Type kTrackTextEvent
Definition: cdrip.h:199
static const Type kOverallPercentEvent
Definition: cdrip.h:206
~RipStatusEvent() override=default
static const Type kStatusTextEvent
Definition: cdrip.h:201
static const Type kTrackStartEvent
Definition: cdrip.h:204
static const Type kFinishedEvent
Definition: cdrip.h:210
RipStatusEvent(Type type, int val)
Definition: cdrip.h:190
int m_value
Definition: cdrip.h:197
static const Type kOverallTextEvent
Definition: cdrip.h:200
static const Type kCopyStartEvent
Definition: cdrip.h:208
static const Type kTrackProgressEvent
Definition: cdrip.h:202
static const Type kEncoderErrorEvent
Definition: cdrip.h:211
RipStatusEvent(Type type, QString val)
Definition: cdrip.h:192
QString m_cdDevice
Definition: cdrip.h:238
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Definition: cdrip.cpp:1500
RipStatus(MythScreenStack *parent, QString device, QVector< RipTrack * > *tracks, int quality)
Definition: cdrip.h:218
MythUIProgressBar * m_overallProgress
Definition: cdrip.h:245
int m_quality
Definition: cdrip.h:237
MythUIText * m_overallText
Definition: cdrip.h:240
void startRip(void)
Definition: cdrip.cpp:1628
bool Create(void) override
Definition: cdrip.cpp:1479
MythUIText * m_statusText
Definition: cdrip.h:242
void Result(bool)
CDRipperThread * m_ripperThread
Definition: cdrip.h:248
MythUIText * m_overallPctText
Definition: cdrip.h:243
void customEvent(QEvent *event) override
Definition: cdrip.cpp:1534
~RipStatus(void) override
Definition: cdrip.cpp:1472
MythUIProgressBar * m_trackProgress
Definition: cdrip.h:246
MythUIText * m_trackPctText
Definition: cdrip.h:244
MythUIText * m_trackText
Definition: cdrip.h:241
QVector< RipTrack * > * m_tracks
Definition: cdrip.h:236
Definition: cdrip.h:96
MythUITextEdit * m_yearEdit
Definition: cdrip.h:156
MythUICheckBox * m_compilationCheck
Definition: cdrip.h:158
MythUIButton * m_searchArtistButton
Definition: cdrip.h:166
bool m_somethingwasripped
Definition: cdrip.h:177
MythUIButton * m_switchTitleArtist
Definition: cdrip.h:163
void metadataChanged(void)
Definition: cdrip.cpp:1342
void setArtist(const QString &artist)
Definition: cdrip.cpp:1256
MythUIButton * m_searchAlbumButton
Definition: cdrip.h:167
void chooseBackend(void) const
Definition: cdrip.cpp:686
bool deleteExistingTrack(RipTrack *track)
Definition: cdrip.cpp:860
QString m_musicStorageDir
Definition: cdrip.h:149
void ShowConflictMenu(RipTrack *track)
Definition: cdrip.cpp:1386
QString m_artistName
Definition: cdrip.h:173
void updateTrackLengths(void)
Definition: cdrip.cpp:1410
MythUITextEdit * m_artistEdit
Definition: cdrip.h:153
void artistChanged(void)
Definition: cdrip.cpp:943
void ShowMenu(void) override
Definition: cdrip.cpp:658
void setSaveHost(const QString &host)
Definition: cdrip.cpp:727
void ripFinished(void)
MythUIButtonList * m_trackList
Definition: cdrip.h:160
void switchTitlesAndArtists()
Definition: cdrip.cpp:1068
void searchAlbum(void) const
Definition: cdrip.cpp:1261
MythUIButton * m_searchGenreButton
Definition: cdrip.h:168
CDScannerThread * m_scanThread
Definition: cdrip.h:183
QString m_genreName
Definition: cdrip.h:174
void updateTrackList(void)
Definition: cdrip.cpp:1185
bool m_mediaMonitorActive
Definition: cdrip.h:178
MythUIButton * m_ripButton
Definition: cdrip.h:165
MythUITextEdit * m_genreEdit
Definition: cdrip.h:155
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Definition: cdrip.cpp:631
void setGenre(const QString &genre)
Definition: cdrip.cpp:1309
void ScanFinished(void)
Definition: cdrip.cpp:749
bool Create(void) override
Definition: cdrip.cpp:569
bool somethingWasRipped() const
Definition: cdrip.cpp:938
void deleteAllExistingTracks(void)
Definition: cdrip.cpp:843
~Ripper(void) override
Definition: cdrip.cpp:547
MythUITextEdit * m_albumEdit
Definition: cdrip.h:154
MythUIButton * m_scanButton
Definition: cdrip.h:164
CDEjectorThread * m_ejectThread
Definition: cdrip.h:182
QStringList m_searchList
Definition: cdrip.h:176
void showEditMetadataDialog(void)
Definition: cdrip.cpp:681
void toggleTrackActive(MythUIButtonListItem *item)
Definition: cdrip.cpp:1357
void genreChanged(void)
Definition: cdrip.cpp:989
MythUIButtonList * m_qualityList
Definition: cdrip.h:161
void setAlbum(const QString &album)
Definition: cdrip.cpp:1280
void searchArtist(void) const
Definition: cdrip.cpp:1237
QString m_cdDevice
Definition: cdrip.h:180
void yearChanged(void)
Definition: cdrip.cpp:1006
void customEvent(QEvent *event) override
Definition: cdrip.cpp:1431
void compilationChanged(bool state)
Definition: cdrip.cpp:1023
void RipComplete(bool result)
Definition: cdrip.cpp:1118
void searchGenre(void)
Definition: cdrip.cpp:1285
void scanCD(void)
Definition: cdrip.cpp:827
void EjectFinished(void)
Definition: cdrip.cpp:1151
QVector< RipTrack * > * m_tracks
Definition: cdrip.h:170
void startRipper(void)
Definition: cdrip.cpp:1093
Ripper(MythScreenStack *parent, QString device)
Definition: cdrip.cpp:517
void startEjectCD(void)
Definition: cdrip.cpp:1136
QString m_albumName
Definition: cdrip.h:172
QString m_year
Definition: cdrip.h:175
void albumChanged(void)
Definition: cdrip.cpp:972
CdDecoder * m_decoder
Definition: cdrip.h:151
void startScanCD(void)
Definition: cdrip.cpp:736
void ejectCD(void)
Definition: cdrip.cpp:1159
Q_DECLARE_METATYPE(std::chrono::seconds)
STL namespace.
Definition: cdrip.h:51
bool isNew
Definition: cdrip.h:55
std::chrono::milliseconds length
Definition: cdrip.h:54
bool active
Definition: cdrip.h:53
MusicMetadata * metadata
Definition: cdrip.h:52