subtitld 0.0.0.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. subtitld/__init__.py +19 -0
  2. subtitld/__main__.py +240 -0
  3. subtitld/ftfy/char_classes.dat +0 -0
  4. subtitld/graphics/Montserrat-Black.ttf +0 -0
  5. subtitld/graphics/Montserrat-BlackItalic.ttf +0 -0
  6. subtitld/graphics/Montserrat-Bold.ttf +0 -0
  7. subtitld/graphics/Montserrat-BoldItalic.ttf +0 -0
  8. subtitld/graphics/Montserrat-ExtraBold.ttf +0 -0
  9. subtitld/graphics/Montserrat-ExtraBoldItalic.ttf +0 -0
  10. subtitld/graphics/Montserrat-ExtraLight.ttf +0 -0
  11. subtitld/graphics/Montserrat-ExtraLightItalic.ttf +0 -0
  12. subtitld/graphics/Montserrat-Italic.ttf +0 -0
  13. subtitld/graphics/Montserrat-Light.ttf +0 -0
  14. subtitld/graphics/Montserrat-LightItalic.ttf +0 -0
  15. subtitld/graphics/Montserrat-Medium.ttf +0 -0
  16. subtitld/graphics/Montserrat-MediumItalic.ttf +0 -0
  17. subtitld/graphics/Montserrat-Regular.ttf +0 -0
  18. subtitld/graphics/Montserrat-SemiBold.ttf +0 -0
  19. subtitld/graphics/Montserrat-SemiBoldItalic.ttf +0 -0
  20. subtitld/graphics/Montserrat-Thin.ttf +0 -0
  21. subtitld/graphics/Montserrat-ThinItalic.ttf +0 -0
  22. subtitld/graphics/Ubuntu-B.ttf +0 -0
  23. subtitld/graphics/Ubuntu-BI.ttf +0 -0
  24. subtitld/graphics/Ubuntu-C.ttf +0 -0
  25. subtitld/graphics/Ubuntu-L.ttf +0 -0
  26. subtitld/graphics/Ubuntu-LI.ttf +0 -0
  27. subtitld/graphics/Ubuntu-M.ttf +0 -0
  28. subtitld/graphics/Ubuntu-MI.ttf +0 -0
  29. subtitld/graphics/Ubuntu-R.ttf +0 -0
  30. subtitld/graphics/Ubuntu-RI.ttf +0 -0
  31. subtitld/graphics/Ubuntu-Th.ttf +0 -0
  32. subtitld/graphics/UbuntuMono-B.ttf +0 -0
  33. subtitld/graphics/UbuntuMono-BI.ttf +0 -0
  34. subtitld/graphics/UbuntuMono-R.ttf +0 -0
  35. subtitld/graphics/UbuntuMono-RI.ttf +0 -0
  36. subtitld/graphics/add_and_play.svg +4 -0
  37. subtitld/graphics/add_from_last.svg +4 -0
  38. subtitld/graphics/add_from_last_checked.svg +4 -0
  39. subtitld/graphics/add_subtitle_icon.svg +4 -0
  40. subtitld/graphics/add_subtitle_to_next_start.svg +4 -0
  41. subtitld/graphics/add_subtitle_to_next_start_checked.svg +4 -0
  42. subtitld/graphics/background_watermark.svg +9 -0
  43. subtitld/graphics/character_count_icon.svg +1 -0
  44. subtitld/graphics/checkbox_checked.svg +8 -0
  45. subtitld/graphics/checkbox_checked_hover.svg +8 -0
  46. subtitld/graphics/checkbox_disabled.svg +4 -0
  47. subtitld/graphics/checkbox_unchecked.svg +5 -0
  48. subtitld/graphics/checkbox_unchecked_hover.svg +5 -0
  49. subtitld/graphics/combobox_down_arrow.svg +4 -0
  50. subtitld/graphics/cps_icon.svg +1 -0
  51. subtitld/graphics/dialog_close_icon.svg +4 -0
  52. subtitld/graphics/dialog_close_icon_hover.svg +4 -0
  53. subtitld/graphics/dubbing_container_collapse_icon.svg +8 -0
  54. subtitld/graphics/dubbing_container_expand_icon.svg +4 -0
  55. subtitld/graphics/file.svg +4 -0
  56. subtitld/graphics/gap_add_icon.svg +4 -0
  57. subtitld/graphics/gap_remove_icon.svg +4 -0
  58. subtitld/graphics/grid_frames_icon.svg +4 -0
  59. subtitld/graphics/grid_frames_icon_checked.svg +4 -0
  60. subtitld/graphics/grid_frames_icon_disabled.svg +4 -0
  61. subtitld/graphics/grid_scenes_icon.svg +4 -0
  62. subtitld/graphics/grid_scenes_icon_checked.svg +4 -0
  63. subtitld/graphics/grid_scenes_icon_disabled.svg +4 -0
  64. subtitld/graphics/grid_seconds_icon.svg +4 -0
  65. subtitld/graphics/grid_seconds_icon_checked.svg +4 -0
  66. subtitld/graphics/grid_seconds_icon_disabled.svg +4 -0
  67. subtitld/graphics/last_end_to_current_position_icon.svg +4 -0
  68. subtitld/graphics/last_start_last_end_to_current_position_button.svg +9 -0
  69. subtitld/graphics/last_start_to_current_position_icon.svg +4 -0
  70. subtitld/graphics/left_panel_autosave.svg +4 -0
  71. subtitld/graphics/left_panel_dubbing.svg +4 -0
  72. subtitld/graphics/left_panel_export.svg +4 -0
  73. subtitld/graphics/left_panel_global.svg +4 -0
  74. subtitld/graphics/left_panel_import.svg +4 -0
  75. subtitld/graphics/left_panel_interface.svg +4 -0
  76. subtitld/graphics/left_panel_keyboard.svg +4 -0
  77. subtitld/graphics/left_panel_metadata.svg +4 -0
  78. subtitld/graphics/left_panel_navigation_background.svg +11 -0
  79. subtitld/graphics/left_panel_qualitycheck.svg +4 -0
  80. subtitld/graphics/left_panel_speakers.svg +4 -0
  81. subtitld/graphics/left_panel_subtitles.svg +1 -0
  82. subtitld/graphics/left_panel_transcription.svg +4 -0
  83. subtitld/graphics/left_panel_translation.svg +4 -0
  84. subtitld/graphics/merge_back_selected_subtitle_icon.svg +4 -0
  85. subtitld/graphics/merge_next_selected_subtitle_icon.svg +4 -0
  86. subtitld/graphics/move_backward_subtitle.svg +4 -0
  87. subtitld/graphics/move_end_back_subtitle.svg +4 -0
  88. subtitld/graphics/move_end_forward_subtitle.svg +4 -0
  89. subtitld/graphics/move_forward_subtitle.svg +4 -0
  90. subtitld/graphics/move_start_back_subtitle.svg +4 -0
  91. subtitld/graphics/move_start_forward_subtitle.svg +4 -0
  92. subtitld/graphics/music_voice_separation_music_icon.svg +4 -0
  93. subtitld/graphics/music_voice_separation_music_icon_disabled.svg +4 -0
  94. subtitld/graphics/music_voice_separation_voice_icon.svg +4 -0
  95. subtitld/graphics/music_voice_separation_voice_icon_disabled.svg +4 -0
  96. subtitld/graphics/new_line_icon.svg +1 -0
  97. subtitld/graphics/next_end_to_current_position_icon.svg +4 -0
  98. subtitld/graphics/next_start_next_end_to_current_position_button.svg +4 -0
  99. subtitld/graphics/next_start_to_current_position_icon.svg +4 -0
  100. subtitld/graphics/pause_icon.svg +12 -0
  101. subtitld/graphics/play_from_last_start_icon.svg +5 -0
  102. subtitld/graphics/play_from_next_start_icon.svg +7 -0
  103. subtitld/graphics/play_icon.svg +12 -0
  104. subtitld/graphics/play_icon_hover.svg +12 -0
  105. subtitld/graphics/play_icon_pressed.svg +12 -0
  106. subtitld/graphics/playback_repeat.svg +4 -0
  107. subtitld/graphics/playback_speed.svg +6 -0
  108. subtitld/graphics/playbackspeed_border.svg +5 -0
  109. subtitld/graphics/playbackspeed_border_checked.svg +5 -0
  110. subtitld/graphics/playbackspeed_border_hover.svg +5 -0
  111. subtitld/graphics/playercontrols_button_first.svg +5 -0
  112. subtitld/graphics/playercontrols_button_first_hover.svg +6 -0
  113. subtitld/graphics/playercontrols_button_first_pressed.svg +6 -0
  114. subtitld/graphics/playercontrols_button_last.svg +6 -0
  115. subtitld/graphics/playercontrols_button_last_hover.svg +6 -0
  116. subtitld/graphics/playercontrols_button_last_pressed.svg +6 -0
  117. subtitld/graphics/playercontrols_widget_center_bottom_line.svg +13 -0
  118. subtitld/graphics/playercontrols_widget_center_top_line.svg +17 -0
  119. subtitld/graphics/plus_icon.svg +4 -0
  120. subtitld/graphics/record_icon.svg +8 -0
  121. subtitld/graphics/record_icon_pressed.svg +5 -0
  122. subtitld/graphics/remove_selected_subtitle_icon.svg +6 -0
  123. subtitld/graphics/repeat_playback_border.svg +5 -0
  124. subtitld/graphics/repeat_playback_border_checked.svg +5 -0
  125. subtitld/graphics/repeat_playback_border_hover.svg +5 -0
  126. subtitld/graphics/save.svg +4 -0
  127. subtitld/graphics/send_text_to_last_subtitle_and_slice_button.svg +8 -0
  128. subtitld/graphics/send_text_to_last_subtitle_icon.svg +8 -0
  129. subtitld/graphics/send_text_to_next_subtitle_and_slice_button.svg +8 -0
  130. subtitld/graphics/send_text_to_next_subtitle_icon.svg +8 -0
  131. subtitld/graphics/slice_selected_subtitle_icon.svg +4 -0
  132. subtitld/graphics/snap_grid_icon.svg +4 -0
  133. subtitld/graphics/snap_grid_icon_checked.svg +4 -0
  134. subtitld/graphics/snap_grid_icon_disabled.svg +4 -0
  135. subtitld/graphics/snap_limits_icon.svg +4 -0
  136. subtitld/graphics/snap_limits_icon_checked.svg +4 -0
  137. subtitld/graphics/snap_limits_icon_disabled.svg +4 -0
  138. subtitld/graphics/snap_move_next.svg +4 -0
  139. subtitld/graphics/snap_move_next_checked.svg +4 -0
  140. subtitld/graphics/snap_move_next_disabled.svg +4 -0
  141. subtitld/graphics/snap_moving_icon.svg +4 -0
  142. subtitld/graphics/snap_moving_icon_checked.svg +4 -0
  143. subtitld/graphics/snap_moving_icon_disabled.svg +4 -0
  144. subtitld/graphics/speaker_list_item_change_color_icon.svg +4 -0
  145. subtitld/graphics/speaker_list_item_change_color_icon_hover.svg +4 -0
  146. subtitld/graphics/speaker_list_item_change_image_icon.svg +4 -0
  147. subtitld/graphics/speaker_list_item_change_image_icon_hover.svg +4 -0
  148. subtitld/graphics/speaker_list_item_export_icon.svg +4 -0
  149. subtitld/graphics/speaker_list_item_export_icon_hover.svg +4 -0
  150. subtitld/graphics/speaker_list_item_remove_icon.svg +4 -0
  151. subtitld/graphics/speaker_list_item_remove_icon_hover.svg +4 -0
  152. subtitld/graphics/speaker_list_item_rename_icon.svg +4 -0
  153. subtitld/graphics/speaker_list_item_rename_icon_hover.svg +4 -0
  154. subtitld/graphics/spinbox_arrow_down.svg +4 -0
  155. subtitld/graphics/spinbox_arrow_up.svg +4 -0
  156. subtitld/graphics/start_screen_top_shadow.svg +23 -0
  157. subtitld/graphics/stop_icon.svg +6 -0
  158. subtitld/graphics/stop_icon_hover.svg +6 -0
  159. subtitld/graphics/stop_icon_pressed.svg +6 -0
  160. subtitld/graphics/stylesheet.qss +1838 -0
  161. subtitld/graphics/subtitld.ico +0 -0
  162. subtitld/graphics/subtitld.png +0 -0
  163. subtitld/graphics/subtitles_panel_simplelist_properties_duration_timing_lock_closed_icon.svg +4 -0
  164. subtitld/graphics/subtitles_panel_simplelist_properties_duration_timing_lock_open_icon.svg +4 -0
  165. subtitld/graphics/subtitles_panel_simplelist_properties_duration_timing_lock_open_icon_hover.svg +4 -0
  166. subtitld/graphics/timeline_bottom_controls_background.svg +25 -0
  167. subtitld/graphics/timeline_cursor_back_frame.svg +4 -0
  168. subtitld/graphics/timeline_cursor_back_frame_hover.svg +4 -0
  169. subtitld/graphics/timeline_cursor_next_frame.svg +4 -0
  170. subtitld/graphics/timeline_cursor_next_frame_hover.svg +4 -0
  171. subtitld/graphics/timeline_show_speaker_color.svg +5 -0
  172. subtitld/graphics/timeline_show_speaker_color_checked.svg +5 -0
  173. subtitld/graphics/timeline_show_speaker_in_tracks.svg +4 -0
  174. subtitld/graphics/timeline_show_speaker_in_tracks_checked.svg +4 -0
  175. subtitld/graphics/timelinescrolling_follow_icon.svg +4 -0
  176. subtitld/graphics/timelinescrolling_follow_icon_checked.svg +4 -0
  177. subtitld/graphics/timelinescrolling_none_icon.svg +6 -0
  178. subtitld/graphics/timelinescrolling_none_icon_checked.svg +6 -0
  179. subtitld/graphics/timelinescrolling_page_icon.svg +4 -0
  180. subtitld/graphics/timelinescrolling_page_icon_checked.svg +4 -0
  181. subtitld/graphics/titleBar_left_container_border.svg +113 -0
  182. subtitld/graphics/unknown_speaker.svg +5 -0
  183. subtitld/graphics/vosk_transcription_download_model_icon.svg +4 -0
  184. subtitld/graphics/vosk_transcription_update_model_icon.svg +4 -0
  185. subtitld/graphics/word_count_icon.svg +1 -0
  186. subtitld/graphics/wpm_icon.svg +1 -0
  187. subtitld/graphics/zoom_in_icon.svg +4 -0
  188. subtitld/graphics/zoom_in_icon_disabled.svg +4 -0
  189. subtitld/graphics/zoom_out_icon.svg +4 -0
  190. subtitld/graphics/zoom_out_icon_disabled.svg +4 -0
  191. subtitld/interface/__init__.py +0 -0
  192. subtitld/interface/actionmanager.py +18 -0
  193. subtitld/interface/bottom_panel.py +43 -0
  194. subtitld/interface/left_panel.py +144 -0
  195. subtitld/interface/left_panel_autosave.py +149 -0
  196. subtitld/interface/left_panel_dubbing.py +469 -0
  197. subtitld/interface/left_panel_export.py +755 -0
  198. subtitld/interface/left_panel_global.py +358 -0
  199. subtitld/interface/left_panel_import.py +82 -0
  200. subtitld/interface/left_panel_interface.py +616 -0
  201. subtitld/interface/left_panel_keyboard.py +261 -0
  202. subtitld/interface/left_panel_metadata.py +74 -0
  203. subtitld/interface/left_panel_qualitycheck.py +262 -0
  204. subtitld/interface/left_panel_speakers.py +737 -0
  205. subtitld/interface/left_panel_subtitleslist.py +791 -0
  206. subtitld/interface/left_panel_transcription.py +763 -0
  207. subtitld/interface/left_panel_translation.py +294 -0
  208. subtitld/interface/playercontrols.py +2348 -0
  209. subtitld/interface/preview_panel.py +407 -0
  210. subtitld/interface/productionscreen.py +65 -0
  211. subtitld/interface/startscreen.py +273 -0
  212. subtitld/interface/timeline.py +1308 -0
  213. subtitld/interface/top_bar.py +329 -0
  214. subtitld/interface/translation.py +68 -0
  215. subtitld/interface/utils.py +286 -0
  216. subtitld/locale/en_US.json +301 -0
  217. subtitld/locale/pt_BR.json +269 -0
  218. subtitld/modules/__init__.py +0 -0
  219. subtitld/modules/audioengine.py +606 -0
  220. subtitld/modules/bounce.py +229 -0
  221. subtitld/modules/config.py +84 -0
  222. subtitld/modules/file_io.py +870 -0
  223. subtitld/modules/history.py +31 -0
  224. subtitld/modules/quality_check.py +53 -0
  225. subtitld/modules/session.py +270 -0
  226. subtitld/modules/shortcuts.py +84 -0
  227. subtitld/modules/subtitles.py +413 -0
  228. subtitld/modules/timecode.py +496 -0
  229. subtitld/modules/usf.py +366 -0
  230. subtitld/modules/utils.py +79 -0
  231. subtitld/modules/waveform.py +53 -0
  232. subtitld-0.0.0.dev0.dist-info/METADATA +97 -0
  233. subtitld-0.0.0.dev0.dist-info/RECORD +237 -0
  234. subtitld-0.0.0.dev0.dist-info/WHEEL +5 -0
  235. subtitld-0.0.0.dev0.dist-info/entry_points.txt +2 -0
  236. subtitld-0.0.0.dev0.dist-info/licenses/LICENSE +674 -0
  237. subtitld-0.0.0.dev0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,273 @@
