Skip to content

Commit 9c3fe76

Browse files
committed
feat: add package cache update during APT initialization
Added package cache update functionality during APT initialization process. When backend initialization is not in process, the system now automatically updates the package cache before proceeding. This ensures that package information is current and reduces potential installation errors due to outdated cache. Added new display mode APT_UPDATE_CACHE to show cache update progress, and implemented transaction handling for cache updates with proper success/failure logging. Log: Added automatic package cache update during application startup Influence: 1. Test application startup when backend initialization is not in process 2. Verify that "Updating package cache..." message appears during update 3. Test successful cache update scenario 4. Test cache update failure handling 5. Verify that backend reloads cache after successful update 6. Check that application properly transitions to PROCESS_FIN state after update completion feat: 在APT初始化期间添加软件包缓存更新功能 在APT初始化过程中添加了软件包缓存更新功能。当后端初始化不在进行中时,系 统现在会在继续之前自动更新软件包缓存。这确保了软件包信息是最新的,并减少 了因缓存过时导致的潜在安装错误。添加了新的显示模式APT_UPDATE_CACHE来显示 缓存更新进度,并实现了缓存更新的事务处理,包含适当的成功/失败日志记录。 Log: 在应用程序启动时添加了自动软件包缓存更新功能 Influence: 1. 测试当后端初始化不在进行中时的应用程序启动 2. 验证在更新期间是否显示"更新软件包缓存..."消息 3. 测试成功的缓存更新场景 4. 测试缓存更新失败处理 5. 验证后端在成功更新后是否重新加载缓存 6. 检查应用程序在更新完成后是否正确转换到PROCESS_FIN状态 Task: https://pms.uniontech.com/task-view-386389.html
1 parent c92ee3b commit 9c3fe76

51 files changed

Lines changed: 5998 additions & 4222 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/deb-installer/view/pages/backendprocesspage.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ void BackendProcessPage::setDisplayPage(DisplayMode mode)
3030
if (mode == APT_INIT) {
3131
allLayout->setCurrentWidget(noProcessWidget);
3232
noProcessWidget->start();
33+
} else if (mode == APT_UPDATE_CACHE) {
34+
noProcessWidget->setActionText(tr("Updating package cache..."));
3335
} else if (mode == READ_PKG) {
3436
allLayout->setCurrentWidget(processWidget);
3537
noProcessWidget->stop();

src/deb-installer/view/pages/backendprocesspage.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class BackendProcessPage : public QWidget
1717
public:
1818
enum DisplayMode {
1919
APT_INIT, //apt初始化
20+
APT_UPDATE_CACHE, // 更新缓存
2021
READ_PKG, //读取包数据
2122
PROCESS_FIN //处理结束
2223
};

src/deb-installer/view/pages/debinstaller.cpp

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ void DebInstaller::initConnections()
182182
if (inProcess) {
183183
slotShowPkgProcessBlockPage(BackendProcessPage::APT_INIT, 0, 0);
184184
} else {
185-
slotShowPkgProcessBlockPage(BackendProcessPage::PROCESS_FIN, 0, 0);
185+
updatePackageCache();
186186
}
187187
});
188188

@@ -369,6 +369,26 @@ void DebInstaller::slotShowPkgProcessBlockPage(BackendProcessPage::DisplayMode m
369369
}
370370
}
371371

