File indexing completed on 2024-04-14 04:43:16

0001 /*
0002  * AUDEX CDDA EXTRACTOR
0003  *
0004  * SPDX-FileCopyrightText: Copyright (C) 2007 Marco Nelles
0005  * <https://userbase.kde.org/Audex>
0006  *
0007  * SPDX-License-Identifier: GPL-3.0-or-later
0008  *
0009  */
0010 
0011 #ifndef CDDADEVICES_H
0012 #define CDDADEVICES_H
0013 
0014 #include <QAbstractTableModel>
0015 #include <QHash>
0016 #include <QString>
0017 #include <QStringList>
0018 
0019 #include <KLocalizedString>
0020 
0021 #include <Solid/Block>
0022 #include <Solid/Device>
0023 #include <Solid/DeviceInterface>
0024 #include <Solid/DeviceNotifier>
0025 #include <Solid/GenericInterface>
0026 #include <Solid/OpticalDisc>
0027 #include <Solid/OpticalDrive>
0028 #include <Solid/StorageAccess>
0029 
0030 struct OpticalAudioDisc {
0031     QString name;
0032     Solid::Device device;
0033 };
0034 
0035 class CDDADevices : public QObject
0036 {
0037     Q_OBJECT
0038 
0039 public:
0040     explicit CDDADevices(QObject *parent = nullptr);
0041     ~CDDADevices() override;
0042 
0043     const QString blockDevice(const QString &udi) const;
0044 
0045     const QStringList udiList() const;
0046     int discCount() const;
0047 
0048 public Q_SLOTS:
0049     void scanBus();
0050 
0051     void eject(const QString &udi);
0052 
0053     // set display name
0054     void setName(const QString &udi, const QString &name);
0055 
0056 Q_SIGNALS:
0057     void audioDiscDetected(const QString &udi);
0058     void audioDiscRemoved(const QString &udi);
0059 
0060 private Q_SLOTS:
0061     void p_solid_device_added(const QString &udi);
0062     void p_solid_device_removed(const QString &udi);
0063 
0064 private:
0065     QHash<QString, OpticalAudioDisc *> p_discs;
0066 
0067     bool p_is_optical_audio_disc(const Solid::Device &device) const;
0068 
0069     void p_clear();
0070 };
0071 
0072 #endif