File: cddaextractthread.h

package info (click to toggle)
audex 0.74~b1-1.1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 3,348 kB
  • sloc: cpp: 10,163; makefile: 7; sh: 3
file content (104 lines) | stat: -rw-r--r-- 2,672 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/* AUDEX CDDA EXTRACTOR
 * Copyright (C) 2007-2011 Marco Nelles (audex@maniatek.com)
 * <http://kde.maniatek.com/audex>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef CDDAEXTRACTTHREAD_HEADER
#define CDDAEXTRACTTHREAD_HEADER

#include <QString>
#include <QThread>

#include <KDebug>
#include <KLocale>

#include "cddaparanoia.h"

class CDDAExtractThread : public QThread {
  Q_OBJECT
public:
  CDDAExtractThread(QObject* parent = 0, const QString& device = "/dev/cdrom");
  ~CDDAExtractThread();

public slots:
  void start();
  void cancel();
  void setParanoiaMode(int mode) { paranoia_mode = mode; }
  void setMaxRetries(int r) { paranoia_retries = r; }
  void setNeverSkip(bool b) { never_skip = b; }
  void setTrackToRip(unsigned int t) { track = t; } // if t==0 rip whole cd
  void skipTrack(unsigned int t) { overall_sectors_read += paranoia->numOfFramesOfTrack(t); }

  bool isProcessing();

  const QStringList& protocol();

  CDDAParanoia *cddaParanoia() { return paranoia; }

private slots:
  void slot_error(const QString& message, const QString& details);

signals:
  void output(const QByteArray&);

  void progress(const int percent, const int sector, const int sectorsOverall);

  void error(const QString& message,
	const QString& details = QString());
  void warning(const QString& message);
  void info(const QString& message);

protected:
  /** reimplemented from QThread. Does the work */
  void run();

private:
  CDDAParanoia *paranoia;

  long first_sector;
  long current_sector;
  long last_sector;
  unsigned long sectors_read;
  unsigned long overall_sectors_read;
  unsigned long sectors_all;

  int paranoia_mode;
  int paranoia_retries;
  bool never_skip;

  unsigned int track;

  bool b_interrupt;
  bool b_error;

  QStringList extract_protocol;

  void createStatus(long, int);

  //status variables
  long last_read_sector;
  long overlap;
  long read_sectors;

  bool read_error;
  bool scratch_detected;

  //this friend function will call createStatus(long, int)
  friend void paranoiaCallback(long, int);

};

#endif