code refactoring, fixed wrong jwt expire time
This commit is contained in:
@@ -1,99 +1,108 @@
|
||||
import { createSlice, PayloadAction } from "@reduxjs/toolkit"
|
||||
|
||||
export type LanguageUnion = "english" | "chinese" | "russian" | "italian" | "spanish" | "korean" | "japanese" | "catalan"
|
||||
export type LanguageUnion =
|
||||
| "english"
|
||||
| "chinese"
|
||||
| "russian"
|
||||
| "italian"
|
||||
| "spanish"
|
||||
| "korean"
|
||||
| "japanese"
|
||||
| "catalan"
|
||||
|
||||
export type ThemeUnion = "light" | "dark"
|
||||
|
||||
export interface SettingsState {
|
||||
serverAddr: string
|
||||
serverPort: string
|
||||
language: LanguageUnion
|
||||
theme: ThemeUnion
|
||||
cliArgs: string
|
||||
formatSelection: boolean
|
||||
ratelimit: string
|
||||
fileRenaming: boolean
|
||||
pathOverriding: boolean
|
||||
enableCustomArgs: boolean
|
||||
listView: boolean
|
||||
serverAddr: string
|
||||
serverPort: string
|
||||
language: LanguageUnion
|
||||
theme: ThemeUnion
|
||||
cliArgs: string
|
||||
formatSelection: boolean
|
||||
ratelimit: string
|
||||
fileRenaming: boolean
|
||||
pathOverriding: boolean
|
||||
enableCustomArgs: boolean
|
||||
listView: boolean
|
||||
}
|
||||
|
||||
const initialState: SettingsState = {
|
||||
serverAddr: localStorage.getItem("server-addr") || window.location.hostname,
|
||||
serverPort: localStorage.getItem("server-port") || window.location.port,
|
||||
language: (localStorage.getItem("language") || "english") as LanguageUnion,
|
||||
theme: (localStorage.getItem("theme") || "light") as ThemeUnion,
|
||||
cliArgs: localStorage.getItem("cli-args") ?? "",
|
||||
formatSelection: localStorage.getItem("format-selection") === "true",
|
||||
ratelimit: localStorage.getItem("rate-limit") ?? "",
|
||||
fileRenaming: localStorage.getItem("file-renaming") === "true",
|
||||
pathOverriding: localStorage.getItem("path-overriding") === "true",
|
||||
enableCustomArgs: localStorage.getItem("enable-custom-args") === "true",
|
||||
listView: localStorage.getItem("listview") === "true",
|
||||
serverAddr: localStorage.getItem("server-addr") || window.location.hostname,
|
||||
serverPort: localStorage.getItem("server-port") || window.location.port,
|
||||
language: (localStorage.getItem("language") || "english") as LanguageUnion,
|
||||
theme: (localStorage.getItem("theme") || "light") as ThemeUnion,
|
||||
cliArgs: localStorage.getItem("cli-args") ?? "",
|
||||
formatSelection: localStorage.getItem("format-selection") === "true",
|
||||
ratelimit: localStorage.getItem("rate-limit") ?? "",
|
||||
fileRenaming: localStorage.getItem("file-renaming") === "true",
|
||||
pathOverriding: localStorage.getItem("path-overriding") === "true",
|
||||
enableCustomArgs: localStorage.getItem("enable-custom-args") === "true",
|
||||
listView: localStorage.getItem("listview") === "true",
|
||||
}
|
||||
|
||||
export const settingsSlice = createSlice({
|
||||
name: "settings",
|
||||
initialState,
|
||||
reducers: {
|
||||
setServerAddr: (state, action: PayloadAction<string>) => {
|
||||
state.serverAddr = action.payload
|
||||
localStorage.setItem("server-addr", action.payload)
|
||||
},
|
||||
setServerPort: (state, action: PayloadAction<string>) => {
|
||||
state.serverPort = action.payload
|
||||
localStorage.setItem("server-port", action.payload)
|
||||
},
|
||||
setLanguage: (state, action: PayloadAction<LanguageUnion>) => {
|
||||
state.language = action.payload
|
||||
localStorage.setItem("language", action.payload)
|
||||
},
|
||||
setCliArgs: (state, action: PayloadAction<string>) => {
|
||||
state.cliArgs = action.payload
|
||||
localStorage.setItem("cli-args", action.payload)
|
||||
},
|
||||
setTheme: (state, action: PayloadAction<ThemeUnion>) => {
|
||||
state.theme = action.payload
|
||||
localStorage.setItem("theme", action.payload)
|
||||
},
|
||||
setFormatSelection: (state, action: PayloadAction<boolean>) => {
|
||||
state.formatSelection = action.payload
|
||||
localStorage.setItem("format-selection", action.payload.toString())
|
||||
},
|
||||
setRateLimit: (state, action: PayloadAction<string>) => {
|
||||
state.ratelimit = action.payload
|
||||
localStorage.setItem("rate-limit", action.payload)
|
||||
},
|
||||
setPathOverriding: (state, action: PayloadAction<boolean>) => {
|
||||
state.pathOverriding = action.payload
|
||||
localStorage.setItem("path-overriding", action.payload.toString())
|
||||
},
|
||||
setFileRenaming: (state, action: PayloadAction<boolean>) => {
|
||||
state.fileRenaming = action.payload
|
||||
localStorage.setItem("file-renaming", action.payload.toString())
|
||||
},
|
||||
setEnableCustomArgs: (state, action: PayloadAction<boolean>) => {
|
||||
state.enableCustomArgs = action.payload
|
||||
localStorage.setItem("enable-custom-args", action.payload.toString())
|
||||
},
|
||||
toggleListView: (state) => {
|
||||
state.listView = !state.listView
|
||||
localStorage.setItem("listview", state.listView.toString())
|
||||
},
|
||||
}
|
||||
name: "settings",
|
||||
initialState,
|
||||
reducers: {
|
||||
setServerAddr: (state, action: PayloadAction<string>) => {
|
||||
state.serverAddr = action.payload
|
||||
localStorage.setItem("server-addr", action.payload)
|
||||
},
|
||||
setServerPort: (state, action: PayloadAction<string>) => {
|
||||
state.serverPort = action.payload
|
||||
localStorage.setItem("server-port", action.payload)
|
||||
},
|
||||
setLanguage: (state, action: PayloadAction<LanguageUnion>) => {
|
||||
state.language = action.payload
|
||||
localStorage.setItem("language", action.payload)
|
||||
},
|
||||
setCliArgs: (state, action: PayloadAction<string>) => {
|
||||
state.cliArgs = action.payload
|
||||
localStorage.setItem("cli-args", action.payload)
|
||||
},
|
||||
setTheme: (state, action: PayloadAction<ThemeUnion>) => {
|
||||
state.theme = action.payload
|
||||
localStorage.setItem("theme", action.payload)
|
||||
},
|
||||
setFormatSelection: (state, action: PayloadAction<boolean>) => {
|
||||
state.formatSelection = action.payload
|
||||
localStorage.setItem("format-selection", action.payload.toString())
|
||||
},
|
||||
setRateLimit: (state, action: PayloadAction<string>) => {
|
||||
state.ratelimit = action.payload
|
||||
localStorage.setItem("rate-limit", action.payload)
|
||||
},
|
||||
setPathOverriding: (state, action: PayloadAction<boolean>) => {
|
||||
state.pathOverriding = action.payload
|
||||
localStorage.setItem("path-overriding", action.payload.toString())
|
||||
},
|
||||
setFileRenaming: (state, action: PayloadAction<boolean>) => {
|
||||
state.fileRenaming = action.payload
|
||||
localStorage.setItem("file-renaming", action.payload.toString())
|
||||
},
|
||||
setEnableCustomArgs: (state, action: PayloadAction<boolean>) => {
|
||||
state.enableCustomArgs = action.payload
|
||||
localStorage.setItem("enable-custom-args", action.payload.toString())
|
||||
},
|
||||
toggleListView: (state) => {
|
||||
state.listView = !state.listView
|
||||
localStorage.setItem("listview", state.listView.toString())
|
||||
},
|
||||
}
|
||||
})
|
||||
|
||||
export const {
|
||||
setLanguage,
|
||||
setCliArgs,
|
||||
setTheme,
|
||||
setServerAddr,
|
||||
setServerPort,
|
||||
setFormatSelection,
|
||||
setRateLimit,
|
||||
setFileRenaming,
|
||||
setPathOverriding,
|
||||
setEnableCustomArgs,
|
||||
toggleListView
|
||||
setLanguage,
|
||||
setCliArgs,
|
||||
setTheme,
|
||||
setServerAddr,
|
||||
setServerPort,
|
||||
setFormatSelection,
|
||||
setRateLimit,
|
||||
setFileRenaming,
|
||||
setPathOverriding,
|
||||
setEnableCustomArgs,
|
||||
toggleListView
|
||||
} = settingsSlice.actions
|
||||
|
||||
export default settingsSlice.reducer
|
||||
@@ -1,61 +1,61 @@
|
||||
export class CliArguments {
|
||||
private _extractAudio: boolean
|
||||
private _noMTime: boolean
|
||||
private _proxy: string
|
||||
private _extractAudio: boolean
|
||||
private _noMTime: boolean
|
||||
private _proxy: string
|
||||
|
||||
constructor(extractAudio = false, noMTime = true) {
|
||||
this._extractAudio = extractAudio
|
||||
this._noMTime = noMTime
|
||||
this._proxy = ""
|
||||
constructor(extractAudio = false, noMTime = true) {
|
||||
this._extractAudio = extractAudio
|
||||
this._noMTime = noMTime
|
||||
this._proxy = ""
|
||||
}
|
||||
|
||||
public get extractAudio(): boolean {
|
||||
return this._extractAudio
|
||||
}
|
||||
|
||||
public toggleExtractAudio() {
|
||||
this._extractAudio = !this._extractAudio
|
||||
return this
|
||||
}
|
||||
|
||||
public disableExtractAudio() {
|
||||
this._extractAudio = false
|
||||
return this
|
||||
}
|
||||
|
||||
public get noMTime(): boolean {
|
||||
return this._noMTime
|
||||
}
|
||||
|
||||
public toggleNoMTime() {
|
||||
this._noMTime = !this._noMTime
|
||||
return this
|
||||
}
|
||||
|
||||
public toString(): string {
|
||||
let args = ''
|
||||
|
||||
if (this._extractAudio) {
|
||||
args += '-x '
|
||||
}
|
||||
|
||||
public get extractAudio(): boolean {
|
||||
return this._extractAudio
|
||||
if (this._noMTime) {
|
||||
args += '--no-mtime '
|
||||
}
|
||||
|
||||
public toggleExtractAudio() {
|
||||
this._extractAudio = !this._extractAudio
|
||||
return this
|
||||
}
|
||||
|
||||
public disableExtractAudio() {
|
||||
this._extractAudio = false
|
||||
return this
|
||||
}
|
||||
|
||||
public get noMTime(): boolean {
|
||||
return this._noMTime
|
||||
}
|
||||
|
||||
public toggleNoMTime() {
|
||||
this._noMTime = !this._noMTime
|
||||
return this
|
||||
}
|
||||
|
||||
public toString(): string {
|
||||
let args = ''
|
||||
|
||||
if (this._extractAudio) {
|
||||
args += '-x '
|
||||
}
|
||||
|
||||
if (this._noMTime) {
|
||||
args += '--no-mtime '
|
||||
}
|
||||
|
||||
return args.trim()
|
||||
}
|
||||
|
||||
public fromString(str: string): CliArguments {
|
||||
if (str) {
|
||||
if (str.includes('-x')) {
|
||||
this._extractAudio = true
|
||||
}
|
||||
|
||||
if (str.includes('--no-mtime')) {
|
||||
this._noMTime = true
|
||||
}
|
||||
}
|
||||
return this
|
||||
return args.trim()
|
||||
}
|
||||
|
||||
public fromString(str: string): CliArguments {
|
||||
if (str) {
|
||||
if (str.includes('-x')) {
|
||||
this._extractAudio = true
|
||||
}
|
||||
|
||||
if (str.includes('--no-mtime')) {
|
||||
this._noMTime = true
|
||||
}
|
||||
}
|
||||
return this
|
||||
}
|
||||
}
|
||||
@@ -95,7 +95,7 @@ export function formatGiB(bytes: number) {
|
||||
export const roundMiB = (bytes: number) => `${(bytes / 1_000_000).toFixed(2)} MiB`
|
||||
export const formatSpeedMiB = (val: number) => `${roundMiB(val)}/s`
|
||||
|
||||
export const dateTimeComparatorFunc = (a: string, b: string) => new Date(a).getTime() - new Date(b).getTime()
|
||||
export const datetimeCompareFunc = (a: string, b: string) => new Date(a).getTime() - new Date(b).getTime()
|
||||
|
||||
export function isRPCResponse(object: any): object is RPCResponse<any> {
|
||||
return 'result' in object && 'id' in object
|
||||
|
||||
@@ -24,7 +24,7 @@ import { I18nContext } from '../providers/i18nProvider'
|
||||
import { RPCClientContext } from '../providers/rpcClientProvider'
|
||||
import { RootState } from '../stores/store'
|
||||
import type { RPCResponse, RPCResult } from '../types'
|
||||
import { dateTimeComparatorFunc, isRPCResponse } from '../utils'
|
||||
import { datetimeCompareFunc, isRPCResponse } from '../utils'
|
||||
|
||||
export default function Home() {
|
||||
// redux state
|
||||
@@ -87,7 +87,7 @@ export default function Home() {
|
||||
|
||||
setActiveDownloads((event.result ?? [])
|
||||
.filter(f => !!f.info.url)
|
||||
.sort((a, b) => dateTimeComparatorFunc(
|
||||
.sort((a, b) => datetimeCompareFunc(
|
||||
b.info.created_at,
|
||||
a.info.created_at,
|
||||
)))
|
||||
|
||||
Reference in New Issue
Block a user