feat: update error messages and improve server region selection

- Enhanced the error message for failed tasks to include reauthorization instructions in the Chinese translation.
- Added console logs for debugging purposes in the header component during sync operations.
- Refactored server region selection logic to display the current region for authenticated users and provide a dropdown for unauthenticated users.
- Updated the task progress function to reflect the new error message for failed tasks.
- Modified book download logic to retrieve and download covers from the cloud.
This commit is contained in:
troyeguo
2025-11-29 15:18:48 +08:00
parent b09b84ad3b
commit 48900bb22e
7 changed files with 68 additions and 56 deletions

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

@@ -208,6 +208,7 @@
"Note": "笔记",
"Page width": "页面宽度",
"Tasks failed after multiple retries, please check the network connection": "多次重试后任务失败,请检查网络连接",
"Tasks failed after multiple retries, please check the network connection or reauthorize the data source in the settings": "多次重试后任务失败,请检查网络连接或在设置中重新授权数据源",
"Render PDF from even page": "从偶数页开始渲染 PDF",
"Filter by book": "按图书筛选",
"Server path (Please first create this folder manually)": "服务器路径(请先手动创建此文件夹)",

View File

@@ -242,7 +242,7 @@ class Header extends React.Component<HeaderProps, HeaderState> {
beforeSync = async () => {
if (!ConfigService.getItem("defaultSyncOption")) {
toast.error(this.props.t("Please add data source in the setting"));
this.setState({ isSync: false });
console.log("testsats");
return false;
}
if (
@@ -264,7 +264,6 @@ class Header extends React.Component<HeaderProps, HeaderState> {
duration: 4000,
}
);
this.setState({ isSync: false });
return false;
}
let config = await getCloudConfig(
@@ -272,7 +271,6 @@ class Header extends React.Component<HeaderProps, HeaderState> {
);
if (Object.keys(config).length === 0) {
toast.error(this.props.t("Cannot get sync config"));
this.setState({ isSync: false });
return false;
}
if (
@@ -313,7 +311,6 @@ class Header extends React.Component<HeaderProps, HeaderState> {
),
{ duration: 4000 }
);
this.setState({ isSync: false });
return false;
}
checkMissingBook(this.props.books);
@@ -324,7 +321,6 @@ class Header extends React.Component<HeaderProps, HeaderState> {
"Broken data detected, please click the setting button to reset the sync records"
)
);
this.setState({ isSync: false });
return false;
}
if (ConfigService.getReaderConfig("isEnableKoodoSync") !== "yes") {
@@ -356,12 +352,16 @@ class Header extends React.Component<HeaderProps, HeaderState> {
);
};
handleCloudSync = async (): Promise<false | undefined> => {
console.log("dsgdfgdf");
this.timer = await showTaskProgress();
if (!this.timer) {
this.setState({ isSync: false });
return false;
}
try {
console.log("fghdfhfg");
let res = await this.beforeSync();
console.log(res, "res");
if (!res) {
clearInterval(this.timer);
this.setState({ isSync: false });
@@ -591,6 +591,7 @@ class Header extends React.Component<HeaderProps, HeaderState> {
<div
className="setting-icon-container"
onClick={async () => {
console.log("sadfsagsgfd");
if (!isElectron && !this.props.isAuthed) {
toast(
this.props.t(

View File

@@ -563,46 +563,56 @@ class AccountSetting extends React.Component<
</div>
)}
<div className="setting-dialog-new-title">
<Trans>Select server region</Trans>
<select
name=""
className="lang-setting-dropdown"
onChange={(event) => {
if (!event.target.value) {
return;
}
if (event.target.value === "china") {
toast(
this.props.t(
"Some login options and data sources are not available in your selected server region"
)
);
}
ConfigService.setItem("serverRegion", event.target.value);
this.setState({
serverRegion: event.target.value,
});
resetReaderRequest();
resetUserRequest();
resetThirdpartyRequest();
toast.success(this.props.t("Setup successful"));
}}
>
{[
{ value: "", label: "Please select" },
{ value: "global", label: "Global" },
{ value: "china", label: "China" },
].map((item) => (
<option
value={item.value}
key={item.value}
className="lang-setting-option"
selected={item.value === getServerRegion()}
>
{this.props.t(item.label)}
</option>
))}
</select>
<Trans>
{this.props.isAuthed ? "Server region" : "Select server region"}
</Trans>
{this.props.isAuthed ? (
<div className="lang-setting-option">
<Trans>
{getServerRegion() === "china" ? "China" : "Global"}
</Trans>
</div>
) : (
<select
name=""
className="lang-setting-dropdown"
onChange={(event) => {
if (!event.target.value) {
return;
}
if (event.target.value === "china") {
toast(
this.props.t(
"Some login options and data sources are not available in your selected server region"
)
);
}
ConfigService.setItem("serverRegion", event.target.value);
this.setState({
serverRegion: event.target.value,
});
resetReaderRequest();
resetUserRequest();
resetThirdpartyRequest();
toast.success(this.props.t("Setup successful"));
}}
>
{[
{ value: "", label: "Please select" },
{ value: "global", label: "Global" },
{ value: "china", label: "China" },
].map((item) => (
<option
value={item.value}
key={item.value}
className="lang-setting-option"
selected={item.value === getServerRegion()}
>
{this.props.t(item.label)}
</option>
))}
</select>
)}
</div>
{!this.props.isAuthed && (
<div className="setting-dialog-new-title">

View File

@@ -844,7 +844,7 @@ export const showTaskProgress = async () => {
if (stats.hasFailedTasks) {
toast.error(
i18n.t(
"Tasks failed after multiple retries, please check the network connection"
"Tasks failed after multiple retries, please check the network connection or reauthorize the data source in the settings"
),
{
id: "syncing",
@@ -882,7 +882,7 @@ export const showTaskProgress = async () => {
if (stats.hasFailedTasks) {
toast.error(
i18n.t(
"Tasks failed after multiple retries, please check the network connection"
"Tasks failed after multiple retries, please check the network connection or reauthorize the data source in the settings"
),
{
id: "syncing",

View File

@@ -200,15 +200,15 @@ class BookUtil {
let result = await this.downloadBook(book.key, book.format);
clearInterval(timer);
toast.dismiss("offline-book");
if (ConfigService.getItem("defaultSyncOption") === "adrive") {
let syncUtil = await SyncService.getSyncUtil();
let covers = await syncUtil.listFiles("cover");
for (let cover of covers) {
if (cover.startsWith(book.key)) {
await CoverUtil.downloadCover(cover);
}
let covers = await CoverUtil.getCloudCoverList();
console.log(covers, "covers");
for (let cover of covers) {
if (cover.startsWith(book.key)) {
await CoverUtil.downloadCover(cover);
}
}
if (result) {
toast.success(i18n.t("Download successful"), {
id: "offline-book",