Skip to content

Commit

Permalink
feat(pb): oma refresh or oma download/install download failed wil…
Browse files Browse the repository at this point in the history
…l display different error message
  • Loading branch information
eatradish committed Mar 4, 2025
1 parent f0aee10 commit 0819a68
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 17 deletions.
1 change: 1 addition & 0 deletions i18n/en-US/oma.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ cleaning = Clearing packages cache ...
download-failed-with-len = { $len } package(s) failed to download.
download-failed = Failed to download { $filename }!
download-package-failed-with-reason = Failed to download package { $filename }, Reason: { $reason }.
download-file-failed-with-reason = Failed to download file { $filename }, Reason: { $reason }.
download-failed-no-name = Failed to download required file(s)!
need-more-size = Insufficient storage space: { $a } is available, but { $n } is needed.
successfully-download-to-path = Successfully downloaded { $len } package(s) to path: { $path }.
Expand Down
1 change: 1 addition & 0 deletions i18n/zh-CN/oma.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ cleaning = 正在清理本地软件包缓存 ...
download-failed-with-len = { $len } 个软件包下载失败。
download-failed = 下载 { $filename } 文件失败!
download-package-failed-with-reason = 下载软件包 { $filename } 失败,原因:{ $reason }
download-file-failed-with-reason = 下载文件 { $filename } 失败,原因:{ $reason }
download-failed-no-name = 下载文件失败!
need-more-size = 存储空间不足:{ $a } 可用,但需要 { $n }
successfully-download-to-path = 已下载 { $len } 个软件包到该路径:{ $path }
Expand Down
41 changes: 30 additions & 11 deletions src/pb.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ use oma_refresh::db::Event as RefreshEvent;
use oma_utils::human_bytes::HumanBytes;
use tracing::{debug, error, info, warn};

