Files
cantata/devices/audiocddevice.h
Craig Drummond 0a73215867 Update (c) year
2017-04-02 18:45:30 +01:00

132 lines
3.8 KiB
C++

/*
* Cantata
*
* Copyright (c) 2011-2017 Craig Drummond <craig.p.drummond@gmail.com>
*
* ----
*
* 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 2 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; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef AUDIOCDDEVICE_H
#define AUDIOCDDEVICE_H
#include "device.h"
#include "gui/covers.h"
#include "http/httpserver.h"
#include "solid-lite/opticaldrive.h"
#include <QImage>
class CddbInterface;
class MusicBrainz;
struct CdAlbum;
class AudioCdDevice : public Device
{
Q_OBJECT
public:
enum Service {
SrvNone,
SrvCddb,
SrvMusicBrainz
};
static const QLatin1String constAnyDev;
static QString coverUrl(QString id);
static QString getDevice(const QUrl &url);
AudioCdDevice(MusicLibraryModel *m, Solid::Device &dev);
virtual ~AudioCdDevice();
void dequeue();
QImage image() const { return cover().img; }
bool isAudioDevice(const QString &dev) const;
bool supportsDisconnect() const { return 0!=drive; }
bool isConnected() const { return !device.isEmpty(); }
void rescan(bool useCddb);
bool isRefreshing() const { return lookupInProcess; }
void toggle();
void stop();
QString path() const { return devPath; }
void addSong(const Song &, bool, bool) { }
void copySongTo(const Song &s, const QString &musicPath, bool overwrite, bool copyCover);
void removeSong(const Song &) { }
void cleanDirs(const QSet<QString> &) { }
double usedCapacity() { return 1.0; }
QString capacityString() { return detailsString; }
qint64 freeSpace() { return 1.0; }
DevType devType() const { return AudioCd; }
void saveOptions() { }
QString subText() { return album; }
quint32 totalTime();
bool canPlaySongs() const { return HttpServer::self()->isAlive(); }
QString albumName() const { return album; }
QString albumArtist() const { return artist; }
QString albumComposer() const { return composer; }
QString albumGenre() const { return genre; }
int albumDisc() const { return disc; }
int albumYear() const { return year; }
const Covers::Image & cover() const { return coverImage; }
void setCover(const Covers::Image &img);
const QPixmap & coverPix() const { return scaledCover; }
void scaleCoverPix(int size) const;
void autoplay();
Q_SIGNALS:
void lookup(bool full);
void matches(const QString &u, const QList<CdAlbum> &);
public Q_SLOTS:
void percent(int pc);
void copySongToResult(int status);
void setDetails(const CdAlbum &a);
void cdMatches(const QList<CdAlbum> &albums);
void setCover(const Song &song, const QImage &img, const QString &file);
private:
void connectService(bool useCddb);
void playTracks();
void updateDetails();
private:
Service srv;
Solid::OpticalDrive *drive;
#ifdef CDDB_FOUND
CddbInterface *cddb;
#endif
#ifdef MUSICBRAINZ5_FOUND
MusicBrainz *mb;
#endif
QString detailsString;
QString album;
QString artist;
QString composer;
QString genre;
QString device;
QString devPath;
int year;
int disc;
quint32 time;
bool lookupInProcess;
Covers::Image coverImage;
mutable QPixmap scaledCover;
bool autoPlay;
};
#endif