Source code for entry_exit_mouse_box._batch_converter_widget
import os
from qtpy.QtWidgets import (QWidget, QVBoxLayout, QLineEdit, QHBoxLayout,
QPushButton, QFileDialog, QLabel)
from qtpy.QtCore import QThread
import napari
from napari.utils import progress
from napari.utils.notifications import show_info
from entry_exit_mouse_box.convert_format import QtWorkerC2A
[docs]
class VideoConverterWidget(QWidget):
def __init__(self, napari_viewer: "napari.Viewer"):
super().__init__()
self.selected_folder = None
self.viewer = napari_viewer
self.current = 0
self.files = None
self.init_ui()
[docs]
def init_ui(self):
self.btn_select_folder = QPushButton("Input folder", self)
self.extension_field = QLineEdit(self)
self.btn_start_conversion = QPushButton("Launch", self)
self.btn_start_conversion.setEnabled(False)
layout = QVBoxLayout()
layout.addWidget(self.btn_select_folder)
h_layout = QHBoxLayout()
h_layout.addWidget(QLabel("Extension:"))
h_layout.addWidget(self.extension_field)
layout.addLayout(h_layout)
layout.addSpacing(20)
layout.addWidget(self.btn_start_conversion)
self.setLayout(layout)
self.btn_select_folder.clicked.connect(self.select_folder)
self.btn_start_conversion.clicked.connect(self.start_conversion)
[docs]
def select_folder(self):
folder = QFileDialog.getExistingDirectory(self, "Select a folder")
if not folder:
return
self.selected_folder = folder
self.btn_start_conversion.setEnabled(True)
[docs]
def start_conversion(self):
if not self.selected_folder:
return
self.files = [os.path.join(self.selected_folder, f) for f in os.listdir(self.selected_folder) if f.endswith(self.extension_field.text())]
if not self.files:
show_info("No file found.")
return
self.launch_convert(self.files[self.current])
[docs]
def launch_convert(self, file_path):
output_folder = os.path.join(
os.path.dirname(file_path),
".".join(os.path.basename(file_path).split(".")[:-1]) + ".tmp"
)
print("OUTPUT:", output_folder)
os.makedirs(output_folder, exist_ok=True)
self.set_active_ui(False)
show_info("Converting video:" + file_path)
self.pbr = progress(total=0)
self.pbr.set_description("Converting video...")
self.thread = QThread()
self.c2a = QtWorkerC2A(file_path, os.path.join(output_folder, os.path.basename(file_path)))
self.c2a.moveToThread(self.thread)
self.c2a.file_ready.connect(self.done_a_file)
self.thread.started.connect(self.c2a.run)
self.thread.start()
[docs]
def done_a_file(self, _):
print(f"Finished file {str(self.current+1).zfill(2)}/{str(len(self.files)).zfill(2)}")
self.pbr.close()
self.thread.quit()
self.thread.wait()
self.thread.deleteLater()
self.thread = None
self.set_active_ui(True)
self.current += 1
if self.current < len(self.files):
self.launch_convert(self.files[self.current])
else:
show_info("All files converted")
[docs]
def set_active_ui(self, active):
self.btn_select_folder.setEnabled(active)
self.extension_field.setEnabled(active)
self.btn_start_conversion.setEnabled(active)