1
+ import pathlib
2
+ import datetime
3
+
4
+ from PySide6.QtWidgets import QPushButton, QLabel, QListWidget, QVBoxLayout, QWidget, QHBoxLayout, QSizePolicy, QFileDialog, QListWidgetItem, QAbstractItemView, QGraphicsOpacityEffect
5
+ from PySide6.QtCore import QPropertyAnimation, Qt, QEasingCurve, QTimer
6
+ from PySide6.QtGui import QPixmap
7
+
8
+ from subtitld.modules import file_io
9
+ from subtitld.modules import session
10
+
11
+ from subtitld.interface import productionscreen
12
+ from subtitld.interface import utils
13
+ from subtitld.interface import top_bar
14
+ from subtitld.interface import playercontrols
15
+
16
+ from subtitld.interface.translation import _
17
+
18
+ from subtitld import __version__
19
+
20
+
21
+ list_of_supported_extensions = []
22
+ list_of_supported_subtitle_extensions = []
23
+ list_of_supported_video_extensions = []
24
+ for exttype in session.LIST_OF_SUPPORTED_SUBTITLE_EXTENSIONS:
25
+ for ext in session.LIST_OF_SUPPORTED_SUBTITLE_EXTENSIONS[exttype]['extensions']:
26
+ list_of_supported_extensions.append(ext)
27
+ list_of_supported_subtitle_extensions.append(ext)
28
+ for exttype in session.LIST_OF_SUPPORTED_VIDEO_EXTENSIONS:
29
+ for ext in session.LIST_OF_SUPPORTED_VIDEO_EXTENSIONS[exttype]['extensions']:
30
+ list_of_supported_extensions.append(ext)
31
+ list_of_supported_video_extensions.append(ext)
32
+
33
+
34
+ def load(self):
35
+ self.start_screen = QWidget()
36
+ self.start_screen.setLayout(QVBoxLayout())
37
+ self.start_screen.layout().addStretch()
38
+ self.start_screen.layout().setContentsMargins(0, 0, 0, 0)
39
+
40
+ self.start_screen_bottom_line_container = QWidget()
41
+ self.start_screen_bottom_line_container.setLayout(QVBoxLayout())
42
+ self.start_screen_bottom_line_container.layout().setContentsMargins(0, 0, 0, 0)
43
+
44
+ self.start_screen_bottom_line = QWidget()
45
+ self.start_screen_bottom_line.setObjectName('start_screen_bottom_line')
46
+ self.start_screen_bottom_line.setSizePolicy(QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum))
47
+ self.start_screen_bottom_line.setLayout(QHBoxLayout())
48
+ self.start_screen_bottom_line.layout().setContentsMargins(0, 2, 0, 0)
49
+ self.start_screen_bottom_line_animation = QPropertyAnimation(self.start_screen_bottom_line, b'pos')
50
+ self.start_screen_bottom_line_animation.setEasingCurve(QEasingCurve.OutCubic)
51
+ self.start_screen_bottom_line_container.layout().addWidget(self.start_screen_bottom_line)
52
+
53
+ self.start_screen_bottom_open_file_column = QWidget()
54
+ self.start_screen_bottom_open_file_column.setLayout(QVBoxLayout())
55
+
56
+ self.start_screen_open_label = QLabel()
57
+ self.start_screen_open_label.setAlignment(Qt.AlignRight)
58
+ self.start_screen_open_label.setObjectName('start_screen_open_label')
59
+ self.start_screen_bottom_open_file_column.layout().addWidget(self.start_screen_open_label)
60
+
61
+ self.start_screen_open_button = QPushButton()
62
+ self.start_screen_open_button.setObjectName('start_screen_open_button')
63
+ self.start_screen_open_button.clicked.connect(lambda: start_screen_open_button_clicked(self))
64
+ self.start_screen_open_button.setProperty('class', 'button_dark')
65
+ self.start_screen_bottom_open_file_column.layout().addWidget(self.start_screen_open_button, 0, Qt.AlignRight)
66
+
67
+ self.start_screen_bottom_open_file_column.layout().addStretch()
68
+
69
+ self.start_screen_bottom_line.layout().addWidget(self.start_screen_bottom_open_file_column, 1)
70
+
71
+ self.start_screen_recentfiles_background = QLabel()
72
+ self.start_screen_recentfiles_background.setObjectName('start_screen_recentfiles_background')
73
+ self.start_screen_recentfiles_background.setLayout(QVBoxLayout())
74
+ self.start_screen_recentfiles_background.layout().setContentsMargins(10, 10, 10, 10)
75
+ self.start_screen_recentfiles_background.setAutoFillBackground(True)
76
+ self.start_screen_recentfiles_background.setFixedSize(350, 200)
77
+
78
+ self.start_screen_recent_label = QLabel()
79
+ self.start_screen_recent_label.setAlignment(Qt.AlignCenter)
80
+ self.start_screen_recent_label.setObjectName('start_screen_recent_label')
81
+ self.start_screen_recentfiles_background.layout().addWidget(self.start_screen_recent_label)
82
+
83
+ self.start_screen_recent_listwidget = QListWidget()
84
+ self.start_screen_recent_listwidget.setObjectName('start_screen_recent_listwidget')
85
+ self.start_screen_recent_listwidget.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
86
+ self.start_screen_recent_listwidget.setFocusPolicy(Qt.NoFocus)
87
+ self.start_screen_recent_listwidget.setUniformItemSizes(False)
88
+ self.start_screen_recent_listwidget.setViewportMargins(0, 0, 10, 0)
89
+ self.start_screen_recent_listwidget.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel)
90
+ self.start_screen_recent_listwidget.itemDoubleClicked.connect(lambda item: start_screen_recent_listwidget_item_clicked(self, item))
91
+ self.start_screen_recentfiles_background.layout().addWidget(self.start_screen_recent_listwidget)
92
+
93
+ self.start_screen_bottom_line.layout().addWidget(self.start_screen_recentfiles_background, 0)
94
+
95
+ self.start_screen_bottom_version_column = QWidget()
96
+ self.start_screen_bottom_version_column.setLayout(QVBoxLayout())
97
+
98
+ self.start_screen_adver_label = QLabel()
99
+ self.start_screen_adver_label.setObjectName('start_screen_adver_label')
100
+ self.start_screen_bottom_version_column.layout().addWidget(self.start_screen_adver_label, 0, Qt.AlignLeft)
101
+
102
+ self.start_screen_adver_label_details = QLabel()
103
+ self.start_screen_adver_label_details.setObjectName('start_screen_adver_label_details')
104
+ self.start_screen_bottom_version_column.layout().addWidget(self.start_screen_adver_label_details, 0, Qt.AlignLeft)
105
+ self.start_screen_bottom_version_column.layout().addStretch()
106
+
107
+ self.start_screen_bottom_line.layout().addWidget(self.start_screen_bottom_version_column, 1)
108
+
109
+ self.start_screen.layout().addWidget(self.start_screen_bottom_line_container, 0)
110
+
111
+ self.central_widget.layout().addWidget(self.start_screen)
112
+
113
+
114
+ def show(self):
115
+ utils.animate_element(self.start_screen_bottom_line_animation, duration=1000, effect='slide_from_bottom')
116
+ update_recent_files_list(self)
117
+
118
+
119
+ def hide(self):
120
+ utils.animate_element(self.start_screen_bottom_line_animation, duration=200, effect='slide_to_bottom')
121
+
122
+
123
+ def start_screen_open_button_clicked(self):
124
+ all_supported_subtitle_files = _('file_io.all_supported_files') + ' ({})'.format(" ".join(["*.{}".format(fo) for fo in list_of_supported_extensions]))
125
+
126
+ selected_files = QFileDialog.getOpenFileNames(
127
+ parent=self,
128
+ caption=_('file_io.all_supported_files'),
129
+ dir=str(session.PATH_HOME),
130
+ filter=all_supported_subtitle_files
131
+ )[0]
132
+
133
+ selected_subtitle_filepath = False
134
+ selected_video_filepath = False
135
+
136
+ for filepath in selected_files:
137
+ if filepath.rsplit('.', 1)[-1].upper() in session.LIST_OF_SUPPORTED_SUBTITLE_EXTENSIONS.keys():
138
+ selected_subtitle_filepath = filepath
139
+ break
140
+
141
+ for filepath in selected_files:
142
+ if filepath.rsplit('.', 1)[-1].upper() in session.LIST_OF_SUPPORTED_VIDEO_EXTENSIONS.keys():
143
+ selected_video_filepath = filepath
144
+ break
145
+
146
+ if not selected_video_filepath:
147
+ supported_video_files = _('file_io.video_files') + ' ({})'.format(" ".join(["*.{}".format(fo) for fo in list_of_supported_video_extensions]))
148
+ selected_video_filepath = QFileDialog.getOpenFileName(
149
+ parent=self,
150
+ caption=_('file_io.all_supported_files'),
151
+ dir=str(session.PATH_HOME),
152
+ filter=supported_video_files
153
+ )[0]
154
+
155
+ if selected_video_filepath:
156
+ session.VIDEO['filepath'] = selected_video_filepath
157
+ if selected_subtitle_filepath:
158
+ session.SUBTITLE['filepath'] = selected_subtitle_filepath
159
+
160
+
161
+ load_productionscreen(self)
162
+
163
+
164
+ def load_productionscreen(self):
165
+ if session.VIDEO.get('filepath', False):
166
+ top_bar.show(self)
167
+ QTimer().singleShot(200, lambda: productionscreen.show(self))
168
+
169
+ self.preview_panel_player.loadfile(session.VIDEO['filepath'])
170
+
171
+ self.music_voice_separation_thread.filename = session.VIDEO['filepath']
172
+ self.music_voice_separation_thread.start()
173
+
174
+ session.VIDEO = file_io.process_video_file(session.VIDEO['filepath'])
175
+
176
+ if session.SUBTITLE.get('filepath', False) and pathlib.Path(session.SUBTITLE['filepath']).exists():
177
+ session.SUBTITLE['segments'], session.CONFIG['format_to_save'] = file_io.process_subtitles_file(session.SUBTITLE['filepath'])
178
+ for name in {segment.get('speaker', 'A') for segment in session.SUBTITLE['segments']}:
179
+ session.SPEAKERS.setdefault(name, {})
180
+ self.preview_panel_player._audio_device.sync_subtitle_dubs(session.SUBTITLE['segments'])
181
+
182
+ if session.CONFIG.get('recent_files', False) and session.SUBTITLE['filepath'] in session.CONFIG['recent_files']:
183
+ self.preview_panel_player.seek(session.CONFIG['recent_files'][str(session.SUBTITLE['filepath'])].get('last_position', 0))
184
+
185
+ recent_files = session.CONFIG.get('recent_files', {})
186
+ if not str(session.SUBTITLE['filepath']) in recent_files:
187
+ recent_files[str(session.SUBTITLE['filepath'])] = {
188
+ 'video_filepath': str(session.VIDEO['filepath']),
189
+ 'last_position': 10
190
+ }
191
+
192
+ if str(session.SUBTITLE['filepath']) in recent_files:
193
+ session.CONFIG['recent_files'][str(session.SUBTITLE['filepath'])]['last_opened'] = str(datetime.datetime.now().timestamp())
194
+
195
+ session.CONFIG['recent_files'] = recent_files
196
+
197
+ QTimer.singleShot(0, self.timeline_widget.load_waveform)
198
+
199
+ def start_screen_recent_listwidget_item_clicked(self, item):
200
+ config = item.data(Qt.UserRole)
201
+ session.VIDEO['filepath'] = config['video_filepath']
202
+ session.SUBTITLE['filepath'] = config['subtitle_filepath']
203
+ session.SUBTITLE['segments'], session.CONFIG['format_to_save'] = file_io.process_subtitles_file(session.SUBTITLE['filepath'])
204
+ for name in {segment.get('speaker', 'A') for segment in session.SUBTITLE['segments']}:
205
+ session.SPEAKERS.setdefault(name, {})
206
+ session.VIDEO = file_io.process_video_file(session.VIDEO['filepath'])
207
+ self.preview_panel_player._audio_device.sync_subtitle_dubs(session.SUBTITLE['segments'])
208
+ load_productionscreen(self)
209
+
210
+
211
+ def translate(self):
212
+ self.start_screen_open_label.setText(_('startscreen.open_subtitle_or_video'))
213
+ self.start_screen_open_button.setText(_('startscreen.open'))
214
+ self.start_screen_open_button.setToolTip(_('startscreen.open_tooltip'))
215
+ self.start_screen_recent_label.setText(_('startscreen.recent_subitles'))
216
+ self.start_screen_adver_label.setText((_('startscreen.version_number').format(__version__)))
217
+ self.start_screen_adver_label_details.setText(_('startscreen.visit_website'))
218
+
219
+
220
+ def update_recent_files_list(self):
221
+ self.start_screen_recentfiles_background.setVisible(bool(session.CONFIG.get('recent_files', False)))
222
+
223
+ recent_files = session.CONFIG.get('recent_files', {})
224
+ if recent_files:
225
+ sorted_files = sorted(
226
+ recent_files.items(),
227
+ key=lambda item: float(item[1].get('last_opened', 0)),
228
+ reverse=True
229
+ )
230
+
231
+ for filepath, config in sorted_files:
232
+ subtitle_path = pathlib.Path(filepath)
233
+ video_path = pathlib.Path(config['video_filepath'])
234
+
235
+ config['subtitle_filepath'] = str(subtitle_path)
236
+
237
+ if subtitle_path.exists() and video_path.exists():
238
+ try:
239
+ item_widget = QWidget()
240
+ item_widget.setLayout(QHBoxLayout())
241
+ item_widget.layout().setContentsMargins(5, 5, 5, 5)
242
+
243
+ item_icon = QLabel()
244
+ item_icon.opacity = QGraphicsOpacityEffect()
245
+ item_icon.opacity.setOpacity(0.5)
246
+ item_icon.setGraphicsEffect(item_icon.opacity)
247
+ item_icon.setFixedSize(24, 24)
248
+ item_icon.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum))
249
+ item_icon.setAlignment(Qt.AlignCenter)
250
+ item_icon.setPixmap(QPixmap(session.PATH_SUBTITLD_GRAPHICS / 'file.svg').scaled(16, 16, Qt.KeepAspectRatioByExpanding))
251
+ item_widget.layout().addWidget(item_icon, 0, Qt.AlignTop)
252
+
253
+ item_widget_title_line = QLabel()
254
+ item_widget_title_line.setAlignment(Qt.AlignLeft)
255
+ item_widget_title_line.setWordWrap(True)
256
+ item_widget_title_line.setText(f'<b>{subtitle_path.name}</b><br /><small>{video_path.name}</small>')
257
+
258
+ item_widget.layout().addWidget(item_widget_title_line, 1)
259
+
260
+ age = utils.friendly_time(datetime.datetime.fromtimestamp(float(config['last_opened'])))
261
+ item_widget_age_line = QLabel()
262
+ item_widget_age_line.setProperty('class', 'age')
263
+ item_widget_age_line.setAlignment(Qt.AlignRight)
264
+ item_widget_age_line.setText(age)
265
+ item_widget.layout().addWidget(item_widget_age_line, 0, Qt.AlignRight | Qt.AlignTop)
266
+
267
+ list_widget_item = QListWidgetItem(self.start_screen_recent_listwidget)
268
+ list_widget_item.setData(Qt.UserRole, config)
269
+ list_widget_item.setSizeHint(item_widget.sizeHint())
270
+ self.start_screen_recent_listwidget.addItem(list_widget_item)
271
+ self.start_screen_recent_listwidget.setItemWidget(list_widget_item, item_widget)
272
+ except Exception as e:
273
+ continue