Before

…lines 1–246 unchanged (246 lines)
247 beforeSync = async () => {
248 if (!ConfigService.getItem("defaultSyncOption")) {
249 toast.error(this.props.t("Please add data source in the setting"));
250 this.setState({ isSync: false });
251 return false;
252 }
253 let config = await getCloudConfig(
254 ConfigService.getItem("defaultSyncOption") || ""
255 );
256 if (Object.keys(config).length === 0) {
257 toast.error(this.props.t("Cannot get sync config"));
258 this.setState({ isSync: false });
259 return false;
…lines 260–277 unchanged (18 lines)
278 ConfigService.removeItem("defaultSyncOption");
279 this.props.handleFetchDefaultSyncOption();
280 }
281 if (ConfigService.getReaderConfig("isEnableKoodoSync") === "yes") {
282 await updateUserConfig({
283 is_enable_koodo_sync: "no",
284 });
285 setTimeout(() => {
286 updateUserConfig({
287 is_enable_koodo_sync: "yes",
288 });
289 }, 1000);
290 }
…lines 291–650 unchanged (360 lines)

After

…lines 1–246 unchanged (246 lines)
247 beforeSync = async () => {
248 if (!ConfigService.getItem("defaultSyncOption")) {
249 toast.error(this.props.t("Please add data source in the setting"));
250 this.setState({ isSync: false });
251 return false;
252 }
253 if (
254 ConfigService.getReaderConfig("isEnableKoodoSync") === "yes" &&
255 this.props.userInfo &&
256 this.props.userInfo.default_sync_option &&
257 this.props.userInfo.default_sync_option !== this.props.defaultSyncOption
258 ) {
259 toast.error(
260 this.props.t(
261 "The default sync options in the local and cloud are inconsistent, please set the local default sync option to "
262 ) +
263 this.props.t(
264 driveList.find(
265 (item) => item.value === this.props.userInfo.default_sync_option
266 )?.label || ""
267 ),
268 {
269 duration: 4000,
270 }
271 );
272 this.setState({ isSync: false });
273 return false;
274 }
275 let config = await getCloudConfig(
276 ConfigService.getItem("defaultSyncOption") || ""
277 );
278 if (Object.keys(config).length === 0) {
279 toast.error(this.props.t("Cannot get sync config"));
280 this.setState({ isSync: false });
…lines 281–299 unchanged (19 lines)
300 ConfigService.removeItem("defaultSyncOption");
301 this.props.handleFetchDefaultSyncOption();
302 }
303 if (ConfigService.getReaderConfig("isEnableKoodoSync") === "yes") {
304 await updateUserConfig({
305 is_enable_koodo_sync: "no",
306 default_sync_option:
307 ConfigService.getItem("defaultSyncOption") === "google",
308 });
309 setTimeout(() => {
310 updateUserConfig({
311 is_enable_koodo_sync: "yes",
312 });
313 }, 1000);
…lines 314–674 unchanged (361 lines)

Before

program
import_statement
import "import"
import_clause
identifier "React"
from "from"
string
" "\""
string_fragment "react"
" "\""
; ";"
import_statement
import "import"
string
" "\""
string_fragment "./header.css"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "SearchBox"
from "from"
string
" "\""
string_fragment "../../components/searchBox"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "ImportLocal"
from "from"
string
" "\""
string_fragment "../../components/importLocal"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "HeaderProps"
, ","
import_specifier
identifier "HeaderState"
} "}"
from "from"
string
" "\""
string_fragment "./interface"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ConfigService"
, ","
import_specifier
identifier "TokenService"
, ","
} "}"
from "from"
string
" "\""
string_fragment "../../assets/lib/kookit-extra-browser.min"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "UpdateInfo"
from "from"
string
" "\""
string_fragment "../../components/dialogs/updateDialog"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "restoreFromConfigJson"
} "}"
from "from"
string
" "\""
string_fragment "../../utils/file/restore"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "backupToConfigJson"
} "}"
from "from"
string
" "\""
string_fragment "../../utils/file/backup"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "isElectron"
} "}"
from "from"
string
" "\""
string_fragment "react-device-detect"
" "\""
; ";"
import_statement (+27 nodes collapsed)
import_statement
import "import"
import_clause
identifier "toast"
from "from"
string
" "\""
string_fragment "react-hot-toast"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "Trans"
} "}"
from "from"
string
" "\""
string_fragment "react-i18next"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "SyncHelper"
} "}"
from "from"
string
" "\""
string_fragment "../../assets/lib/kookit-extra-browser.min"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "ConfigUtil"
from "from"
string
" "\""
string_fragment "../../utils/file/configUtil"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "DatabaseService"
from "from"
string
" "\""
string_fragment "../../utils/storage/databaseService"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "CoverUtil"
from "from"
string
" "\""
string_fragment "../../utils/file/coverUtil"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "BookUtil"
from "from"
string
" "\""
string_fragment "../../utils/file/bookUtil"
" "\""
; ";"
import_statement (+39 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "driveList"
} "}"
from "from"
string
" "\""
string_fragment "../../constants/driveList"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "SupportDialog"
from "from"
string
" "\""
string_fragment "../../components/dialogs/supportDialog"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "SyncService"
from "from"
string
" "\""
string_fragment "../../utils/storage/syncService"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "LocalFileManager"
} "}"
from "from"
string
" "\""
string_fragment "../../utils/file/localFile"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "updateUserConfig"
} "}"
from "from"
string
" "\""
string_fragment "../../utils/request/user"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "packageJson"
from "from"
string
" "\""
string_fragment "../../../package.json"
" "\""
; ";"
ambient_declaration
declare "declare"
variable_declaration
var "var"
variable_declarator
identifier "window"
type_annotation
: ":"
predefined_type
any "any"
; ";"
class_declaration
class "class"
type_identifier "Header"
class_heritage
extends_clause
extends "extends"
member_expression
identifier "React"
. "."
property_identifier "Component"
type_arguments
< "<"
type_identifier "HeaderProps"
, ","
type_identifier "HeaderState"
> ">"
class_body
{ "{"
public_field_definition
property_identifier "timer"
type_annotation
: ":"
predefined_type
any "any"
; ";"
method_definition (+84 nodes collapsed)
method_definition (+816 nodes collapsed)
method_definition (+286 nodes collapsed)
public_field_definition (+224 nodes collapsed)
; ";"
public_field_definition (+48 nodes collapsed)
; ";"
public_field_definition (+283 nodes collapsed)
; ";"
public_field_definition (+141 nodes collapsed)
; ";"
public_field_definition
property_identifier "beforeSync"
= "="
arrow_function
async "async"
formal_parameters
( "("
) ")"
=> "=>"
statement_block
{ "{"
if_statement (+68 nodes collapsed)
lexical_declaration (+30 nodes collapsed)
if_statement (+69 nodes collapsed)
if_statement
if "if"
parenthesized_expression (+29 nodes collapsed)
statement_block
{ "{"
lexical_declaration
let "let"
variable_declarator
identifier "targetDrive"
= "="
string
" "\""
string_fragment "google"
" "\""
; ";"
expression_statement (+23 nodes collapsed)
expression_statement
call_expression
member_expression
identifier "SyncService"
. "."
property_identifier "removeSyncUtil"
arguments
( "("
identifier "targetDrive"
) ")"
; ";"
expression_statement
call_expression
identifier "removeCloudConfig"
arguments
( "("
identifier "targetDrive"
) ")"
; ";"
if_statement (+55 nodes collapsed)
expression_statement
call_expression
member_expression
identifier "ConfigService"
. "."
property_identifier "deleteListConfig"
arguments
( "("
identifier "targetDrive"
, ","
string
" "\""
string_fragment "dataSourceList"
" "\""
) ")"
; ";"
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "props"
. "."
property_identifier "handleFetchDataSourceList"
arguments
( "("
) ")"
; ";"
if_statement (+50 nodes collapsed)
if_statement
if "if"
parenthesized_expression (+21 nodes collapsed)
statement_block
{ "{"
expression_statement
await_expression
await "await"
call_expression
identifier "updateUserConfig"
arguments
( "("
object
{ "{"
pair
property_identifier "is_enable_koodo_sync"
: ":"
string
" "\""
string_fragment "no"
" "\""
, ","
} "}"
) ")"
; ";"
expression_statement (+35 nodes collapsed)
} "}"
expression_statement (+30 nodes collapsed)
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "setState"
arguments
( "("
object
{ "{"
pair
property_identifier "isSync"
: ":"
false "false"
} "}"
) ")"
; ";"
return_statement
return "return"
false "false"
; ";"
} "}"
expression_statement
call_expression
identifier "checkMissingBook"
arguments
( "("
member_expression
member_expression
this "this"
. "."
property_identifier "props"
. "."
property_identifier "books"
) ")"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "checkResult"
= "="
await_expression
await "await"
call_expression
identifier "checkBrokenData"
arguments
( "("
) ")"
; ";"
if_statement (+55 nodes collapsed)
if_statement (+137 nodes collapsed)
return_statement
return "return"
true "true"
; ";"
} "}"
; ";"
public_field_definition (+68 nodes collapsed)
; ";"
public_field_definition (+328 nodes collapsed)
; ";"
public_field_definition (+261 nodes collapsed)
; ";"
public_field_definition (+274 nodes collapsed)
; ";"
public_field_definition (+149 nodes collapsed)
; ";"
method_definition (+1443 nodes collapsed)
} "}"
export_statement
export "export"
default "default"
identifier "Header"
; ";"

