玉兔远程控制 0.1.0-bate8
载入中...
搜索中...
未找到
FrmExtensionStore.h
1// Author: Kang Lin <kl222@126.com>
2// Chrome Extension Store - Download Extensions from Web Store
3
4#pragma once
5
6#include <QWidget>
7#include <QNetworkAccessManager>
8#include <QNetworkRequest>
9#include <QNetworkReply>
10#include <QStandardItemModel>
11#include <QMap>
12#include <QJsonObject>
13
14namespace Ui {
16}
17
20
31class CFrmExtensionStore : public QWidget
32{
33 Q_OBJECT
34
35public:
36 explicit CFrmExtensionStore(QWidget *parent = nullptr);
37 virtual ~CFrmExtensionStore();
38
45
50 void SetAPIBaseUrl(const QString &baseUrl);
51
56 void SearchExtensions(const QString &keyword);
57
62
67
73 QString DownloadExtension(const QString &extensionId);
74
79 void CancelDownload(const QString &downloadId);
80
86 int GetDownloadProgress(const QString &downloadId) const;
87
88private slots:
89 // UI 槽函数
90 void on_pbSearch_clicked();
91 void on_pbPopular_clicked();
92 void on_pbRecommended_clicked();
93 void on_pbDownload_clicked();
94 void on_pbInstall_clicked();
95 void on_pbCancel_clicked();
96 void on_pbDetails_clicked();
97 void on_pbRefresh_clicked();
98 void on_pbClearCache_clicked();
99
100 // 表视图槽函数
101 void slotExtensionSelected();
102 void slotCustomContextMenu(const QPoint &pos);
103 void slotDownloadProgress(qint64 bytesReceived, qint64 bytesTotal);
104
105 // 网络槽函数
106 void slotSearchFinished();
107 void slotDownloadFinished();
108 void slotNetworkError(QNetworkReply::NetworkError error);
109
110private:
111 // 初始化函数
112 void InitializeUI();
113 void SetupConnections();
114 void SetupNetworkManager();
115
116 // 扩展列表处理
117 void RefreshExtensionList();
118 int AddExtensionItem(const QJsonObject &extInfo);
119 void DisplayExtensionDetails(const QJsonObject &extInfo);
120 void ClearExtensionList();
121
122 // 下载管理
123 int ProcessDownloadedFile(const QString &filePath, const QString &extensionId);
124 QString GetDownloadPath() const;
125 QString GetCachePath() const;
126
127 // 缓存管理
128 int SaveToCache(const QString &key, const QJsonObject &data);
129 QJsonObject LoadFromCache(const QString &key) const;
130 bool IsCacheValid(const QString &key) const;
131
132 // 数据解析
133 QJsonArray ParseExtensionList(const QByteArray &data) const;
134 QJsonObject ParseExtensionDetails(const QByteArray &data) const;
135
136 // 工具函数
137 QString GenerateDownloadId() const;
138 bool IsExtensionIdValid(const QString &id) const;
139 QString GetExtensionFileUrl(const QString &extensionId) const;
140 QString GetChromeWebStoreUrl(const QString &extensionId) const;
141
142private:
143 Ui::CFrmExtensionStore* ui;
144 QNetworkAccessManager* m_pNetworkManager;
145 CFrmExtensionManager* m_pExtensionManager;
146 CParameterWebBrowser* m_pPara;
147 QStandardItemModel* m_pModelExtensions;
148
149 // API 基础 URL
150 QString m_apiBaseUrl;
151
152 // 下载管理
153 QMap<QString, QNetworkReply*> m_downloads; // downloadId -> reply
154 QMap<QString, QString> m_downloadExtensionId; // downloadId -> extensionId
155 QMap<QString, QJsonObject> m_extensionCache; // extensionId -> extensionInfo
156
157 // 表列号
158 enum ColumnNo {
159 Icon = 0, // 图标
160 Name = 1, // 名称
161 Version = 2, // 版本
162 Rating = 3, // 评分
163 Downloads = 4, // 下载数
164 ID = 5, // 扩展 ID
165 Status = 6 // 状态(未安装/已安装/下载中)
166 };
167
168 // 缓存设置
169 static const int CACHE_VALIDITY_HOURS = 24;
170};
扩展管理器界面
Chrome 扩展商城
void CancelDownload(const QString &downloadId)
取消下载
void SearchExtensions(const QString &keyword)
搜索扩展
QString DownloadExtension(const QString &extensionId)
下载扩展
int GetDownloadProgress(const QString &downloadId) const
获取下载进度
void GetRecommendedExtensions()
获取推荐扩展列表
int SetExtensionManager(CFrmExtensionManager *manager)
设置扩展管理器
void SetAPIBaseUrl(const QString &baseUrl)
设置基础 URL (可以指向自建服务器)
void GetPopularExtensions()
获取热门扩展列表