From ff5f3f50d42193f6dcdedcd48403f8718a6fa757 Mon Sep 17 00:00:00 2001 From: Melody Horn Date: Fri, 22 Feb 2019 02:01:41 -0700 Subject: edit options --- vidslice.py | 131 +++++------------------------------------------------------- 1 file changed, 9 insertions(+), 122 deletions(-) (limited to 'vidslice.py') diff --git a/vidslice.py b/vidslice.py index 08673cf..267c064 100644 --- a/vidslice.py +++ b/vidslice.py @@ -1,112 +1,7 @@ -# First things, first. Import the wxPython package. -import glob -import json -import subprocess -import tempfile -import threading - import wx - -def has_ytdl(): - try: - subprocess.run(["youtube-dl", "--version"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - return True - except FileNotFoundError: - return False - - -class SourcesPanel(wx.Panel): - """ - A Panel representing source info - """ - - def __init__(self, *args, **kw): - super(SourcesPanel, self).__init__(*args, **kw) - self.update_listeners = [] - - root_sizer = wx.StaticBoxSizer(wx.VERTICAL, self, label="Sources") - self.SetSizer(root_sizer) - main = wx.Panel(self) - root_sizer.Add(main, proportion=1, flag=wx.EXPAND, border=3) - main_sizer = wx.GridBagSizer() - main.SetSizer(main_sizer) - - url_label = wx.StaticText(main, label="URL") - main_sizer.Add(url_label, wx.GBPosition(0, 0), flag=wx.EXPAND) - self.url_text = wx.TextCtrl(main) - main_sizer.Add(self.url_text, wx.GBPosition(0, 1), flag=wx.EXPAND) - self.url_download_button = wx.Button(main, label="Download") - self.url_download_button.Bind(wx.EVT_BUTTON, self.handle_url_download_pressed) - main_sizer.Add(self.url_download_button, wx.GBPosition(0, 2), flag=wx.EXPAND) - if not has_ytdl(): - tooltip = "Could not find youtube-dl" - url_label.Disable() - self.url_text.Disable() - self.url_text.SetToolTip(tooltip) - self.url_download_button.Disable() - self.url_download_button.SetToolTip(tooltip) - - main_sizer.Add(wx.StaticText(main, label="File"), wx.GBPosition(1, 0), flag=wx.EXPAND) - self.file_text = wx.TextCtrl(main) - self.file_text.Bind(wx.EVT_TEXT, self.handle_file_changed) - main_sizer.Add(self.file_text, wx.GBPosition(1, 1), flag=wx.EXPAND) - self.file_browse_button = wx.Button(main, label="Browse") - self.file_browse_button.Bind(wx.EVT_BUTTON, self.handle_file_browse_pressed) - main_sizer.Add(self.file_browse_button, wx.GBPosition(1, 2), flag=wx.EXPAND) - - self.status_label = wx.StaticText(main, label="Status: Select a file") - main_sizer.Add(self.status_label, wx.GBPosition(2, 0), wx.GBSpan(1, 3)) - - main_sizer.AddGrowableCol(1, proportion=1) - - def set_status(self, text): - self.status_label.SetLabel("Status: " + text) - - def handle_url_download_pressed(self, _): - self.set_status("Downloading...") - - def download(): - file = tempfile.NamedTemporaryFile(delete=False) - # noinspection PyArgumentList - proc = subprocess.Popen([ - 'youtube-dl', '-o', file.name + '.%(ext)s', self.url_text.GetValue() - ], stdin=subprocess.DEVNULL, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) - while proc.poll() is None: - out_data = proc.stdout.readline() - if out_data != '': - wx.CallAfter(lambda: self.set_status("Downloading: " + out_data.strip())) - output_file = glob.glob(glob.escape(file.name) + '.*')[0] - wx.CallAfter(lambda: self.set_status("Downloaded!")) - wx.CallAfter(lambda: self.file_text.SetValue(output_file)) - - threading.Thread(target=download).start() - - def handle_file_browse_pressed(self, _): - dialog = wx.FileDialog(self, message="message") - if dialog.ShowModal() == wx.ID_OK: - self.file_text.SetValue(dialog.GetPath()) - - def handle_file_changed(self, event): - result = subprocess.run([ - 'ffprobe', '-v', 'error', '-of', 'json', - '-show_entries', 'format=start_time,duration:stream=index,codec_type,avg_frame_rate,width,height', - self.file_text.GetValue() - ], capture_output=True, text=True) - if result.stderr != "": - print(result.stderr) - ffprobe_data = json.loads(result.stdout) - del ffprobe_data['programs'] - print(ffprobe_data) - if result.returncode == 0: - self.set_status("Successfully loaded media info") - for listener in self.update_listeners: - listener(ffprobe_data) - else: - self.set_status("Failed to load media info: " + result.stderr) - - def on_update(self, callback): - self.update_listeners.append(callback) +from sources import SourcesPanel +from options import OptionsPanel class HelloFrame(wx.Frame): @@ -121,29 +16,21 @@ class HelloFrame(wx.Frame): main_sizer = wx.BoxSizer(wx.VERTICAL) # set up sources panel - sources_panel = SourcesPanel(self) - main_sizer.Add(sources_panel, proportion=0, flag=wx.EXPAND) + self.sources_panel = SourcesPanel(self) + main_sizer.Add(self.sources_panel, proportion=0, flag=wx.EXPAND, border=5) # create a panel in the frame - options_panel = wx.Panel(self) - main_sizer.Add(options_panel, proportion=1, flag=wx.EXPAND) - - # and put some text with a larger bold font on it - st = wx.StaticText(options_panel, label="Hello World!") - font = st.GetFont() - font.PointSize += 10 - font = font.Bold() - st.SetFont(font) + self.options_panel = OptionsPanel(self) + main_sizer.Add(self.options_panel, proportion=1, flag=wx.EXPAND, border=5) + self.sources_panel.on_update(lambda data: self.options_panel.update(self.sources_panel.get_file(), data)) # create a menu bar self.make_menu_bar() - # and a status bar - self.CreateStatusBar() - self.SetStatusText("Welcome to wxPython!") - # main_sizer.SetSizeHints(self) self.SetSizer(main_sizer) + size = main_sizer.GetMinSize() + self.SetMinClientSize(size) def make_menu_bar(self): """ -- cgit v1.2.3