瀏覽代碼

feat(frontend): 视频字幕列表添加手动字幕时间轴校准按钮

Myon 2 年之前
父節點
當前提交
8bcb5a4a96

+ 18 - 1
frontend/src/pages/library/movies/ListItemMovie.vue

@@ -40,6 +40,22 @@
                 <q-item-section class="overflow-hidden ellipsis" :title="item.split`(/\/|\\/)`.pop()">
                   <a class="text-primary" :href="getUrl(item)" target="_blank">{{ item.split(/\/|\\/).pop() }}</a>
                 </q-item-section>
+                <q-item-section side>
+                  <q-btn
+                    color="primary"
+                    round
+                    flat
+                    dense
+                    icon="construction"
+                    :title="`字幕时间轴校准${
+                      !formModel.advanced_settings.fix_time_line
+                        ? '(此功能需要在进阶设置里开启自动校正字幕时间轴,检测到你当前尚未开启此选项)'
+                        : ''
+                    }`"
+                    @click="doFixSubtitleTimeline(item)"
+                    :disable="!formModel.advanced_settings.fix_time_line"
+                  ></q-btn>
+                </q-item-section>
               </q-item>
             </q-list>
           </q-popup-proxy>
@@ -77,11 +93,12 @@ import LibraryApi from 'src/api/LibraryApi';
 import { SystemMessage } from 'src/utils/message';
 import { VIDEO_TYPE_MOVIE } from 'src/constants/SettingConstants';
 import { useQuasar } from 'quasar';
-import { getUrl, subtitleUploadList } from 'pages/library/use-library';
+import { doFixSubtitleTimeline, getUrl, subtitleUploadList } from 'pages/library/use-library';
 import BtnIgnoreVideo from 'pages/library/BtnIgnoreVideo';
 import BtnUploadSubtitle from 'pages/library/BtnUploadSubtitle';
 import BtnDialogPreviewVideo from 'pages/library/BtnDialogPreviewVideo';
 import BtnDialogSearchSubtitle from 'pages/library/BtnDialogSearchSubtitle';
+import { formModel } from 'pages/settings/use-settings';
 
 const props = defineProps({
   data: Object,

+ 19 - 1
frontend/src/pages/library/tvs/DialogTVDetail.vue

@@ -104,7 +104,7 @@
                   >
                     <q-popup-proxy anchor="top right">
                       <q-list dense>
-                        <q-item v-for="(item1, index) in item.sub_f_path_list" :key="item1">
+                        <q-item v-for="(item1, index) in item.sub_url_list" :key="item1">
                           <q-item-section side>{{ index + 1 }}.</q-item-section>
 
                           <q-item-section class="overflow-hidden ellipsis" :title="item1.split(/\/|\\/).pop()">
@@ -112,6 +112,22 @@
                               item1.split(/\/|\\/).pop()
                             }}</a>
                           </q-item-section>
+                          <q-item-section side>
+                            <q-btn
+                              color="primary"
+                              round
+                              flat
+                              dense
+                              icon="construction"
+                              :title="`字幕时间轴校准${
+                                !formModel.advanced_settings.fix_time_line
+                                  ? '(此功能需要在进阶设置里开启自动校正字幕时间轴,检测到你当前尚未开启此选项)'
+                                  : ''
+                              }`"
+                              @click="doFixSubtitleTimeline(item1)"
+                              :disable="!formModel.advanced_settings.fix_time_line"
+                            ></q-btn>
+                          </q-item-section>
                         </q-item>
                       </q-list>
                     </q-popup-proxy>
@@ -164,6 +180,8 @@ import BtnUploadSubtitle from 'pages/library/BtnUploadSubtitle';
 import BtnDialogPreviewVideo from 'pages/library/BtnDialogPreviewVideo';
 import BtnDialogSearchSubtitle from 'pages/library/BtnDialogSearchSubtitle';
 import BtnUploadMultipleForTv from 'pages/library/tvs/BtnUploadMultipleForTv';
+import { doFixSubtitleTimeline } from 'pages/library/use-library';
+import { formModel } from 'pages/settings/use-settings';
 
 const props = defineProps({
   data: Object,

+ 20 - 0
frontend/src/pages/library/use-library.js

@@ -99,3 +99,23 @@ export const useLibrary = () => {
     refreshCacheLoading,
   };
 };
+
+export const doFixSubtitleTimeline = async (path) => {
+  const formData = new FormData();
+  formData.append('video_f_path', path);
+  const subtitleUrl = getUrl(path);
+  // 先下载字幕到内存,生成file文件
+  const res = await fetch(subtitleUrl);
+  if (!res.ok) {
+    SystemMessage.error('获取字幕文件失败');
+    return;
+  }
+  const blob = await res.blob();
+  const file = new File([blob], path.split(/\/|\\/).pop());
+  formData.append('file', file);
+  await LibraryApi.uploadSubtitle(formData);
+  SystemMessage.success('已提交时间轴校准', {
+    timeout: 3000,
+  });
+  await getSubtitleUploadList();
+};