Browse Source

feat(frontend): 添加docker环境下电影连续剧目录必须为/media目录下的表单验证

Signed-off-by: Myon <[email protected]>
Myon 3 years ago
parent
commit
29d5aeec25

+ 19 - 0
frontend/src/pages/settings/useSettings.js

@@ -3,6 +3,8 @@ import SettingApi from 'src/api/SettingApi';
 import { SystemMessage } from 'src/utils/Message';
 import { deepCopy } from 'src/utils/CommonUtils';
 import { useAppStatusLoading } from 'src/composables/useAppStatusLoading';
+import { isRunningInDocker } from 'src/store/systemState';
+import { Dialog } from 'quasar';
 
 const { startLoading } = useAppStatusLoading();
 
@@ -62,6 +64,23 @@ export const useSettings = () => {
 export const submitting = ref(false);
 
 export const submitAll = async () => {
+  if (isRunningInDocker.value) {
+    const isMoviePathStarsWithMedia = formModel.common_settings.movie_paths.every((path) => path.startsWith('/media'));
+    const isSeriesPathStarsWithMedia = formModel.common_settings.series_paths.every((path) =>
+      path.startsWith('/media')
+    );
+    if (!isMoviePathStarsWithMedia || !isSeriesPathStarsWithMedia) {
+      Dialog.create({
+        title: '请修改相关配置后继续',
+        html: true,
+        message:
+          '软件运行在Docker中,请将基础设置中的电影和电视剧目录修改为 <b>/media</b> 下的目录,否则可能会因为权限问题导致无法正确的加载媒体库',
+        persistent: true,
+        ok: '确定',
+      });
+      return;
+    }
+  }
   submitting.value = true;
   const [, err] = await SettingApi.update(formModel);
   submitting.value = false;

+ 19 - 1
frontend/src/pages/setup/index.vue

@@ -57,9 +57,10 @@ import { setupState, useSetup } from 'pages/setup/useSetup';
 import EmbySetupForm from 'pages/setup/EmbySetupForm';
 import LoginBgArea from 'pages/access/login/LoginBgArea';
 import { deepCopy } from 'src/utils/CommonUtils';
-import { getInfo } from 'src/store/systemState';
+import { getInfo, isRunningInDocker } from 'src/store/systemState';
 import { SUB_NAME_FORMAT_NORMAL } from 'src/constants/SettingConstants';
 import { useAppStatusLoading } from 'src/composables/useAppStatusLoading';
+import { Dialog } from 'quasar';
 
 useSetup();
 const { startLoading } = useAppStatusLoading();
@@ -95,6 +96,23 @@ const showSubmitButton = computed(() => {
 });
 
 const submit = async () => {
+  if (isRunningInDocker.value) {
+    // 检测电影和连续剧目录是否以 /media 开头
+    const isMovieStartsWithMedia = setupState.form.movieFolder.every((item) => item.startsWith('/media'));
+    const isSeriesStartsWithMedia = setupState.form.seriesFolder.every((item) => item.startsWith('/media'));
+    if (!isMovieStartsWithMedia || !isSeriesStartsWithMedia) {
+      Dialog.create({
+        title: '请修改相关配置后继续',
+        html: true,
+        message:
+          '软件运行在Docker中,请将电影和电视剧目录修改为 <b>/media</b> 下的目录,否则可能会因为权限问题导致无法正确的加载媒体库',
+        persistent: true,
+        ok: '确定',
+      });
+      return;
+    }
+  }
+
   let isValid = true;
   if (setupState.form.mediaServer === 'emby') {
     isValid = await mediaServerSettingForm.value.$refs.form.validate();

+ 1 - 0
frontend/src/store/systemState.js

@@ -13,6 +13,7 @@ export const getInfo = async () => {
 };
 
 export const isJobRunning = computed(() => systemState.jobStatus?.status === 'running');
+export const isRunningInDocker = computed(() => systemState.systemInfo?.is_running_in_docker);
 
 export const getJobsStatus = async () => {
   const [res] = await JobApi.getStatus();