/* * Copyright (C) 2022, KylinSoft Co., Ltd. * * 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 . * */ #ifndef UKUI_MENU_RECENT_FILE_EXTENSION_H #define UKUI_MENU_RECENT_FILE_EXTENSION_H #include #include #include #include "menu-extension-iface.h" namespace UkuiMenu { class RecentFile { public: quint64 accessTime{0}; QString uri; QString name; QString icon; QString infoId; }; class RecentFileProvider : public QObject { Q_OBJECT public: explicit RecentFileProvider(QObject *parent = nullptr); void dataProcess(QVector &recentFiles); public Q_SLOT: void getRecentData(); void openFileByGFile(const QString &path); Q_SIGNALS: void dataLoadCompleted(QVector recentFiles); }; class RecentFilesModel : public QAbstractListModel { Q_OBJECT public: enum RoleMessage { UriRole = Qt::UserRole, NameRole = Qt::UserRole + 1, IconRole = Qt::UserRole + 2, }; explicit RecentFilesModel(QObject *parent = nullptr); int rowCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &index, int role) const override; QHash roleNames() const override; QString getInfoId(const int &index); QStringList getAllInfoId(); Q_INVOKABLE void updateData(); public Q_SLOT: void updateRecentFiles(QVector recentFiles); private: QVector m_recentFileData; Q_SIGNALS: void updateRecentData(); }; class RecentFileExtension : public MenuExtensionIFace { Q_OBJECT Q_PLUGIN_METADATA(IID UKUI_MENU_EXTENSION_IFACE_IID FILE "metadata.json") Q_INTERFACES(UkuiMenu::MenuExtensionIFace) public: explicit RecentFileExtension(QObject *parent = nullptr); ~RecentFileExtension() override; int index() override; QString name() override; QUrl url() override; QVariantMap data() override; void receive(QVariantMap data) override; private: QVector m_recentFile; QVariantMap m_data; QDBusInterface *m_appManagerDbusInterface = nullptr; RecentFilesModel *m_recentFilesModel = nullptr; QThread *m_recentFilesProviderThread = nullptr; RecentFileProvider *m_recentFileProvider = nullptr; QDBusInterface *m_fileManagerDbusInterface = nullptr; void initFileDbus(); bool openFile(const QString& desktopFile); void creatMenu(const QString &path, const int &index); Q_SIGNALS: void loadRecentFiles(); void openFileASync(const QString &path); }; } // UkuiMenu #endif //UKUI_MENU_RECENT_FILE_EXTENSION_H