Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 23 additions & 4 deletions buzz/transcriber/transcriber.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,10 +225,29 @@ class Stopped(Exception):
pass


SUPPORTED_AUDIO_FORMATS = "Media files (*.mp3 *.wav *.m4a *.ogg *.opus *.flac *.mp4 *.webm *.ogm *.mov *.mkv *.avi *.wmv);;\
Audio files (*.mp3 *.wav *.m4a *.ogg *.opus *.flac);;\
Video files (*.mp4 *.webm *.ogm *.mov *.mkv *.avi *.wmv);;\
All files (*.*)"
SUPPORTED_AUDIO_EXTENSIONS = (
".mp3", ".wav", ".m4a", ".m4b", ".aac", ".ogg", ".opus", ".flac",
)
SUPPORTED_VIDEO_EXTENSIONS = (
".mp4", ".m4v", ".webm", ".ogm", ".mov", ".mkv", ".avi", ".wmv",
)
SUPPORTED_EXTENSIONS = frozenset(
SUPPORTED_AUDIO_EXTENSIONS + SUPPORTED_VIDEO_EXTENSIONS
)


def _file_dialog_patterns(extensions) -> str:
return " ".join(f"*{extension}" for extension in extensions)


SUPPORTED_AUDIO_FORMATS = ";;".join(
[
f"Media files ({_file_dialog_patterns(SUPPORTED_AUDIO_EXTENSIONS + SUPPORTED_VIDEO_EXTENSIONS)})",
f"Audio files ({_file_dialog_patterns(SUPPORTED_AUDIO_EXTENSIONS)})",
f"Video files ({_file_dialog_patterns(SUPPORTED_VIDEO_EXTENSIONS)})",
"All files (*.*)",
]
)


def get_output_file_path(
Expand Down
41 changes: 33 additions & 8 deletions buzz/widgets/main_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
TranscriptionOptions,
FileTranscriptionOptions,
SUPPORTED_AUDIO_FORMATS,
SUPPORTED_EXTENSIONS,
Segment,
)
from buzz.widgets.icon import BUZZ_ICON_PATH
Expand All @@ -48,7 +49,6 @@
from buzz.widgets.transcriber.file_transcriber_widget import FileTranscriberWidget
from buzz.widgets.transcription_task_folder_watcher import (
TranscriptionTaskFolderWatcher,
SUPPORTED_EXTENSIONS,
)
from buzz.widgets.transcription_tasks_table_widget import (
TranscriptionTasksTableWidget,
Expand All @@ -58,6 +58,15 @@
)


def find_media_files_in_folder(folder: str) -> List[str]:
file_paths = []
for dirpath, _dirs, filenames in os.walk(folder):
for filename in sorted(filenames):
if os.path.splitext(filename)[1].lower() in SUPPORTED_EXTENSIONS:
file_paths.append(os.path.join(dirpath, filename))
return file_paths


class MainWindow(QMainWindow):
table_widget: TranscriptionTasksTableWidget
transcriptions_updated = pyqtSignal(UUID)
Expand Down Expand Up @@ -218,12 +227,33 @@ def load_preferences(self, settings: Settings):
def dragEnterEvent(self, event):
# Accept file drag events
if event.mimeData().hasUrls():
event.setDropAction(Qt.DropAction.CopyAction)
event.accept()
else:
event.ignore()

def dragMoveEvent(self, event):
if event.mimeData().hasUrls():
event.setDropAction(Qt.DropAction.CopyAction)
event.accept()
else:
event.ignore()

def dropEvent(self, event):
file_paths = [url.toLocalFile() for url in event.mimeData().urls()]
file_paths = []
for url in event.mimeData().urls():
path = url.toLocalFile()
if os.path.isdir(path):
file_paths.extend(find_media_files_in_folder(path))
elif path:
file_paths.append(path)

if len(file_paths) == 0:
event.ignore()
return

event.setDropAction(Qt.DropAction.CopyAction)
event.accept()
self.open_file_transcriber_widget(file_paths=file_paths)

def on_file_transcriber_triggered(
Expand Down Expand Up @@ -315,12 +345,7 @@ def on_import_folder_action_triggered(self):
if not folder:
return
self.settings.set_value(Settings.Key.LAST_IMPORT_FOLDER, folder)
file_paths = []
for dirpath, _dirs, filenames in os.walk(folder):
for filename in filenames:
ext = os.path.splitext(filename)[1].lower()
if ext in SUPPORTED_EXTENSIONS:
file_paths.append(os.path.join(dirpath, filename))
file_paths = find_media_files_in_folder(folder)
if not file_paths:
return
self.open_file_transcriber_widget(file_paths)
Expand Down
11 changes: 4 additions & 7 deletions buzz/widgets/transcription_task_folder_watcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,15 @@
from PyQt6.QtCore import QFileSystemWatcher, pyqtSignal, QObject

from buzz.store.keyring_store import Key, get_password
from buzz.transcriber.transcriber import FileTranscriptionTask
from buzz.transcriber.transcriber import (
FileTranscriptionTask,
SUPPORTED_EXTENSIONS,
)
from buzz.model_loader import ModelDownloader
from buzz.widgets.preferences_dialog.models.folder_watch_preferences import (
FolderWatchPreferences,
)

# Supported media file extensions (audio and video)
SUPPORTED_EXTENSIONS = {
".mp3", ".wav", ".m4a", ".ogg", ".opus", ".flac", # audio
".mp4", ".webm", ".ogm", ".mov", ".mkv", ".avi", ".wmv", # video
}


class TranscriptionTaskFolderWatcher(QFileSystemWatcher):
preferences: FolderWatchPreferences
Expand Down
Loading