372+
void DebInstaller::slotUpdateCacheFinished()
373+
{
374+
Transaction *transaction = qobject_cast<Transaction *>(sender());
375+
if (!transaction) {
376+
slotShowPkgProcessBlockPage(BackendProcessPage::PROCESS_FIN, 0, 0);
377+
qWarning() << "Update cache transaction is null";
378+
return;
379+
}
380+
381+
disconnect(transaction, &Transaction::finished, this, &DebInstaller::slotUpdateCacheFinished);
382+
slotShowPkgProcessBlockPage(BackendProcessPage::PROCESS_FIN, 0, 0);
383+
qDebug() << (transaction->exitStatus() == QApt::ExitSuccess
384+
? "Package cache update succeeded"
385+
: QString("Package cache update failed: %1").arg(transaction->errorString()));
386+
387+
transaction->deleteLater();
388+
if (auto backend = PackageAnalyzer::instance().backendPtr())
389+
backend->reloadCache();
390+
}
391+
372392
void DebInstaller::disableCloseAndExit()
373393
{
374394
titlebar()->setDisableFlags(Qt::WindowCloseButtonHint); //设置标题栏中的关闭按钮不可用
@@ -612,6 +632,29 @@ DdimSt DebInstaller::analyzeV10(const QJsonObject &ddimobj, const QString &ddimD
612632
return result;
613633
}
614634

635+
void DebInstaller::updatePackageCache()
636+
{
637+
slotShowPkgProcessBlockPage(BackendProcessPage::APT_UPDATE_CACHE, 0, 0);
638+
auto backend = PackageAnalyzer::instance().backendPtr();
639+
if (!backend) {
640+
qWarning() << "Backend pointer is null, cannot update package cache";
641+
slotShowPkgProcessBlockPage(BackendProcessPage::PROCESS_FIN, 0, 0);
642+
return;
643+
}
644+
645+
auto transaction = backend->updateCache();
646+
if (!transaction) {
647+
qWarning() << "Failed to create update cache transaction";
648+
slotShowPkgProcessBlockPage(BackendProcessPage::PROCESS_FIN, 0, 0);
649+
return;
650+
}
651+
652+
transaction->setLocale(".UTF-8");
653+
connect(transaction, &Transaction::finished, this, &DebInstaller::slotUpdateCacheFinished);
654+
655+
transaction->run();
656+
}
657+
615658
void DebInstaller::refreshMulti()
616659
{
617660
// 部分场景下,由于获取后端指针 BackendPtr 等待,使用 Enter 打开多个软件包可能导致状态异常(标识为多个包状态)

src/deb-installer/view/pages/debinstaller.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,8 @@ private slots:
239239
*/
240240
void slotShowPkgProcessBlockPage(BackendProcessPage::DisplayMode mode, int currentRate, int pkgCount);
241241

242+
void slotUpdateCacheFinished();
243+
242244
private:
243245
/**
244246
* @brief initUI
@@ -321,6 +323,11 @@ private slots:
321323
*/
322324
DdimSt analyzeV10(const QJsonObject &ddimobj, const QString &ddimDir);
323325

326+
/**
327+
* @brief updatePackageCache 更新软件包缓存
328+
*/
329+
void updatePackageCache();
330+
324331
private:
325332
DebListModel *m_fileListModel = nullptr; //model 类
326333
FileChooseWidget *m_fileChooseWidget = nullptr; //文件选择的widget

translations/deepin-deb-installer.ts

Lines changed: 42 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@
3232
<source>Initializing...</source>
3333
<translation>Initializing...</translation>
3434
</message>
35+
<message>
36+
<location filename="../src/deb-installer/view/pages/backendprocesspage.cpp" line="34"/>
37+
<source>Updating package cache...</source>
38+
<translation type="unfinished"></translation>
39+
</message>
3540
</context>
3641
<context>
3742
<name>DdimErrorPage</name>
@@ -55,54 +60,54 @@
5560
</message>
5661
<message>
5762
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="130"/>
58-
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="543"/>
63+
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="563"/>
5964
<source>Installing other packages... Please open it later.</source>
6065
<translation>Installing other packages... Please open it later.</translation>
6166
</message>
6267
<message>
63-
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="547"/>
68+
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="567"/>
6469
<source>Parsing failed: An illegal file structure was found in the manifest file!</source>
6570
<translation>Parsing failed: An illegal file structure was found in the manifest file!</translation>
6671
</message>
6772
<message>
68-
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="549"/>
73+
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="569"/>
6974
<source>Parsing failed: An illegal version number was found in the manifest file!</source>
7075
<translation>Parsing failed: An illegal version number was found in the manifest file!</translation>
7176
</message>
7277
<message>
73-
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="551"/>
78+
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="571"/>
7479
<source>No deb packages found. Please check the folder.</source>
7580
<translation>No deb packages found. Please check the folder.</translation>
7681
</message>
7782
<message>
78-
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="637"/>
83+
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="680"/>
7984
<source>The deb package may be broken</source>
8085
<translation>The deb package may be broken</translation>
8186
</message>
8287
<message>
83-
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="645"/>
88+
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="688"/>
8489
<source>You can only install local deb packages</source>
8590
<translation>You can only install local deb packages</translation>
8691
</message>
8792
<message>
88-
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="653"/>
93+
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="696"/>
8994
<source>No permission to access this folder</source>
9095
<translation type="unfinished"></translation>
9196
</message>
9297
<message>
93-
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="667"/>
98+
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="710"/>
9499
<source>Already Added</source>
95100
<translation>Already Added</translation>
96101
</message>
97102
<message>
98-
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="676"/>
103+
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="719"/>
99104
<source>%1 does not exist, please reselect</source>
100105
<translation>%1 does not exist, please reselect</translation>
101106
</message>
102107
<message>
103108
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="333"/>
104-
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="683"/>
105-
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="811"/>
109+
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="726"/>
110+
<location filename="../src/deb-installer/view/pages/debinstaller.cpp" line="854"/>
106111
<source>Bulk Install</source>
107112
<translation>Bulk Install</translation>
108113
</message>
@@ -134,14 +139,14 @@
134139
</message>
135140
<message>
136141
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="117"/>
137-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="641"/>
142+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="653"/>
138143
<source>Invalid digital signature</source>
139144
<translation>Invalid digital signature</translation>
140145
</message>
141146
<message>
142147
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="124"/>
143-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="634"/>
144-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1595"/>
148+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="646"/>
149+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1620"/>
145150
<source>The administrator has set policies to prevent installation of this package</source>
146151
<translation>The administrator has set policies to prevent installation of this package</translation>
147152
</message>
@@ -151,84 +156,84 @@
151156
<translation>Installation Failed</translation>
152157
</message>
153158
<message>
154-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="643"/>
159+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="655"/>
155160
<source>Failed to install %1</source>
156161
<translation>Failed to install %1</translation>
157162
</message>
158163
<message>
159-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1638"/>
164+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1663"/>
160165
<source>This package does not have a valid digital signature and has been blocked from installing/running. Go to Security Center &gt; Tools &gt; App Security to change the settings.</source>
161166
<translation type="unfinished"></translation>
162167
</message>
163168
<message>
164-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="972"/>
169+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="997"/>
165170
<source>Unable to install - no digital signature</source>
166171
<translation>Unable to install - no digital signature</translation>
167172
</message>
168173
<message>
169-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="973"/>
174+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="998"/>
170175
<source>Please go to Control Center to enable developer mode and try again. Proceed?</source>
171176
<translation>Please go to Control Center to enable developer mode and try again. Proceed?</translation>
172177
</message>
173178
<message>
174-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="976"/>
175-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1641"/>
179+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1001"/>
180+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1666"/>
176181
<source>Cancel</source>
177182
<comment>button</comment>
178183
<translation>Cancel</translation>
179184
</message>
180185
<message>
181-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="977"/>
182-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1642"/>
186+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1002"/>
187+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1667"/>
183188
<source>Proceed</source>
184189
<comment>button</comment>
185190
<translation>Proceed</translation>
186191
</message>
187192
<message>
188-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="930"/>
189-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1032"/>
190-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1597"/>
193+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="955"/>
194+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1057"/>
195+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1622"/>
191196
<source>OK</source>
192197
<comment>button</comment>
193198
<translation>OK</translation>
194199
</message>
195200
<message>
196-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="934"/>
201+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="959"/>
197202
<source>Failed to install %1: no valid digital signature</source>
198203
<translation type="unfinished"></translation>
199204
</message>
200205
<message>
201-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1070"/>
206+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1095"/>
202207
<source>This package does not have a valid digital signature. Continue with the installation?</source>
203208
<translation>This package does not have a valid digital signature. Continue with the installation?</translation>
204209
</message>
205210
<message>
206-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1072"/>
211+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1097"/>
207212
<source>Cancel</source>
208213
<translation>Cancel</translation>
209214
</message>
210215
<message>
211-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1073"/>
216+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1098"/>
212217
<source>Continue</source>
213218
<comment>button</comment>
214219
<translation>Continue</translation>
215220
</message>
216221
<message>
217-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="928"/>
218-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1029"/>
219-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1594"/>
220-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1637"/>
222+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="953"/>
223+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1054"/>
224+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1619"/>
225+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1662"/>
221226
<source>Unable to install</source>
222227
<translation>Unable to install</translation>
223228
</message>
224229
<message>
225-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1030"/>
230+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="1055"/>
226231
<source>This package does not have a valid digital signature</source>
227232
<translation>This package does not have a valid digital signature</translation>
228233
</message>
229234
<message>
230-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="646"/>
231-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="651"/>
235+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="658"/>
236+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="663"/>
232237
<source>Broken dependencies: %1</source>
233238
<translation>Broken dependencies: %1</translation>
234239
</message>
@@ -238,7 +243,7 @@
238243
<translation>Authentication failed</translation>
239244
</message>
240245
<message>
241-
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="632"/>
246+
<location filename="../src/deb-installer/model/deblistmodel.cpp" line="644"/>
242247
<source>Unmatched package architecture</source>
243248
<translation>Unmatched package architecture</translation>
244249
</message>

0 commit comments

Comments
 (0)