File indexing completed on 2023-10-03 08:53:04

0001 /*
0002     SPDX-FileCopyrightText: 2010 Daniel Nicoletti <dantti12@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef DEVICES_MODEL_H
0008 #define DEVICES_MODEL_H
0009 
0010 #include <QStandardItemModel>
0011 #include <QDBusMessage>
0012 #include <QRegExp>
0013 
0014 #include <KCupsPrinter.h>
0015 
0016 typedef QMap<QString, QString> MapSS;
0017 typedef QMap<QString, MapSS> MapSMapSS;
0018 
0019 class KCupsRequest;
0020 class DevicesModel : public QStandardItemModel
0021 {
0022     Q_OBJECT
0023 public:
0024     enum Role {
0025         DeviceClass = Qt::UserRole + 2,
0026         DeviceId,
0027         DeviceInfo,
0028         DeviceMakeAndModel,
0029         DeviceUri,
0030         DeviceUris,
0031         DeviceLocation
0032     };
0033     Q_ENUM(Role)
0034 
0035     enum Kind {
0036         Other,
0037         Local,
0038         Networked,
0039         OtherNetworked
0040     };
0041     Q_ENUM(Kind)
0042 
0043     explicit DevicesModel(QObject *parent = nullptr);
0044 
0045 signals:
0046     void loaded();
0047     void parentAdded(const QModelIndex &index);
0048     void errorMessage(const QString &message);
0049 
0050 public slots:
0051     void update();
0052     void insertDevice(const QString &device_class,
0053                       const QString &device_id,
0054                       const QString &device_info,
0055                       const QString &device_make_and_model,
0056                       const QString &device_uri,
0057                       const QString &device_location,
0058                       const QStringList &grouped_uris = QStringList());
0059     void insertDevice(const QString &device_class,
0060                       const QString &device_id,
0061                       const QString &device_info,
0062                       const QString &device_make_and_model,
0063                       const QString &device_uri,
0064                       const QString &device_location,
0065                       const KCupsPrinters &grouped_printers);
0066 
0067 private slots:
0068     QStandardItem* createItem(const QString &device_class,
0069                               const QString &device_id,
0070                               const QString &device_info,
0071                               const QString &device_make_and_model,
0072                               const QString &device_uri,
0073                               const QString &device_location,
0074                               bool grouped);
0075     void gotDevice(const QString &device_class,
0076                    const QString &device_id,
0077                    const QString &device_info,
0078                    const QString &device_make_and_model,
0079                    const QString &device_uri,
0080                    const QString &device_location);
0081     void finished();
0082     void getGroupedDevicesSuccess(const QDBusMessage &message);
0083     void getGroupedDevicesFailed(const QDBusError &error, const QDBusMessage &message);
0084     void groupedDevicesFallback();
0085 
0086 private:
0087     QStandardItem *findCreateCategory(const QString &category, Kind kind);
0088 
0089     KCupsRequest *m_request;
0090     MapSMapSS m_mappedDevices;
0091     QRegExp m_rx;
0092     QStringList m_blacklistedURIs;
0093 };
0094 
0095 Q_DECLARE_METATYPE(MapSS)
0096 Q_DECLARE_METATYPE(MapSMapSS)
0097 
0098 #endif