diff --git a/public/media_control_client_product.js b/public/media_control_client_product.js index 0a5a8ac..123ec32 100644 --- a/public/media_control_client_product.js +++ b/public/media_control_client_product.js @@ -1,3 +1,5 @@ window.media_control_client_product = "LED_PLAYER"; // window.media_control_client_product = "SPECIAL_VIDEO"; // window.media_control_client_product = "RK_3568"; + +window.media_control_client_custom_title = "SmartPlayer"; diff --git a/src/common/ClientConnection.ts b/src/common/ClientConnection.ts index 97e1df6..b9a3f6a 100644 --- a/src/common/ClientConnection.ts +++ b/src/common/ClientConnection.ts @@ -1519,6 +1519,15 @@ export default class ClientConnection { console.error(e); } } + public async CheckModeIndex(mode_index:number) { + try { + return await this.doRpc( + new Protocol.RpcCheckModeIndexRequestEntity(mode_index) + ); + } catch (e) { + console.error(e); + } + } } export interface NotifyMessage { diff --git a/src/components/BackgroundImageDialog.vue b/src/components/BackgroundImageDialog.vue index 6b6df9c..46d69be 100644 --- a/src/components/BackgroundImageDialog.vue +++ b/src/components/BackgroundImageDialog.vue @@ -1,256 +1,226 @@ - - - - - + + + + + diff --git a/src/components/FileManageDialog.vue b/src/components/FileManageDialog.vue index 098f259..22d4d9e 100644 --- a/src/components/FileManageDialog.vue +++ b/src/components/FileManageDialog.vue @@ -346,14 +346,12 @@ style="height: 69vh; width: 70%" :disable="uploader_loading" :url="getUrl" - method="post" - :headers="generatorFileUploadHeaders" + multiple + method="POST" :label="$t('select file') + ':'" :accept="uploader_accept" @start="onStartUpload" - @uploaded="onUploaded" - @failed="onFailed" - @added="/*onFileAdded*/ null" + @finish="onFailed" > @@ -687,7 +685,6 @@ export default defineComponent({ loading.value = false; }; - const refresh_file_list_async = async () => { const response = await _request_list_files(path.value); _show_files(response); @@ -882,21 +879,6 @@ export default defineComponent({ resolve = _resolve; }); }, - generatorFileUploadHeaders(files: File[]) { - if (files.length > 0) { - return [ - { - name: HttpProtocol.kHeaderXProductName, - value: HttpProtocol.getProductName($store), - }, - { - name: HttpProtocol.kHeaderXFileLength, - value: files[0].size, - }, - ]; - } - return []; - }, resetData() { loading.value = false; uploading.value = false; @@ -912,67 +894,135 @@ export default defineComponent({ resolve_value = null; }, async onCreateNewFolder() { - $q.dialog({ - title: $t.t("create folder"), - message: $t.t("input folder name") + ":", - prompt: { - model: "", - isValid: (val: string) => !!val && val.trim().length > 0, - type: "text", - }, - ok: { - label: $t.t("ok"), - noCaps: true, - flat: true, - }, - cancel: { - label: $t.t("cancel"), - noCaps: true, - flat: true, - }, - persistent: true, - }).onOk(async (data: string) => { - const response = await GlobalData.getInstance() - .getCurrentClient() - ?.CreateDirectoryFileManager(path.value, data); - if (response && response.success) { - refresh_file_list(); - $q.notify({ - type: "positive", - message: $t.t("create folder") + $t.t("success") + "!", - position: "top", - timeout: 1500, - }); - } else { - $q.notify({ - type: "warning", - message: - $t.t("create folder") + - $t.t("fail") + - "!" + - (response ? response.error_message : ""), - position: "top", - timeout: 1500, - }); - } - }); - }, - - selectFile, - async deleteFile(file: FileEntity) { - let response = null; - try { - response = await GlobalData.getInstance() - .getCurrentClient() - ?.DeleteFileManager(path.value, file.name); - } catch (e) { - console.log(e); - } + $q.dialog({ + title: $t.t("create folder"), + message: $t.t("input folder name") + ":", + prompt: { + model: "", + isValid: (val: string) => + !!val && val.trim().length > 0&& val.indexOf(".") != 0 , + type: "text", + }, + ok: { + label: $t.t("ok"), + noCaps: true, + flat: true, + }, + cancel: { + label: $t.t("cancel"), + noCaps: true, + flat: true, + }, + persistent: true, + }).onOk(async (data: string) => { + const response = await GlobalData.getInstance() + .getCurrentClient() + ?.CreateDirectoryFileManager(path.value, data); + console.log(response); if (response && response.success) { refresh_file_list(); $q.notify({ type: "positive", - message: $t.t("delete file") + $t.t("success") + "!", + message: $t.t("create folder") + $t.t("success") + "!", + position: "top", + timeout: 1500, + }); + } else { + // if ( + // response?.error_message == + // "the folder name cannot start with a '.'" + // ) { + // $q.notify({ + // type: "warning", + // message: + // $t.t("create folder") + + // $t.t("fail") + + // "!" + + // $t.t("the folder name cannot start with a '.'"), + // position: "top", + // timeout: 1500, + // }); + // } + // else { + if (response) { + $q.notify({ + type: "warning", + message: + $t.t("create folder") + + $t.t("fail") + + "! " + + $t.t(response.error_message), + position: "top", + timeout: 1500, + }); + } + } + }); + }, + + selectFile, + async deleteFile(file: FileEntity) { + let response = null; + try { + response = await GlobalData.getInstance() + .getCurrentClient() + ?.DeleteFileManager(path.value, file.name); + } catch (e) { + console.log(e); + } + if (response && response.success) { + refresh_file_list(); + $q.notify({ + type: "positive", + message: $t.t("delete file") + $t.t("success") + "!", + position: "top", + timeout: 1500, + }); + } else { + $q.notify({ + type: "warning", + message: + $t.t("delete file") + + $t.t("fail") + + "!" + + (response ? response.error_message : ""), + position: "top", + timeout: 1500, + }); + } + }, + renameFile(file: FileEntity) { + $q.dialog({ + title: $t.t("rename"), + message: $t.t("input new file name") + ":", + prompt: { + model: file.name, + isValid: (val: string) => !!val && val.trim().length > 0, + type: "text", + }, + ok: { + label: $t.t("ok"), + noCaps: true, + flat: true, + }, + cancel: { + label: $t.t("cancel"), + noCaps: true, + flat: true, + }, + persistent: true, + }).onOk(async (data: string) => { + if (data == file.name) { + return; + } + let response = await GlobalData.getInstance() + .getCurrentClient() + ?.RenameFileManager(path.value, file.name, data); + if (response && response.success) { + refresh_file_list(); + $q.notify({ + type: "positive", + message: $t.t("file rename") + $t.t("success") + "!", position: "top", timeout: 1500, }); @@ -980,7 +1030,7 @@ export default defineComponent({ $q.notify({ type: "warning", message: - $t.t("delete file") + + $t.t("file rename") + $t.t("fail") + "!" + (response ? response.error_message : ""), @@ -988,55 +1038,7 @@ export default defineComponent({ timeout: 1500, }); } - }, - renameFile(file: FileEntity) { - $q.dialog({ - title: $t.t("rename"), - message: $t.t("input new file name") + ":", - prompt: { - model: file.name, - isValid: (val: string) => !!val && val.trim().length > 0, - type: "text", - }, - ok: { - label: $t.t("ok"), - noCaps: true, - flat: true, - }, - cancel: { - label: $t.t("cancel"), - noCaps: true, - flat: true, - }, - persistent: true, - }).onOk(async (data: string) => { - if (data == file.name) { - return; - } - let response = await GlobalData.getInstance() - .getCurrentClient() - ?.RenameFileManager(path.value, file.name, data); - if (response && response.success) { - refresh_file_list(); - $q.notify({ - type: "positive", - message: $t.t("file rename") + $t.t("success") + "!", - position: "top", - timeout: 1500, - }); - } else { - $q.notify({ - type: "warning", - message: - $t.t("file rename") + - $t.t("fail") + - "!" + - (response ? response.error_message : ""), - position: "top", - timeout: 1500, - }); - } - }); + }); }, copyStringToClipboard(value: string) { copyToClipboard(value); @@ -1068,8 +1070,8 @@ export default defineComponent({ getUrl(file: File[]) { let url = GlobalData.getInstance().createCurrentRequestUrl(); if (url) { - url.pathname = HttpProtocol.RequestUploadFile; - url.searchParams.append("type", HttpProtocol.HttpUploadTypeNormal); + url.pathname = "/upload_media_file"; //HttpProtocol.RequestUploadFile; + // url.searchParams.append("type", HttpProtocol.HttpUploadTypeNormal); url.searchParams.append("base_dir", path.value); return url.toString(); } @@ -1078,99 +1080,20 @@ export default defineComponent({ onStartUpload() { loading.value = true; }, - async onFileAdded(files: File[] | File) { - setTimeout(async () => { - const onError = async (file: File | null) => { - await nextTick(() => {}); - uploader.value.reset(); - + async onFailed(info: any) { + let file_list: any = await _request_list_files(path.value); + setTimeout(() => { + if (files.value.length != file_list.files.length) { $q.notify({ - color: "negative", - icon: "warning", - message: $t.t("load file error") + "!", + type: "positive", + message: $t.t("file upload") + $t.t("finish") + "!", position: "top", - timeout: 3000, + timeout: 1500, }); - }; - - let file: File | null = null; - - try { - if (Array.isArray(files)) { - if (files.length > 0) { - file = files[0]; - } - } else { - file = files; - } - if (file) { - const file_name = file.name; - const blob = file.slice(0, 1024 * 1024 * 1); // 1 MB - uploader_loading.value = true; - - try { - let url = GlobalData.getInstance().createCurrentRequestUrl(); - if (url) { - url.pathname = HttpProtocol.RequestPathCheckFileSupport; - - // if (FileSuffixHelper.isVideoPath(file_name)) { - - // } - const data = new FormData(); - data.append( - "file", - new File([blob], file_name, { - lastModified: file.lastModified, - }) - ); - const response = await api.post(url.toString(), data, { - headers: { - "Content-Type": "multipart/form-data", - }, - }); - if (response && response.data && response.data.is_support) { - } else { - onError(file); - } - } else { - throw ""; - } - } catch (e) { - console.error(e); - onError(file); - } - uploader_loading.value = false; - return; - } - } catch (e) { - console.error(e); - onError(file); + loading.value = false; + uploading.value = false; } - }, 1); - }, - onUploaded() { - uploading.value = false; - uploader.value.reset(); - refresh_file_list(); - - $q.notify({ - type: "positive", - message: $t.t("file upload") + $t.t("success") + "!", - position: "top", - timeout: 1500, - }); - loading.value = false; - }, - onFailed(info: any) { - console.log(info); - $q.notify({ - type: "warning", - message: $t.t("file upload") + $t.t("fail") + "!", - position: "top", - timeout: 1500, - }); - loading.value = false; - loading.value = false; + }, 500); }, copyFile(file: FileEntity) { if (file) { diff --git a/src/components/ModeDialog.vue b/src/components/ModeDialog.vue index d218726..be459a0 100644 --- a/src/components/ModeDialog.vue +++ b/src/components/ModeDialog.vue @@ -1,537 +1,541 @@ - - - - - + + + + + diff --git a/src/components/RecoveryDatabaseDialog.vue b/src/components/RecoveryDatabaseDialog.vue index a6dd0b4..26dbe07 100644 --- a/src/components/RecoveryDatabaseDialog.vue +++ b/src/components/RecoveryDatabaseDialog.vue @@ -1,247 +1,225 @@ - - - - - + + + + + diff --git a/src/components/UpgradeDialog.vue b/src/components/UpgradeDialog.vue index d287d7c..74a1e50 100644 --- a/src/components/UpgradeDialog.vue +++ b/src/components/UpgradeDialog.vue @@ -61,7 +61,6 @@ ref="uploader_software" :url="upload_url_software" method="post" - :headers="generatorFileUploadHeaders" :label="$t('select software upgrade file') + ':'" accept=".zip,.tar,.tar.gz" :hide-upload-btn="true" @@ -76,7 +75,6 @@ ref="uploader_rootfs" :url="upload_url_rootfs" method="post" - :headers="generatorFileUploadHeaders" :label="$t('select rootfs upgrade file') + ':'" accept=".img" :hide-upload-btn="true" @@ -85,6 +83,7 @@ @added="(files) => files && (file_count += files.length)" @removed="(files) => files && (file_count -= files.length)" /> + @@ -92,9 +91,7 @@ - - V: {{ server_version }} - + 0) { - return [ - { - name: HttpProtocol.kHeaderXProductName, - value: HttpProtocol.getProductName($store), - }, - { - name: HttpProtocol.kHeaderXFileLength, - value: files[0].size, - }, - ]; - } - return []; - }, loga(a: any) { console.log(a); }, showDialog() { show_dialog.value = true; - let client = GlobalData.getInstance().getCurrentClient(); - if (client) { - let url = new URL(client.url); - url.port = - GlobalData.getInstance().applicationConfig?.httpserver_port ?? - HttpProtocol.DefaultHttpPort.toString(); - url.pathname = HttpProtocol.RequestUploadFile; - url.protocol = "http:"; - url.searchParams.append("type", HttpProtocol.UploadTypeRootFS); - upload_url_rootfs.value = url.toString(); - - url.searchParams.set("type", HttpProtocol.UploadTypeSoftware); + let url = GlobalData.getInstance().createCurrentRequestUrl(); + if (url) { + url.pathname = "/upload_soft_file"; upload_url_software.value = url.toString(); - try { - client?.getBuildInfo()?.then((build_info) => { - if (build_info) { - server_version.value = build_info.version; - } - }); - // console.log(build_info); - } catch {} + url.pathname = "/upload_root_fs_file"; + upload_url_rootfs.value = url.toString(); } }, resetData() { diff --git a/src/entities/HttpProtocol.ts b/src/entities/HttpProtocol.ts index 9956eff..cf743e7 100644 --- a/src/entities/HttpProtocol.ts +++ b/src/entities/HttpProtocol.ts @@ -1,33 +1,33 @@ -export namespace HttpProtocol { - export const DefaultHttpPort = 80; - export const RequestUploadFile = "/upload_file"; - export const RequestPathUpdateDBBackupFile = "/common/update_db_backup_file"; - export const RequestPathDBBackup = "/db_backup"; - export const RequestPathListFile = "/list_file"; - export const RequestPathCreateDirectory = "/create_directory"; - export const RequestPathCheckFileSupport = "/check_file_support"; - export const RequestPathGetWebscoketPort = "/get_websocket_port"; - export const RequestPathGetAllPort = "/get_all_port"; - export const RequestPathDeleteFile = "/delete_file"; - export const RequestPathRenameFile = "/rename_file"; - export const RequestCheckModeIndex = "/check_mode_index"; - - export const HttpUploadTypeNormal = "U_T_Normal"; - export const UploadTypeBackgroundImage = "U_T_BACKGROUND_IMAGE"; - export const UploadTypeMedia = "U_T_MEDIA"; - export const UploadTypeDatabase = "U_T_DATABASE"; - export const UploadTypeRootFS = "U_T_ROOT_FS"; - export const UploadTypeSoftware = "U_T_SOFTWARE"; - - export const kHeaderXFileLength = "X-File-Length"; - export const kHeaderXFileMD5 = "X-File-MD5"; - export const kHeaderXProductName = "X-Product-Name"; - const kHeaderDefaultValueXProductName = "LED_PLAYER"; - - export const getProductName = ($store: any): String => { - if ($store && $store.state && $store.state.product_name) { - return $store.state.product_name; - } - return kHeaderDefaultValueXProductName; - }; -} +export namespace HttpProtocol { + export const DefaultHttpPort = 80; + export const RequestUploadFile = "/upload_file"; + export const RequestPathUpdateDBBackupFile = "/update_db_backup_file"; + export const RequestPathDBBackup = "/download_db_backup_file"; + export const RequestPathListFile = "/list_file"; + export const RequestPathCreateDirectory = "/create_directory"; + export const RequestPathCheckFileSupport = "/check_file_support"; + export const RequestPathGetWebscoketPort = "/get_websocket_port"; + export const RequestPathGetAllPort = "/get_all_port"; + export const RequestPathDeleteFile = "/delete_file"; + export const RequestPathRenameFile = "/rename_file"; + export const RequestCheckModeIndex = "/check_mode_index"; + + export const HttpUploadTypeNormal = "U_T_Normal"; + export const UploadTypeBackgroundImage = "U_T_BACKGROUND_IMAGE"; + export const UploadTypeMedia = "U_T_MEDIA"; + export const UploadTypeDatabase = "U_T_DATABASE"; + export const UploadTypeRootFS = "U_T_ROOT_FS"; + export const UploadTypeSoftware = "U_T_SOFTWARE"; + + export const kHeaderXFileLength = "X-File-Length"; + export const kHeaderXFileMD5 = "X-File-MD5"; + export const kHeaderXProductName = "X-Product-Name"; + const kHeaderDefaultValueXProductName = "LED_PLAYER"; + + export const getProductName = ($store: any): String => { + if ($store && $store.state && $store.state.product_name) { + return $store.state.product_name; + } + return kHeaderDefaultValueXProductName; + }; +} diff --git a/src/entities/WSProtocol.ts b/src/entities/WSProtocol.ts index 5922bce..54f1711 100644 --- a/src/entities/WSProtocol.ts +++ b/src/entities/WSProtocol.ts @@ -534,6 +534,9 @@ export namespace Protocol { public static get kRpcFileManagerCreateDirectory() { return Commands.PROTOCOL_PREFIX + "RpcFileManagerCreateDirectory"; } + public static get kRpcCheckModeIndex() { + return Commands.PROTOCOL_PREFIX + "RpcCheckModeIndex"; + } static _all_commands = new Set([ Commands.kUnKnowCommand, Commands.kSearchDevice, @@ -668,6 +671,7 @@ export namespace Protocol { Commands.kRpcFileManagerRename, Commands.kRpcFileManagerDelete, Commands.kRpcFileManagerCreateDirectory, + Commands.kRpcCheckModeIndex, ]); public static get AllCommands() { return this._all_commands; @@ -3541,4 +3545,21 @@ export namespace Protocol { error_message="" error_code=0; } + export class RpcCheckModeIndexRequestEntity extends PacketEntity{ + constructor(mode_index:number,rpc_id = 0) { + super(); + super.command = Commands.kRpcCheckModeIndex; + super.flag = PacketEntity.FLAG_REQUEST; + this.mode_index=mode_index + } + mode_index = 0; + } + export class RpcCheckModeIndexResponseEntity extends PacketEntity{ + constructor() { + super(); + super.flag = PacketEntity.FLAG_RESPONSE; + } + success = false; + + } } diff --git a/src/i18n/en-US/index.ts b/src/i18n/en-US/index.ts index 2914a8b..fcb4bb0 100644 --- a/src/i18n/en-US/index.ts +++ b/src/i18n/en-US/index.ts @@ -294,6 +294,7 @@ export default { "open left tool bar": "Open Left Tool Bar", "open right tool bar": "Open Right Tool Bar", fail: " Fail", + finish:"Finish", "edit group": "Edit Group", "open window": "Open Window", "close all windows": "Close All Windows", @@ -444,4 +445,6 @@ export default { resize: "Resize", "export magic": "Export", "raster graph": "Raster Graph", + "the folder name cannot start with a '.'":"The Folder Name Cannot Start With a '.'", + }; diff --git a/src/i18n/zh-CN/index.ts b/src/i18n/zh-CN/index.ts index 6c3a6a4..d39045e 100644 --- a/src/i18n/zh-CN/index.ts +++ b/src/i18n/zh-CN/index.ts @@ -5,6 +5,7 @@ export default { " ": "", title: "MediaPlayerWebApp", failed: "失败", + finish:"完成", fail: "失败", error: "错误", Confirm: "确认", @@ -712,4 +713,5 @@ export default { resize: "缩放", "export magic": "导出", "raster graph": "栅格图", + "the folder name cannot start with a '.'":"文件夹名称不能以“.” 开头", }; diff --git a/src/pages/TopToolBar.vue b/src/pages/TopToolBar.vue index b5b625c..100000c 100644 --- a/src/pages/TopToolBar.vue +++ b/src/pages/TopToolBar.vue @@ -305,7 +305,10 @@ @@ -457,7 +457,6 @@ - @@ -711,9 +710,9 @@ export default defineComponent({ show_device_list.value = typeof (window).user_search?.hide_device_list == "undefined"; }); - let isfan=ref(true) + let isfan = ref(true); if ((window as any).$wujie) { - isfan.value=false + isfan.value = false; } return { show_advanced_menu, @@ -738,8 +737,11 @@ export default defineComponent({ console.log(url.toString()); let response = await api.get(url.toString()); if (response.status == 200 && response && response.data) { - url.pathname = - HttpProtocol.RequestPathDBBackup + "/" + response.data; + console.log(response.data); + + url.pathname = HttpProtocol.RequestPathDBBackup; + url.searchParams.append("name", response.data); + console.log(url); openURL(url.toString()); } else { $q.notify({ @@ -992,7 +994,7 @@ export default defineComponent({ isfull.value = !isfull.value; if ((window as any).$wujie) { const $wujie = (window as any).$wujie as IWuJieInterface; - $wujie?.bus.$emit("isfull", isfull.value); + $wujie?.bus.$emit("isfull", isfull.value); } }, };