After

program
import_statement
import "import"
import_clause
identifier "React"
from "from"
string
" "\""
string_fragment "react"
" "\""
; ";"
import_statement
import "import"
string
" "\""
string_fragment "./header.css"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "SearchBox"
from "from"
string
" "\""
string_fragment "../../components/searchBox"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "ImportLocal"
from "from"
string
" "\""
string_fragment "../../components/importLocal"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "HeaderProps"
, ","
import_specifier
identifier "HeaderState"
} "}"
from "from"
string
" "\""
string_fragment "./interface"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "ConfigService"
, ","
import_specifier
identifier "TokenService"
, ","
} "}"
from "from"
string
" "\""
string_fragment "../../assets/lib/kookit-extra-browser.min"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "UpdateInfo"
from "from"
string
" "\""
string_fragment "../../components/dialogs/updateDialog"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "restoreFromConfigJson"
} "}"
from "from"
string
" "\""
string_fragment "../../utils/file/restore"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "backupToConfigJson"
} "}"
from "from"
string
" "\""
string_fragment "../../utils/file/backup"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "isElectron"
} "}"
from "from"
string
" "\""
string_fragment "react-device-detect"
" "\""
; ";"
import_statement (+27 nodes collapsed)
import_statement
import "import"
import_clause
identifier "toast"
from "from"
string
" "\""
string_fragment "react-hot-toast"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "Trans"
} "}"
from "from"
string
" "\""
string_fragment "react-i18next"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "SyncHelper"
} "}"
from "from"
string
" "\""
string_fragment "../../assets/lib/kookit-extra-browser.min"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "ConfigUtil"
from "from"
string
" "\""
string_fragment "../../utils/file/configUtil"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "DatabaseService"
from "from"
string
" "\""
string_fragment "../../utils/storage/databaseService"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "CoverUtil"
from "from"
string
" "\""
string_fragment "../../utils/file/coverUtil"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "BookUtil"
from "from"
string
" "\""
string_fragment "../../utils/file/bookUtil"
" "\""
; ";"
import_statement (+39 nodes collapsed)
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "driveList"
} "}"
from "from"
string
" "\""
string_fragment "../../constants/driveList"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "SupportDialog"
from "from"
string
" "\""
string_fragment "../../components/dialogs/supportDialog"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "SyncService"
from "from"
string
" "\""
string_fragment "../../utils/storage/syncService"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "LocalFileManager"
} "}"
from "from"
string
" "\""
string_fragment "../../utils/file/localFile"
" "\""
; ";"
import_statement
import "import"
import_clause
named_imports
{ "{"
import_specifier
identifier "updateUserConfig"
} "}"
from "from"
string
" "\""
string_fragment "../../utils/request/user"
" "\""
; ";"
import_statement
import "import"
import_clause
identifier "packageJson"
from "from"
string
" "\""
string_fragment "../../../package.json"
" "\""
; ";"
ambient_declaration
declare "declare"
variable_declaration
var "var"
variable_declarator
identifier "window"
type_annotation
: ":"
predefined_type
any "any"
; ";"
class_declaration
class "class"
type_identifier "Header"
class_heritage
extends_clause
extends "extends"
member_expression
identifier "React"
. "."
property_identifier "Component"
type_arguments
< "<"
type_identifier "HeaderProps"
, ","
type_identifier "HeaderState"
> ">"
class_body
{ "{"
public_field_definition
property_identifier "timer"
type_annotation
: ":"
predefined_type
any "any"
; ";"
method_definition (+84 nodes collapsed)
method_definition (+816 nodes collapsed)
method_definition (+286 nodes collapsed)
public_field_definition (+224 nodes collapsed)
; ";"
public_field_definition (+48 nodes collapsed)
; ";"
public_field_definition (+283 nodes collapsed)
; ";"
public_field_definition (+141 nodes collapsed)
; ";"
public_field_definition
property_identifier "beforeSync"
= "="
arrow_function
async "async"
formal_parameters
( "("
) ")"
=> "=>"
statement_block
{ "{"
if_statement (+68 nodes collapsed)
if_statement
if "if"
parenthesized_expression
( "("
binary_expression
binary_expression
binary_expression
binary_expression
call_expression
member_expression
identifier "ConfigService"
. "."
property_identifier "getReaderConfig"
arguments
( "("
string
" "\""
string_fragment "isEnableKoodoSync"
" "\""
) ")"
=== "==="
string
" "\""
string_fragment "yes"
" "\""
&& "&&"
member_expression
member_expression
this "this"
. "."
property_identifier "props"
. "."
property_identifier "userInfo"
&& "&&"
member_expression
member_expression
member_expression
this "this"
. "."
property_identifier "props"
. "."
property_identifier "userInfo"
. "."
property_identifier "default_sync_option"
&& "&&"
binary_expression
member_expression
member_expression
member_expression
this "this"
. "."
property_identifier "props"
. "."
property_identifier "userInfo"
. "."
property_identifier "default_sync_option"
!== "!=="
member_expression
member_expression
this "this"
. "."
property_identifier "props"
. "."
property_identifier "defaultSyncOption"
) ")"
statement_block
{ "{"
expression_statement
call_expression
member_expression
identifier "toast"
. "."
property_identifier "error"
arguments
( "("
binary_expression
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "props"
. "."
property_identifier "t"
arguments
( "("
string
" "\""
string_fragment "The default sync options in the local and cloud are inconsis"...
" "\""
) ")"
+ "+"
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "props"
. "."
property_identifier "t"
arguments
( "("
binary_expression
member_expression
call_expression
member_expression
identifier "driveList"
. "."
property_identifier "find"
arguments
( "("
arrow_function
formal_parameters
( "("
required_parameter
identifier "item"
) ")"
=> "=>"
binary_expression
member_expression
identifier "item"
. "."
property_identifier "value"
=== "==="
member_expression
member_expression
member_expression
this "this"
. "."
property_identifier "props"
. "."
property_identifier "userInfo"
. "."
property_identifier "default_sync_option"
) ")"
optional_chain
?. "?."
property_identifier "label"
|| "||"
string
" "\""
" "\""
) ")"
, ","
object
{ "{"
pair
property_identifier "duration"
: ":"
number "4000"
, ","
} "}"
) ")"
; ";"
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "setState"
arguments
( "("
object
{ "{"
pair
property_identifier "isSync"
: ":"
false "false"
} "}"
) ")"
; ";"
return_statement
return "return"
false "false"
; ";"
} "}"
lexical_declaration (+30 nodes collapsed)
if_statement (+69 nodes collapsed)
if_statement
if "if"
parenthesized_expression (+29 nodes collapsed)
statement_block
{ "{"
lexical_declaration
let "let"
variable_declarator
identifier "targetDrive"
= "="
string
" "\""
string_fragment "google"
" "\""
; ";"
expression_statement (+23 nodes collapsed)
expression_statement
call_expression
member_expression
identifier "SyncService"
. "."
property_identifier "removeSyncUtil"
arguments
( "("
identifier "targetDrive"
) ")"
; ";"
expression_statement
call_expression
identifier "removeCloudConfig"
arguments
( "("
identifier "targetDrive"
) ")"
; ";"
if_statement (+55 nodes collapsed)
expression_statement
call_expression
member_expression
identifier "ConfigService"
. "."
property_identifier "deleteListConfig"
arguments
( "("
identifier "targetDrive"
, ","
string
" "\""
string_fragment "dataSourceList"
" "\""
) ")"
; ";"
expression_statement
call_expression
member_expression
member_expression
this "this"
. "."
property_identifier "props"
. "."
property_identifier "handleFetchDataSourceList"
arguments
( "("
) ")"
; ";"
if_statement (+50 nodes collapsed)
if_statement
if "if"
parenthesized_expression (+21 nodes collapsed)
statement_block
{ "{"
expression_statement
await_expression
await "await"
call_expression
identifier "updateUserConfig"
arguments
( "("
object
{ "{"
pair
property_identifier "is_enable_koodo_sync"
: ":"
string
" "\""
string_fragment "no"
" "\""
, ","
pair
property_identifier "default_sync_option"
: ":"
binary_expression
call_expression
member_expression
identifier "ConfigService"
. "."
property_identifier "getItem"
arguments
( "("
string
" "\""
string_fragment "defaultSyncOption"
" "\""
) ")"
=== "==="
string
" "\""
string_fragment "google"
" "\""
, ","
} "}"
) ")"
; ";"
expression_statement (+35 nodes collapsed)
} "}"
expression_statement (+30 nodes collapsed)
expression_statement
call_expression
member_expression
this "this"
. "."
property_identifier "setState"
arguments
( "("
object
{ "{"
pair
property_identifier "isSync"
: ":"
false "false"
} "}"
) ")"
; ";"
return_statement
return "return"
false "false"
; ";"
} "}"
expression_statement
call_expression
identifier "checkMissingBook"
arguments
( "("
member_expression
member_expression
this "this"
. "."
property_identifier "props"
. "."
property_identifier "books"
) ")"
; ";"
lexical_declaration
let "let"
variable_declarator
identifier "checkResult"
= "="
await_expression
await "await"
call_expression
identifier "checkBrokenData"
arguments
( "("
) ")"
; ";"
if_statement (+55 nodes collapsed)
if_statement (+137 nodes collapsed)
return_statement
return "return"
true "true"
; ";"
} "}"
; ";"
public_field_definition (+68 nodes collapsed)
; ";"
public_field_definition (+328 nodes collapsed)
; ";"
public_field_definition (+261 nodes collapsed)
; ";"
public_field_definition (+274 nodes collapsed)
; ";"
public_field_definition (+149 nodes collapsed)
; ";"
method_definition (+1443 nodes collapsed)
} "}"
export_statement
export "export"
default "default"
identifier "Header"
; ";"