pub trait RenderDownloadProgress {
pub trait RenderPackagesDownloadProgress {
fn render_progress(&mut self, rx: &flume::Receiver<Event>);
}

Expand Down Expand Up @@ -148,7 +148,7 @@ impl RenderRefreshProgress for OmaMultiProgressBar {
while let Ok(event) = rx.recv() {
match event {
RefreshEvent::DownloadEvent(event) => {
self.download_event(event);
self.download_event(event, true);
}
RefreshEvent::ScanningTopic => {
let (sty, inv) = spinner_style();
Expand Down Expand Up @@ -195,18 +195,18 @@ impl RenderRefreshProgress for OmaMultiProgressBar {
}
}

impl RenderDownloadProgress for OmaMultiProgressBar {
impl RenderPackagesDownloadProgress for OmaMultiProgressBar {
fn render_progress(&mut self, rx: &flume::Receiver<Event>) {
while let Ok(event) = rx.recv() {
if self.download_event(event) {
if self.download_event(event, false) {
break;
}
}
}
}

impl OmaMultiProgressBar {
fn download_event(&mut self, event: Event) -> bool {
fn download_event(&mut self, event: Event, is_refresh: bool) -> bool {
match event {
Event::ChecksumMismatch {
index: _,
Expand Down Expand Up @@ -258,7 +258,7 @@ impl OmaMultiProgressBar {
file_name,
err,
} => {
self.handle_download_err(file_name, err);
self.handle_download_err(file_name, is_refresh, err);
self.info(&fl!("can-not-get-source-next-url"));
}
Event::DownloadDone { index: _, msg } => {
Expand All @@ -278,14 +278,19 @@ impl OmaMultiProgressBar {
self.pb_map.insert(0, pb);
}
Event::Failed { file_name, error } => {
self.handle_download_err(file_name, error);
self.handle_download_err(file_name, is_refresh, error);
}
};

false
}

fn handle_download_err(&mut self, file_name: String, error: SingleDownloadError) {
fn handle_download_err(
&mut self,
file_name: String,
is_refresh: bool,
error: SingleDownloadError,
) {
if let SingleDownloadError::ReqwestError { ref source } = error {
if source
.status()
Expand All @@ -307,10 +312,24 @@ impl OmaMultiProgressBar {

if let Some(last_cause) = last {
let reason = format!("{}: {}", first_cause, last_cause);
if is_refresh {
self.error(&fl!(
"download-file-failed-with-reason",
filename = file_name,
reason = reason
));
} else {
self.error(&fl!(
"download-package-failed-with-reason",
filename = file_name,
reason = reason
));
}
} else if is_refresh {
self.error(&fl!(
"download-package-failed-with-reason",
"download-file-failed-with-reason",
filename = file_name,
reason = reason
reason = first_cause
));
} else {
self.error(&fl!(
Expand Down Expand Up @@ -342,7 +361,7 @@ pub struct NoProgressBar {
progress: u64,
}

impl RenderDownloadProgress for NoProgressBar {
impl RenderPackagesDownloadProgress for NoProgressBar {
fn render_progress(&mut self, rx: &flume::Receiver<Event>) {
while let Ok(event) = rx.recv() {
if self.download_event(event) {
Expand Down
4 changes: 2 additions & 2 deletions src/subcommand/download.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use oma_pm::matches::PackagesMatcher;
use tracing::error;

use crate::config::Config;
use crate::pb::{NoProgressBar, OmaMultiProgressBar, RenderDownloadProgress};
use crate::pb::{NoProgressBar, OmaMultiProgressBar, RenderPackagesDownloadProgress};
use crate::{HTTP_CLIENT, fl, success};
use crate::{error::OutputError, subcommand::utils::handle_no_result};

Expand Down Expand Up @@ -59,7 +59,7 @@ impl CliExecuter for Download {
let (tx, rx) = unbounded();

thread::spawn(move || {
let mut pb: Box<dyn RenderDownloadProgress> = if no_progress {
let mut pb: Box<dyn RenderPackagesDownloadProgress> = if no_progress {
Box::new(NoProgressBar::default())
} else {
Box::new(OmaMultiProgressBar::default())
Expand Down
4 changes: 2 additions & 2 deletions src/subcommand/upgrade.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use std::sync::atomic::Ordering;
use std::thread;

use crate::NOT_ALLOW_CTRLC;
use crate::pb::RenderDownloadProgress;
use crate::pb::RenderPackagesDownloadProgress;
use crate::subcommand::utils::create_progress_spinner;
use crate::subcommand::utils::display_suggest_tips;
use crate::subcommand::utils::history_success_tips;
Expand Down Expand Up @@ -326,7 +326,7 @@ impl CliExecuter for Upgrade {
let (tx, rx) = unbounded();

let progress_worker = thread::spawn(move || {
let mut pb: Box<dyn RenderDownloadProgress> = if no_progress {
let mut pb: Box<dyn RenderPackagesDownloadProgress> = if no_progress {
Box::new(NoProgressBar::default())
} else {
Box::new(OmaMultiProgressBar::default())
Expand Down
4 changes: 2 additions & 2 deletions src/subcommand/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ use crate::msg;
use crate::pb::NoProgressBar;
use crate::pb::OmaMultiProgressBar;
use crate::pb::OmaProgressBar;
use crate::pb::RenderDownloadProgress;
use crate::pb::RenderPackagesDownloadProgress;
use crate::pb::RenderRefreshProgress;
use crate::success;
use crate::table::table_for_install_pending;
Expand Down Expand Up @@ -430,7 +430,7 @@ impl CommitChanges<'_> {
let (tx, rx) = unbounded();

thread::spawn(move || {
let mut pb: Box<dyn RenderDownloadProgress> = if no_progress {
let mut pb: Box<dyn RenderPackagesDownloadProgress> = if no_progress {
Box::new(NoProgressBar::default())
} else {
Box::new(OmaMultiProgressBar::default())
Expand Down

0 comments on commit 0819a68

Please sign in to comment.