From 8cca9e28d5c6cd5a7a33d5e2ee854d21012b3200 Mon Sep 17 00:00:00 2001 From: A S Lewis <37951926+axcore@users.noreply.github.com> Date: Mon, 3 Jun 2019 10:57:30 +0100 Subject: [PATCH] Add files via upload --- README.rst | 13 +- lib/config.py | 104 +++--- lib/downloads.py | 466 ++++++--------------------- lib/files.py | 14 +- lib/mainapp.py | 323 ++++++++++++++----- lib/mainwin.py | 678 ++++++++++++++++++++++++++-------------- lib/media.py | 142 ++------- lib/options.py | 8 +- lib/refresh.py | 2 +- lib/testing.py | 2 +- lib/updates.py | 92 +----- lib/utils.py | 18 +- screenshots/tartube.png | Bin 0 -> 233086 bytes setup.py | 4 +- tartube.py | 4 +- 15 files changed, 899 insertions(+), 971 deletions(-) create mode 100644 screenshots/tartube.png diff --git a/README.rst b/README.rst index b62d0b0..7f6bf67 100644 --- a/README.rst +++ b/README.rst @@ -10,6 +10,12 @@ Tartube is **alpha software**. It crashes a lot. If you find this frustrating, find a solution and then `send it to me `__. +Screenshots +----------- + +.. image:: screenshots/tartube.png + :alt: Tartube screenshot + Why should I use Tartube? ------------------------- @@ -20,8 +26,7 @@ Why should I use Tartube? - Tartube will organise your videos into convenient folders - Certain popular video websites manipulate search results, repeatedly unsubscribe people from their favourite channels and/or deliberately - conceal videos which challenge the Californian political consensus. - Tartube won't do any of those things + conceal videos which challenge their preferred political views. Tartube won't do any of those things - Tartube can, in some circumstances, see videos that are region-blocked and age-restricted @@ -50,7 +55,7 @@ Install from source 1. Download & extract the source 2. Change directory into the Tartube directory -3. Run ``python setup.py install`` +3. Run ``python3 setup.py install`` Install using PyPI ~~~~~~~~~~~~~~~~~~ @@ -67,7 +72,7 @@ Run without installing 1. Download & extract the source 2. Change directory into the Tartube directory -3. Run 'python tartube.py' +3. Run 'python3 tartube.py' Frequently-Asked Questions -------------------------- diff --git a/lib/config.py b/lib/config.py index f8d5c5f..9ae60c3 100644 --- a/lib/config.py +++ b/lib/config.py @@ -179,7 +179,7 @@ class GenericConfigWin(Gtk.Window): also_self (an object inheriting from config.GenericConfigWin): another copy of self - + """ self.app_obj.main_win_obj.del_child_window(self) @@ -825,9 +825,9 @@ class GenericEditWin(GenericConfigWin): showing their original values. Args: - + button (Gtk.Button): The widget clicked - + """ # Destroy the window @@ -841,7 +841,7 @@ class GenericEditWin(GenericConfigWin): Destroys any changes made by the user and then closes the window. Args: - + button (Gtk.Button): The widget clicked """ @@ -861,7 +861,7 @@ class GenericEditWin(GenericConfigWin): showing their original values. Args: - + button (Gtk.Button): The widget clicked """ @@ -891,11 +891,11 @@ class GenericEditWin(GenericConfigWin): selected, False if not. Args: - + checkbutton (Gtk.CheckButton): The widget clicked prop (string): The attribute in self.edit_obj to modify - + """ if not checkbutton.get_active(): @@ -911,11 +911,11 @@ class GenericEditWin(GenericConfigWin): Temporarily stores the contents of the widget in self.edit_dict. Args: - + combo (Gtk.ComboBox): The widget clicked prop (string): The attribute in self.edit_obj to modify - + """ tree_iter = combo.get_active_iter() @@ -931,11 +931,11 @@ class GenericEditWin(GenericConfigWin): value, and stores the later in self.edit_dict. Args: - + combo (Gtk.ComboBox): The widget clicked prop (string): The attribute in self.edit_obj to modify - + """ tree_iter = combo.get_active_iter() @@ -950,11 +950,11 @@ class GenericEditWin(GenericConfigWin): Temporarily stores the contents of the widget in self.edit_dict. Args: - + entry (Gtk.Entry): The widget clicked prop (string): The attribute in self.edit_obj to modify - + """ self.edit_dict[prop] = entry.get_text() @@ -968,13 +968,13 @@ class GenericEditWin(GenericConfigWin): (from those in the group) is the selected one. Args: - + checkbutton (Gtk.CheckButton): The widget clicked prop (string): The attribute in self.edit_obj to modify value (-): The attribute's new value - + """ if radiobutton.get_active(): @@ -988,11 +988,11 @@ class GenericEditWin(GenericConfigWin): Temporarily stores the contents of the widget in self.edit_dict. Args: - + spinbutton (Gtk.SpinkButton): The widget clicked prop (string): The attribute in self.edit_obj to modify - + """ self.edit_dict[prop] = int(spinbutton.get_value()) @@ -1005,11 +1005,11 @@ class GenericEditWin(GenericConfigWin): Temporarily stores the contents of the widget in self.edit_dict. Args: - + textbuffer (Gtk.TextBuffer): The widget modified prop (string): The attribute in self.edit_obj to modify - + """ self.edit_dict[prop] = textbuffer.get_text( @@ -1030,9 +1030,9 @@ class GenericEditWin(GenericConfigWin): Apply download options to the media data object. Args: - + button (Gtk.Button): The widget clicked - + """ if self.edit_obj.options_obj: @@ -1056,9 +1056,9 @@ class GenericEditWin(GenericConfigWin): Edit download options for the media data object. Args: - + button (Gtk.Button): The widget clicked - + """ if not self.edit_obj.options_obj: @@ -1082,9 +1082,9 @@ class GenericEditWin(GenericConfigWin): Remove download options from the media data object. Args: - + button (Gtk.Button): The widget clicked - + """ if not self.edit_obj.options_obj: @@ -1567,7 +1567,7 @@ class OptionsEditWin(GenericEditWin): Returns: The original or modified value of that attribute. - + """ if name in self.edit_dict: @@ -2452,7 +2452,7 @@ class OptionsEditWin(GenericEditWin): button (Gtk.Button): The widget clicked entry (Gtk.Entry): Another widget to be modified by this function - + combo (Gtk.ComboBox): Another widget to be modified by this function @@ -2489,7 +2489,7 @@ class OptionsEditWin(GenericEditWin): combo (Gtk.ComboBox): The widget clicked entry (Gtk.Entry): Another widget to be modified by this function - + """ tree_iter = combo.get_active_iter() @@ -2514,7 +2514,7 @@ class OptionsEditWin(GenericEditWin): Args: entry (Gtk.Entry): The widget clicked - + """ # Only set 'output_template' when option 3 is selected, which is when @@ -2540,7 +2540,7 @@ class OptionsEditWin(GenericEditWin): other_liststore (Gtk.ListStore): Another widget to be modified by this function - + """ selection = treeview.get_selection() @@ -2592,7 +2592,7 @@ class OptionsEditWin(GenericEditWin): treeview (Gtk.TreeView): Another widget to be modified by this function - + """ selection = treeview.get_selection() @@ -2647,11 +2647,11 @@ class OptionsEditWin(GenericEditWin): add_button, up_button, down_button (Gtk.Button): Other widgets to be modified by this function - + treeview (Gtk.TreeView): Another widget to be modified by this function - + """ selection = treeview.get_selection() @@ -2702,7 +2702,7 @@ class OptionsEditWin(GenericEditWin): treeview (Gtk.TreeView): Another widget to be modified by this function - + """ selection = treeview.get_selection() @@ -2758,7 +2758,7 @@ class OptionsEditWin(GenericEditWin): function prop (string): The attribute in self.edit_obj to modify - + """ if radiobutton.get_active(): @@ -4361,7 +4361,7 @@ class SystemPrefWin(GenericPrefWin): Args: checkbutton (Gtk.CheckButton): The widget clicked - + """ other_flag = self.app_obj.main_win_obj.checkbutton2.get_active() @@ -4398,7 +4398,7 @@ class SystemPrefWin(GenericPrefWin): Args: checkbutton (Gtk.CheckButton): The widget clicked - + """ redraw_flag = False @@ -4430,7 +4430,7 @@ class SystemPrefWin(GenericPrefWin): button (Gtk.Button): The widget clicked entry (Gtk.Entry): Another widget to be modified by this function - + """ dialogue_win = Gtk.FileChooserDialog( @@ -4488,7 +4488,7 @@ class SystemPrefWin(GenericPrefWin): Args: radiobutton (Gtk.RadioButton): The widget clicked - + """ default_val = self.app_obj.match_default_chars @@ -4526,7 +4526,7 @@ class SystemPrefWin(GenericPrefWin): Args: spinbutton (Gtk.SpinButton): The widget clicked - + """ if spinbutton == self.spinbutton: @@ -4544,7 +4544,7 @@ class SystemPrefWin(GenericPrefWin): Args: checkbutton (Gtk.CheckButton): The widget clicked - + """ if checkbutton.get_active() \ @@ -4565,7 +4565,7 @@ class SystemPrefWin(GenericPrefWin): Args: checkbutton (Gtk.CheckButton): The widget clicked - + """ if checkbutton.get_active() and not self.app_obj.operation_save_flag: @@ -4584,7 +4584,7 @@ class SystemPrefWin(GenericPrefWin): Args: checkbutton (Gtk.CheckButton): The widget clicked - + """ if checkbutton.get_active() \ @@ -4605,7 +4605,7 @@ class SystemPrefWin(GenericPrefWin): Args: checkbutton (Gtk.CheckButton): The widget clicked - + """ if checkbutton.get_active() \ @@ -4615,7 +4615,7 @@ class SystemPrefWin(GenericPrefWin): and self.app_obj.ytdl_write_stdout_flag: self.app_obj.set_ytdl_write_stdout_flag(False) - + def on_update_combo_changed(self, combo): """Called from a callback in self.setup_ytdl_tab(). @@ -4626,7 +4626,7 @@ class SystemPrefWin(GenericPrefWin): Args: combo (Gtk.ComboBox): The widget clicked - + """ tree_iter = combo.get_active_iter() @@ -4643,7 +4643,7 @@ class SystemPrefWin(GenericPrefWin): Args: checkbutton (Gtk.CheckButton): The widget clicked - + """ if checkbutton.get_active() \ @@ -4663,7 +4663,7 @@ class SystemPrefWin(GenericPrefWin): Args: checkbutton (Gtk.CheckButton): The widget clicked - + """ if checkbutton.get_active() \ @@ -4685,7 +4685,7 @@ class SystemPrefWin(GenericPrefWin): Args: checkbutton (Gtk.CheckButton): The widget clicked - + """ other_flag = self.app_obj.main_win_obj.checkbutton.get_active() @@ -4707,7 +4707,7 @@ class SystemPrefWin(GenericPrefWin): Args: spinbutton (Gtk.SpinButton): The widget clicked - + """ self.app_obj.main_win_obj.spinbutton.set_value(spinbutton.get_value()) @@ -4723,10 +4723,10 @@ class SystemPrefWin(GenericPrefWin): Args: combo (Gtk.ComboBox): The widget clicked - + """ tree_iter = combo.get_active_iter() model = combo.get_model() self.app_obj.set_ytdl_path(model[tree_iter][1]) - + diff --git a/lib/downloads.py b/lib/downloads.py index 42907c7..a66347f 100644 --- a/lib/downloads.py +++ b/lib/downloads.py @@ -98,6 +98,8 @@ class DownloadManager(threading.Thread): def __init__(self, app_obj, force_sim_flag, download_list_obj): + print('dl 101 __init__') + super(DownloadManager, self).__init__() # IV list - class objects @@ -172,6 +174,8 @@ class DownloadManager(threading.Thread): download operation is complete. """ + print('dl 177 run') + # Perform the download operation until there is nothing left to # download, or until something has called # self.stop_download_operation() @@ -267,6 +271,8 @@ class DownloadManager(threading.Thread): """ + print('dl 274 change_worker_count') + # How many workers do we have already? current = len(self.worker_list) # If this object hasn't set up its worker pool yet, let the setup code @@ -319,9 +325,11 @@ class DownloadManager(threading.Thread): True if all downloads.DownloadWorker objects have finished their jobs, otherwise returns False - + """ + print('dl 331 check_workers_all_finished') + for worker_obj in self.worker_list: if not worker_obj.available_flag: return False @@ -339,9 +347,11 @@ class DownloadManager(threading.Thread): The first available downloads.DownloadWorker, or None if there are no available workers. - + """ + print('dl 353 get_available_worker') + for worker_obj in self.worker_list: if worker_obj.available_flag: return worker_obj @@ -362,6 +372,8 @@ class DownloadManager(threading.Thread): """ + print('dl 375 remove_worker') + new_list = [] for other_obj in self.worker_list: @@ -382,6 +394,8 @@ class DownloadManager(threading.Thread): loop, the downloads.DownloadWorker objects are cleaned up. """ + print('dl 397 stop_download_operation') + self.running_flag = False @@ -411,6 +425,8 @@ class DownloadWorker(threading.Thread): def __init__(self, download_manager_obj): + print('dl 428 __init__') + super(DownloadWorker, self).__init__() # IV list - class objects @@ -465,6 +481,8 @@ class DownloadWorker(threading.Thread): create a new downloads.VideoDownloader object and wait for the result. """ + print('dl 484 run') + # Import the main application (for convenience) app_obj = self.download_manager_obj.app_obj @@ -534,6 +552,8 @@ class DownloadWorker(threading.Thread): Tidy up IVs and stop any child processes. """ + print('dl 555 close') + self.running_flag = False if self.video_downloader_obj: self.video_downloader_obj.stop() @@ -552,9 +572,11 @@ class DownloadWorker(threading.Thread): download_item_obj (downloads.DownloadItem): The download item object describing the URL from which youtube-dl should download video(s). - + """ + print('dl 578 prepare_download') + self.download_item_obj = download_item_obj self.options_manager_obj = download_item_obj.options_manager_obj self.options_list = self.download_manager_obj.options_parser_obj.parse( @@ -569,6 +591,8 @@ class DownloadWorker(threading.Thread): """Called by downloads.DownloadManager.change_worker_count().""" + print('dl 594 set_doomed_flag') + self.doomed_flag = flag @@ -595,6 +619,8 @@ class DownloadWorker(threading.Thread): """ + print('dl 622 data_callback') + app_obj = self.download_manager_obj.app_obj app_obj.main_win_obj.progress_list_receive_dl_stats( self.download_item_obj, @@ -635,6 +661,8 @@ class DownloadList(object): def __init__(self, app_obj, media_data_obj): + print('dl 664 __init__') + # IV list - class objects # ----------------------- self.app_obj = app_obj @@ -711,6 +739,8 @@ class DownloadList(object): """ + print('dl 742 change_item_stage') + self.download_item_dict[dbid].stage = new_stage @@ -743,6 +773,8 @@ class DownloadList(object): """ + print('dl 776 create_item') + # Get the options.OptionsManager object that applies to this media # data object # (The manager might be specified by obj itself, or it might be @@ -805,9 +837,11 @@ class DownloadList(object): The next downloads.DownloadItem object, or None if there are none left. - + """ + print('dl 843 fetch_next_item') + for dbid in self.download_item_list: this_item = self.download_item_dict[dbid] @@ -841,6 +875,8 @@ class DownloadList(object): """ + print('dl 878 get_options_manager') + if media_data_obj.options_obj: return media_data_obj.options_obj elif media_data_obj.parent_obj: @@ -877,6 +913,8 @@ class DownloadItem(object): def __init__(self, dbid, media_data_obj, options_manager_obj): + print('dl 916 __init__') + # IV list - class objects # ----------------------- # The media data object to be downloaded @@ -965,6 +1003,8 @@ class VideoDownloader(object): def __init__(self, download_manager_obj, download_worker_obj, \ download_item_obj): + print('dl 1006 __init__') + # IV list - class objects # ----------------------- # The downloads.DownloadManager object handling the entire download @@ -1059,126 +1099,6 @@ class VideoDownloader(object): # Public class methods - def OLDdo_download(self): - - """Called by downloads.DownloadWorker.run(). - - Based on YoutubeDLDownloader.download(). - - Downloads video(s) from a URL described by self.download_item_obj. - - Returns: - - The final return code, a value in the range 0-5 (as described - above) - - """ - - # Import the main application (for convenience) - app_obj = self.download_manager_obj.app_obj - - # Set the default return code. Everything is OK unless we encounter - # any problems - self.return_code = self.OK - - # Reset the errors/warnings stored in the media data object, the last - # time it was checked/downloaded - self.download_item_obj.media_data_obj.reset_error_warning() - - # Prepare a system command... - cmd_list = self.get_system_cmd() - # ...and create a new child process using that command - self.create_child_process(cmd_list) - - # So that we can read from the child process STDOUT and STDERR, attach - # a file descriptor to the PipeReader objects - if self.child_process is not None: - - self.stdout_reader.attach_file_descriptor( - self.child_process.stdout, - ) - - self.stderr_reader.attach_file_descriptor( - self.child_process.stderr, - ) - - # While downloading the video, update the callback function with - # the status of the current job - while self.is_child_process_alive(): - - # Read from the child process STDOUT, and convert into unicode for - # Python's convenience - while not self.stdout_queue.empty(): - - stdout = self.stdout_queue.get_nowait().rstrip() - stdout = utils.convert_item(stdout, to_unicode=True) - - if stdout: - # Convert the statistics into a python dictionary in a - # standard format, specified in the comments for - # self.extract_stdout_data() - dl_stat_dict = self.extract_stdout_data(stdout) - # If the job's status is constants.COMPLETED_STAGE_ALREADY - # or constants.ERROR_STAGE_ABORT, set our - # self.return_code IV - self.extract_stdout_status(dl_stat_dict) - # Pass the dictionary on to self.download_worker_obj so the - # main window can be updated - self.download_worker_obj.data_callback(dl_stat_dict) - - if (app_obj.ytdl_write_stdout_flag): - print(stdout) - - # The child process has finished - while not self.stderr_queue.empty(): - - # Read from the child process STDERR queue (we don't need to read - # it in real time), and convert into unicode for python's - # convenience - stderr = self.stderr_queue.get_nowait().rstrip() - stderr = utils.convert_item(stderr, to_unicode=True) - - if self.is_warning(stderr): - self.set_return_code(self.WARNING) - self.download_item_obj.media_data_obj.set_warning(stderr) - - else: - self.set_return_code(self.ERROR) - self.download_item_obj.media_data_obj.set_error(stderr) - - if (app_obj.ytdl_write_stderr_flag): - print(stderr) - - # We also set the return code to self.ERROR if the download didn't - # start or if the child process return code is greater than 0 - # Original notes from youtube-dl-gui: - # NOTE: In Linux if the called script is just empty Python exits - # normally (ret=0), so we cant detect this or similar cases - # using the code below - # NOTE: In Unix a negative return code (-N) indicates that the child - # was terminated by signal N (e.g. -9 = SIGKILL) - if self.child_process is None: - self.set_return_code(self.ERROR) - self.download_item_obj.media_data_obj.set_error( - 'Download did not start', - ) - - elif self.child_process.returncode > 0: - self.set_return_code(self.ERROR) - self.download_item_obj.media_data_obj.set_error( - 'Child process exited with non-zero code: {}'.format( - self.child_process.returncode, - ) - ) - - # Pass a dictionary of values to downloads.DownloadWorker, confirming - # the result of the job. The values are passed on to the main - # window - self.last_data_callback() - - # Pass the result back to the parent downloads.DownloadWorker object - return self.return_code - def do_download(self): """Called by downloads.DownloadWorker.run(). @@ -1194,6 +1114,8 @@ class VideoDownloader(object): """ + print('dl 1117 do_download') + # Import the main application (for convenience) app_obj = self.download_manager_obj.app_obj @@ -1257,11 +1179,11 @@ class VideoDownloader(object): # Read from the child process STDERR queue (we don't need to read # it in real time), and convert into unicode for python's # convenience -# # (Convert Python2 to Python3) +# # (Convert Python2 to Python3) # stderr = self.stderr_queue.get_nowait().rstrip() # stderr = utils.convert_item(stderr, to_unicode=True) stderr = self.stderr_queue.get_nowait().rstrip().decode('utf-8') - + if self.is_warning(stderr): self.set_return_code(self.WARNING) self.download_item_obj.media_data_obj.set_warning(stderr) @@ -1311,6 +1233,8 @@ class VideoDownloader(object): Destructor function for this object. """ + print('dl 1236 close') + # Tell the PipeReader objects to shut down, thus joining their threads self.stdout_reader.join() self.stderr_reader.join() @@ -1337,6 +1261,8 @@ class VideoDownloader(object): """ + print('dl 1264 confirm_new_video') + if not self.video_num in self.video_check_dict: self.video_check_dict[self.video_num] = filename @@ -1386,6 +1312,8 @@ class VideoDownloader(object): """ + print('dl 1315 confirm_old_video') + # Create shortcut variables (for convenience) app_obj = self.download_manager_obj.app_obj media_data_obj = self.download_item_obj.media_data_obj @@ -1435,206 +1363,6 @@ class VideoDownloader(object): ) - def OLDconfirm_sim_video(self, json_dict): - - """Called by self.extract_stdout_data(). - - After a successful simulated download, youtube-dl presents us with JSON - data for the video. Use that data to update everything. - - Args: - - json_dict (dict): JSON data from STDOUT, converted into a python - dictionary - - """ - - # IMport the main application (for convenience) - app_obj = self.download_manager_obj.app_obj - - # From the JSON dictionary, extract the data we need - if '_filename' in json_dict: - full_path = json_dict['_filename'] - path, filename, extension = self.extract_filename(full_path) - else: - return app_obj.system_error( - 302, - 'Missing filename in JSON data', - ) - - if 'upload_date' in json_dict: - # date_string in form YYYYMMDD - date_string = json_dict['upload_date'] - dt_obj = datetime.datetime.strptime(date_string, '%Y%m%d') - upload_time = dt_obj.strftime('%s') - else: - upload_time = None - - if 'duration' in json_dict: - duration = json_dict['duration'] - else: - duration = None - - if 'title' in json_dict: - name = json_dict['title'] - else: - name = None - - if 'description' in json_dict: - descrip = json_dict['description'] - else: - descrip = None - - if 'thumbnail' in json_dict: - thumbnail = json_dict['thumbnail'] - else: - thumbnail = None - - if 'webpage_url' in json_dict: - source = json_dict['webpage_url'] - else: - source = None - - if 'playlist_index' in json_dict: - playlist_index = json_dict['playlist_index'] - else: - playlist_index = None - - # Does an existing media.Video object match this video? - media_data_obj = self.download_item_obj.media_data_obj - video_obj = None - if isinstance(media_data_obj, media.Video): - video_obj = media_data_obj - else: - # media_data_obj is a media.Channel or media.Playlist object. Check - # its child objects, looking for a matching video - # (video_obj is set to None, if no match is found) - video_obj = media_data_obj.find_matching_video(app_obj, filename) - - if not video_obj: - - # No matching media.Video object found, so create a new one - video_obj = app_obj.create_video_from_download( - self.download_item_obj, - path, - filename, - extension, - ) - - # Update its IVs with the JSON information we extracted - if name is not None: - video_obj.set_name(name) - - if upload_time is not None: - video_obj.set_upload_time(upload_time) - - if duration is not None: - video_obj.set_duration(duration) - - if source is not None: - video_obj.set_source(source) - - if descrip is not None: - video_obj.set_video_descrip( - descrip, - app_obj.main_win_obj.long_string_max_len, - ) - - # Only save the playlist index when this video is actually stored - # inside a media.Playlist object - if isinstance(video_obj.parent_obj, media.Playlist) \ - and playlist_index is not None: - video_obj.set_index(playlist_index) - - else: - - # If the 'Add videos' button was used, the path/filename/extension - # won't be set yet - if not video_obj.file_dir and full_path: - video_obj.set_file(path, filename, extension) - - # Update any video object IVs that are not set - if video_obj.name == app_obj.default_video_name \ - and name is not None: - video_obj.set_name(name) - - if not video_obj.upload_time and upload_time is not None: - video_obj.set_upload_time(upload_time) - - if not video_obj.duration and duration is not None: - video_obj.set_duration(duration) - - if not video_obj.source and source is not None: - video_obj.set_source(source) - - if not video_obj.descrip and descrip is not None: - video_obj.set_video_descrip( - descrip, - app_obj.main_win_obj.long_string_max_len, - ) - - # Only save the playlist index when this video is actually stored - # inside a media.Playlist object - if not video_obj.index \ - and isinstance(video_obj.parent_obj, media.Playlist) \ - and playlist_index is not None: - video_obj.set_index(playlist_index) - - # Deal with the video description, JSON data and thumbnail, according - # to the settings in options.OptionsManager - options_dict =self.download_worker_obj.options_manager_obj.options_dict - - if descrip and options_dict['write_description']: - descrip_path = os.path.join(path, filename + '.description') - if not options_dict['sim_keep_description']: - descrip_path = utils.convert_path_to_temp( - app_obj, - descrip_path, - ) - - # (Don't replace a file that already exists) - if not os.path.isfile(descrip_path): - fh = open(descrip_path, 'w') - fh.write(descrip.encode('utf-8')) - fh.close() - - if options_dict['write_info']: - json_path = os.path.join(path, filename + '.info.json') - if not options_dict['sim_keep_info']: - json_path = utils.convert_path_to_temp(app_obj, json_path) - - if not os.path.isfile(json_path): - with open(json_path, 'w') as outfile: - json.dump(json_dict, outfile, indent=4) - - if thumbnail and options_dict['write_thumbnail']: - - # Download the thumbnail, if we don't already have it - # The thumbnail's URL is something like - # 'https://i.ytimg.com/vi/abcdefgh/maxresdefault.jpg' - # When saved to disc by youtube-dl, the file is given the same name - # as the video (but with a different extension) - # Get the thumbnail's extension... - remote_file, remote_ext = os.path.splitext(thumbnail) - - # ...and thus get the filename used by youtube-dl when storing the - # thumbnail locally - thumb_path = os.path.join( - video_obj.file_dir, - video_obj.file_name + remote_ext, - ) - - if not options_dict['sim_keep_thumbnail']: - thumb_path = utils.convert_path_to_temp(app_obj, thumb_path) - - if not os.path.isfile(thumb_path): - request_obj = requests.get(thumbnail) - with open(thumb_path, 'wb') as outfile: - outfile.write(request_obj.content) - - # Update the main window - app_obj.announce_video_download(self.download_item_obj, video_obj) - def confirm_sim_video(self, json_dict): """Called by self.extract_stdout_data(). @@ -1649,7 +1377,9 @@ class VideoDownloader(object): """ - # IMport the main application (for convenience) + print('dl 1380 confirm_sim_video') + + # Import the main application (for convenience) app_obj = self.download_manager_obj.app_obj # From the JSON dictionary, extract the data we need @@ -1859,6 +1589,8 @@ class VideoDownloader(object): """ + print('dl 1592 create_child_process') + info = preexec = None if os.name == 'nt': # Hide the child process window that MS Windows helpfully creates @@ -1911,6 +1643,8 @@ class VideoDownloader(object): """ + print('dl 1646 extract_filename') + path, fullname = os.path.split(input_data.strip("\"")) filename, extension = os.path.splitext(fullname) @@ -1956,6 +1690,8 @@ class VideoDownloader(object): """ + print('dl 1693 extract_stdout_data') + # Initialise the dictionary with default key-value pairs for the main # window to display, to be overwritten (if possible) with new key- # value pairs as this function interprets the STDOUT message @@ -1981,7 +1717,7 @@ class VideoDownloader(object): # Extract the data stdout_list[0] = stdout_list[0].lstrip('\r') if stdout_list[0] == '[download]': - + dl_stat_dict['status'] = constants.ACTIVE_STAGE_DOWNLOAD # Get path, filename and extension @@ -2043,7 +1779,7 @@ class VideoDownloader(object): dl_stat_dict['status'] = constants.ERROR_STAGE_ABORT elif stdout_list[0] == '[hlsnative]': - + # Get information from the native HLS extractor (see # https://github.com/rg3/youtube-dl/blob/master/youtube_dl/ # downloader/hls.py#L54 @@ -2058,7 +1794,7 @@ class VideoDownloader(object): dl_stat_dict['percent'] = percent elif stdout_list[0] == '[ffmpeg]': - + # Using FFmpeg, not the the native HLS extractor # A successful video download is announced in one of several ways. # Use the first announcement to update self.video_check_dict, and @@ -2104,7 +1840,7 @@ class VideoDownloader(object): self.confirm_new_video(path, filename, extension) elif stdout_list[0][0] == '{': - + # JSON data, the result of a simulated download. Convert to a # python dictionary if self.dl_sim_flag: @@ -2130,12 +1866,12 @@ class VideoDownloader(object): dl_stat_dict['status'] = constants.ACTIVE_STAGE_CHECKING elif stdout_list[0][0] != '[' or stdout_list[0] == '[debug]': - + # (Just ignore this output) return dl_stat_dict else: - + # The download has started dl_stat_dict['status'] = constants.ACTIVE_STAGE_PRE_PROCESS @@ -2155,13 +1891,15 @@ class VideoDownloader(object): (which halts the download). Args: - + dl_stat_dict (dict): The Python dictionary returned by the call to self.extract_stdout_data(), in the standard form described by the comments for that function """ + print('dl 1901 extract_stdout_status') + if 'status' in dl_stat_dict: if dl_stat_dict['status'] == constants.COMPLETED_STAGE_ALREADY: self.set_return_code(self.ALREADY) @@ -2182,11 +1920,13 @@ class VideoDownloader(object): youtube-dl. Returns: - + Python list that contains the system command to execute. """ + print('dl 1928 get_system_cmd') + options_list = self.download_worker_obj.options_list # Simulate the download, rather than actually downloading videos, if @@ -2220,6 +1960,8 @@ class VideoDownloader(object): """ + print('dl 1963 is_child_process_alive') + if self.child_process is None: return False @@ -2236,7 +1978,7 @@ class VideoDownloader(object): checks the STERR message to see if it's an error or just a warning. Args: - + stderr (string): A message from the child process STDERR. Returns: @@ -2245,6 +1987,8 @@ class VideoDownloader(object): """ + print('dl 1990 is_warning') + return stderr.split(':')[0] == 'WARNING' @@ -2264,6 +2008,8 @@ class VideoDownloader(object): The new key-value pairs are used to update the main window. """ + print('dl 2011 last_data_callback') + dl_stat_dict = {} if self.return_code == self.OK: @@ -2308,11 +2054,13 @@ class VideoDownloader(object): is higher in the hierarchy of return codes than the current value. Args: - + code (int): A return code in the range 0-5 """ + print('dl 2062 set_return_code') + if code >= self.return_code: self.return_code = code @@ -2325,6 +2073,8 @@ class VideoDownloader(object): self.STOPPED. """ + print('dl 2076 stop') + if self.is_child_process_alive(): if os.name == 'nt': @@ -2371,6 +2121,8 @@ class PipeReader(threading.Thread): def __init__(self, queue): + print('dl 2124 __init__') + super(PipeReader, self).__init__() # IV list - other @@ -2398,34 +2150,6 @@ class PipeReader(threading.Thread): # Public class methods - def OLDOLDrun(self): - - """Called as a result of self.__init__(). - - Reads from STDOUT or STERR using the attached filed descriptor. - """ - - # Use this flag so that the loop can ignore FFmpeg error messsages - # (because the parent VideoDownloader object shouldn't use that as a - # serious error) - ignore_line = False - - while self.running_flag: - - if self.file_descriptor is not None: - for line in iter(self.file_descriptor.readline, str('')): - - if str('ffmpeg version') in line: - ignore_line = True - - if not ignore_line: - self.output_queue.put_nowait(line) - - self.file_descriptor = None - ignore_line = False - - time.sleep(self.sleep_time) - def run(self): """Called as a result of self.__init__(). @@ -2433,6 +2157,8 @@ class PipeReader(threading.Thread): Reads from STDOUT or STERR using the attached filed descriptor. """ + print('dl 2160 run') + # Use this flag so that the loop can ignore FFmpeg error messsages # (because the parent VideoDownloader object shouldn't use that as a # serious error) @@ -2472,9 +2198,11 @@ class PipeReader(threading.Thread): Args: filedesc (filehandle): The open filehandle for STDOUT or STDERR - + """ - + + print('dl 2204 attach_file_descriptor') + self.file_descriptor = filedesc @@ -2488,9 +2216,11 @@ class PipeReader(threading.Thread): Args: timeout (-): No calling code sets a timeout - + """ + print('dl 2222 join') + self.running_flag = False super(PipeReader, self).join(timeout) diff --git a/lib/files.py b/lib/files.py index 54f389f..2fe1c10 100644 --- a/lib/files.py +++ b/lib/files.py @@ -57,7 +57,7 @@ class FileManager(threading.Thread): # Public class methods - + def load_json(self, full_path): """Can be called by anything. @@ -66,7 +66,7 @@ class FileManager(threading.Thread): dictionary and returns the dictionary. Args: - + full_path (string): The full path to the JSON file Returns: @@ -95,20 +95,20 @@ class FileManager(threading.Thread): Args: full_path (string): The full path to the text file - + Returns: The contents of the text file as a string, or or None if the file is missing or can't be loaded - + """ if not os.path.isfile(full_path): return None - + with open(full_path, 'r') as text_file: text = text_file.read() - + return text @@ -129,7 +129,7 @@ class FileManager(threading.Thread): Returns: A GdkPixbuf, or None if the file is missing or can't be loaded - + """ if not os.path.isfile(full_path): diff --git a/lib/mainapp.py b/lib/mainapp.py index 1c9fe2a..584de66 100644 --- a/lib/mainapp.py +++ b/lib/mainapp.py @@ -77,6 +77,8 @@ class TartubeApp(Gtk.Application): def __init__(self, *args, **kwargs): + print('ap 80 __init__') + super(TartubeApp, self).__init__( *args, application_id=__main__.__app_id__, @@ -350,7 +352,8 @@ class TartubeApp(Gtk.Application): self.operation_save_flag = True # Flag set to True if a dialogue window should be shown at the end of # each download/update/refresh operation - self.operation_dialogue_flag = True +# self.operation_dialogue_flag = True + self.operation_dialogue_flag = False # Flag set to True if self.update_video_from_filesystem() should get # the video duration, if not already known, using the moviepy.editor # module (which may be slow) @@ -366,7 +369,8 @@ class TartubeApp(Gtk.Application): # and then waits for the results, an increase in this number is # applied to a download operation immediately, but a decrease is not # applied until one of the download jobs has finished - self.num_worker_default = 2 +# self.num_worker_default = 2 + self.num_worker_default = 1 # (Absoute minimum and maximum values) self.num_worker_max = 10 self.num_worker_min = 1 @@ -415,40 +419,38 @@ class TartubeApp(Gtk.Application): # Debugging flags (can only be set by editing the source code) # Delete the config file and the contents of Tartube's data directory # on startup -# self.debug_delete_data_flag = False - self.debug_delete_data_flag = True + self.debug_delete_data_flag = False # In the main window's menu, show a menu item for adding a set of # media data objects for testing -# self.debug_test_media_menu_flag = False - self.debug_test_media_menu_flag = True + self.debug_test_media_menu_flag = False # In the main window's toolbar, show a toolbar item for adding a set of # media data objects for testing self.debug_test_media_toolbar_flag = False # Show an dialogue window with 'Tartube is already running!' if the # user tries to open a second instance of Tartube -# self.debug_warn_multiple_flag = False - self.debug_warn_multiple_flag = True + self.debug_warn_multiple_flag = False # Open the main window in the top-left corner of the desktop -# self.debug_open_top_left_flag = False - self.debug_open_top_left_flag = True + self.debug_open_top_left_flag = False # Automatically open the system preferences window on startup self.debug_open_pref_win_flag = False # For Tartube developers who don't want to manually change # self.ytdl_path and self.ytdl_update_current on every startup # (assuming that self.debug_delete_data_flag is True), modify those # IVs -# self.debug_modify_ytdl_flag = False -# self.debug_ytdl_path = None -# self.debug_ytdl_update_current = None - self.debug_modify_ytdl_flag = True - self.debug_ytdl_path = 'youtube-dl' - self.debug_ytdl_update_current = 'Update using pip' + self.debug_modify_ytdl_flag = False + self.debug_ytdl_path = None + self.debug_ytdl_update_current = None +# self.debug_modify_ytdl_flag = True +# self.debug_ytdl_path = 'youtube-dl' +# self.debug_ytdl_update_current = 'Update using pip' def do_startup(self): """Gio.Application standard function.""" + print('ap 454 do_startup') + GObject.threads_init() Gtk.Application.do_startup(self) @@ -681,6 +683,8 @@ class TartubeApp(Gtk.Application): """Gio.Application standard function.""" + print('ap 684 do_activate') + # Only allow a single main window (raise any existing main windows) if not self.main_win_obj: self.start() @@ -698,7 +702,7 @@ class TartubeApp(Gtk.Application): self.show_msg_dialogue( utils.upper_case_first(__main__.__packagename__) \ + ' is already running!', - False, # Not modal + False, # Not modal 'warning', 'ok', ) @@ -712,6 +716,8 @@ class TartubeApp(Gtk.Application): handled by self.stop(). """ + print('ap 721 do_shutdown') + # Don't prompt the user before halting a download/update/refresh # operation, as we would do in calls to self.stop() if self.download_manager_obj: @@ -735,6 +741,8 @@ class TartubeApp(Gtk.Application): Performs general initialisation. """ + print('ap 746 start') + # Delete Tartube's config file and data directory, if the debugging # flag is set if self.debug_delete_data_flag: @@ -859,6 +867,8 @@ class TartubeApp(Gtk.Application): self.do_shutdown(). """ + print('ap 872 stop') + # If a download/update/refresh operation is in progress, get # confirmation before stopping if self.current_manager_obj: @@ -874,7 +884,7 @@ class TartubeApp(Gtk.Application): 'There is ' + string + ' operation in progress.\n' \ + 'Are you sure you want to quit ' \ + utils.upper_case_first(__main__.__packagename__) + '?', - True, # Modal + True, # Modal 'question', 'yes-no', ) @@ -929,9 +939,11 @@ class TartubeApp(Gtk.Application): 200-299: mainwin.py (in use: 201-234) 300-399: downloads.py (in use: 301-303) 400-499: config.py (in use: 401-404) - + """ + print('ap 947 system_error') + if self.main_win_obj: self.main_win_obj.errors_list_add_system_error(error_code, msg) else: @@ -950,6 +962,8 @@ class TartubeApp(Gtk.Application): loading/saving. """ + print('ap 967 load_config') + # Sanity check if self.current_manager_obj \ or not os.path.isfile(self.config_file_name) \ @@ -1049,6 +1063,8 @@ class TartubeApp(Gtk.Application): loading/saving. """ + print('ap 1068 save_config') + # Sanity check if self.current_manager_obj or self.disable_load_save_flag: return @@ -1118,6 +1134,8 @@ class TartubeApp(Gtk.Application): loading/saving. """ + print('ap 1139 load_db') + # Sanity check path = os.path.join(self.data_dir, self.db_file_name) if self.current_manager_obj \ @@ -1204,6 +1222,8 @@ class TartubeApp(Gtk.Application): loading/saving. """ + print('ap 1227 save_db') + # Sanity check if self.current_manager_obj or self.disable_load_save_flag: return @@ -1285,6 +1305,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 1310 switch_db') + # Sanity check if self.current_manager_obj or self.disable_load_save_flag: return @@ -1351,7 +1373,10 @@ class TartubeApp(Gtk.Application): """Called by self.switch_db(). Resets media registry IVs, so that a new Tartube database file can be - created.""" + created. + """ + + print('ap 1381 reset_db') # Reset IVs to their default states self.general_options_obj = options.OptionsManager() @@ -1378,6 +1403,8 @@ class TartubeApp(Gtk.Application): destroyed by the user. """ + print('ap 1408 create_system_folders') + self.fixed_all_folder = self.add_folder( 'All Videos', None, # No parent folder @@ -1434,6 +1461,8 @@ class TartubeApp(Gtk.Application): window's menu item. """ + print('ap 1466 disable_load_save') + self.disable_load_save_flag = True self.main_win_obj.save_db_menu_item.set_sensitive(False) @@ -1449,13 +1478,15 @@ class TartubeApp(Gtk.Application): Args: msg (string): The message to display - + """ + print('ap 1486 file_error_dialogue') + if self.main_win_obj: self.show_msg_dialogue( msg, - False, # Not modal + False, # Not modal 'error', 'ok', ) @@ -1472,6 +1503,8 @@ class TartubeApp(Gtk.Application): 'Temporary Videos' folder. (The folders themselves are not deleted). """ + print('ap 1508 delete_temp_folders') + for name in self.media_name_dict: dbid = self.media_name_dict[name] @@ -1514,6 +1547,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 1552 convert_version') + num_list = version.split('.') if len(num_list) != 3: return None @@ -1556,6 +1591,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 1596 download_manager_start') + if self.current_manager_obj: # Download, update or refresh operation already in progress return self.system_error( @@ -1569,7 +1606,7 @@ class TartubeApp(Gtk.Application): return self.show_msg_dialogue( 'A download operation cannot start\nif one or more' \ + ' configuration\nwindows are still open', - False, # Not modal + False, # Not modal 'error', 'ok', ) @@ -1605,7 +1642,7 @@ class TartubeApp(Gtk.Application): return self.show_msg_dialogue( msg, - False, # Not modal + False, # Not modal 'error', 'ok', ) @@ -1656,6 +1693,8 @@ class TartubeApp(Gtk.Application): continue running for a few seconds more. """ + print('ap 1698 download_manager_halt_timer') + if self.timer_id: self.timer_check_time = time.time() + self.timer_final_time @@ -1668,6 +1707,8 @@ class TartubeApp(Gtk.Application): widgets. """ + print('ap 1712 download_manager_finished') + # Get the time taken by the download operation, so we can convert it # into a nice string below (e.g. '05:15') time_num = int( @@ -1727,6 +1768,8 @@ class TartubeApp(Gtk.Application): self.update_manager_finished() is called. """ + print('ap 1773 update_manager_start') + if self.current_manager_obj: # Download, update or refresh operation already in progress return self.system_error( @@ -1740,7 +1783,7 @@ class TartubeApp(Gtk.Application): return self.show_msg_dialogue( 'An update operation cannot start\nif one or more' \ + ' configuration\nwindows are still open', - False, # Not modal + False, # Not modal 'error', 'ok', ) @@ -1767,9 +1810,11 @@ class TartubeApp(Gtk.Application): success_flag (True or False): True if the update operation succeeded, False if not - + """ + print('ap 1818 update_manager_finished') + # Any code can check whether a download/update/refresh operation is in # progress, or not, by checking this IV self.current_manager_obj = None @@ -1796,7 +1841,7 @@ class TartubeApp(Gtk.Application): self.show_msg_dialogue( msg, - False, # Not modal + False, # Not modal 'info', 'ok', ) @@ -1838,6 +1883,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 1888 refresh_manager_start') + if self.current_manager_obj: # Download, update or refresh operation already in progress return self.system_error( @@ -1858,7 +1905,7 @@ class TartubeApp(Gtk.Application): return self.show_msg_dialogue( 'A refresh operation cannot start\nif one or more' \ + ' configuration\nwindows are still open', - False, # Not modal + False, # Not modal 'error', 'ok', ) @@ -1884,6 +1931,8 @@ class TartubeApp(Gtk.Application): widgets. """ + print('ap 1936 refresh_manager_finished') + # Any code can check whether a download/update/refresh operation is in # progress, or not, by checking this IV self.current_manager_obj = None @@ -1908,7 +1957,7 @@ class TartubeApp(Gtk.Application): self.show_msg_dialogue( msg, - False, # Not modal + False, # Not modal 'info', 'ok', ) @@ -1948,6 +1997,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 2002 create_video_from_download') + # The downloads.DownloadItem handles a download for a video, a channel # or a playlist media_data_obj = download_item_obj.media_data_obj @@ -2019,6 +2070,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 2075 announce_video_download') + # If the video's parent media data object (a channel, playlist or # folder) is selected in the Video Index, update the Video Catalogue # for the downloaded video @@ -2070,6 +2123,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 2128 update_video_when_file_found') + # Only set the .name IV if the video is currently unnamed if video_obj.name == self.default_video_name: video_obj.set_name(video_obj.file_name) @@ -2150,6 +2205,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 2210 update_video_from_json') + json_path = os.path.join( video_obj.file_dir, video_obj.file_name + '.info.json', @@ -2195,6 +2252,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 2257 update_video_from_filesystem') + if video_obj.upload_time is None: video_obj.set_upload_time(os.path.getmtime(video_path)) @@ -2238,6 +2297,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 2302 add_video') + # Videos can't be placed inside other videos if parent_obj and isinstance(parent_obj, media.Video): return self.system_error( @@ -2303,9 +2364,11 @@ class TartubeApp(Gtk.Application): Returns: The new media.Channel object - + """ + print('ap 2372 add_channel') + # Channels can only be placed inside an unrestricted media.Folder # object (if they have a parent at all) if parent_obj \ @@ -2384,6 +2447,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 2452 add_playlist') + # Playlists can only be place inside an unrestricted media.Folder # object (if they have a parent at all) if parent_obj \ @@ -2460,6 +2525,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 2530 add_folder') + # Folders can only be placed inside an unrestricted media.Folder object # (if they have a parent at all) if parent_obj \ @@ -2527,6 +2594,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 2599 move_container_to_top') + # Do some basic checks if media_data_obj is None or isinstance(media_data_obj, media.Video) \ or self.current_manager_obj or not media_data_obj.parent_obj: @@ -2550,7 +2619,7 @@ class TartubeApp(Gtk.Application): + 'to the top level of ' \ + utils.upper_case_first(__main__.__packagename__) \ + '\'s data directory', - False, # Not modal + False, # Not modal 'question', 'yes-no', ) @@ -2591,6 +2660,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 2665 move_container') + # Do some basic checks if source_obj is None or isinstance(source_obj, media.Video) \ or dest_obj is None or isinstance(dest_obj, media.Video) \ @@ -2610,7 +2681,7 @@ class TartubeApp(Gtk.Application): return self.show_msg_dialogue( 'Channels, playlists and folders can\nonly be dragged into' \ + ' a folder', - False, # Not modal + False, # Not modal 'error', 'ok', ) @@ -2620,7 +2691,7 @@ class TartubeApp(Gtk.Application): return self.show_msg_dialogue( 'The fixed folder \'' + dest_obj.name \ + '\'\ncannot be moved (but it can still\nbe hidden)', - False, # Not modal + False, # Not modal 'error', 'ok', ) @@ -2630,7 +2701,7 @@ class TartubeApp(Gtk.Application): return self.show_msg_dialogue( 'The folder \'' + dest_obj.name \ + '\'\ncan only contain videos', - False, # Not modal + False, # Not modal 'error', 'ok', ) @@ -2659,7 +2730,7 @@ class TartubeApp(Gtk.Application): + 'This procedure will move all downloaded files\n' \ + 'to the new location' \ + temp_string, - False, # Not modal + False, # Not modal 'question', 'yes-no', ) @@ -2711,6 +2782,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 2787 delete_video') + if not isinstance(video_obj, media.Video): return self.system_error( 115, @@ -2769,6 +2842,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 2847 delete_container') + # Check this isn't a video or a fixed folder (which cannot be removed) if isinstance(media_data_obj, media.Video) \ or ( @@ -2814,7 +2889,7 @@ class TartubeApp(Gtk.Application): response2 = self.show_msg_dialogue( 'Are you SURE you want to delete files?\nThis procedure' \ ' cannot be reversed!', - True, # Modal + True, # Modal 'question', 'yes-no', ) @@ -2878,9 +2953,11 @@ class TartubeApp(Gtk.Application): no_update_index_flag (True or False): False if the Video Index should not be updated, because the calling function wants to do that itself. - + """ + print('ap 2961 mark_video_new') + # (List of Video Index rows to update, at the end of this function) update_list = [self.fixed_new_folder] if not no_update_index_flag: @@ -2966,7 +3043,7 @@ class TartubeApp(Gtk.Application): Marks a video object as downloaded (i.e. the video file exists on the user's filesystem) or not downloaded. - + The video object's .dl_flag IV is updated. Args: @@ -2975,9 +3052,11 @@ class TartubeApp(Gtk.Application): flag (True or False): True to mark the video as downloaded, False to mark it as not downloaded. - + """ + print('ap 3060 mark_video_downloaded') + # (List of Video Index rows to update, at the end of this function) update_list = [video_obj.parent_obj, self.fixed_all_folder] @@ -3052,7 +3131,7 @@ class TartubeApp(Gtk.Application): """Can be called by anything. Marks a video object as favourite or not favourite. - + The video object's .fav_flag IV is updated. Args: @@ -3065,9 +3144,11 @@ class TartubeApp(Gtk.Application): no_update_index_flag (True or False): False if the Video Index should not be updated, because the calling function wants to do that itself. - + """ + print('ap 3152 mark_video_favourite') + # (List of Video Index rows to update, at the end of this function) update_list = [self.fixed_fav_folder] if not no_update_index_flag: @@ -3170,6 +3251,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 3256 mark_folder_hidden') + if not isinstance(folder_obj, media.Folder): return self.system_error( 120, @@ -3226,6 +3309,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 3314 mark_container_favourite') + if isinstance(media_data_obj, media.Video): return self.system_error( 121, @@ -3303,9 +3388,11 @@ class TartubeApp(Gtk.Application): media_data_obj (media.Video, media.Channel, media.Playlist or media.Folder): The media data object to which the download options are applied. - + """ + print('ap 3396 apply_download_options') + if self.current_manager_obj \ or media_data_obj.options_obj\ or ( @@ -3338,9 +3425,11 @@ class TartubeApp(Gtk.Application): media_data_obj (media.Video, media.Channel, media.Playlist or media.Folder): The media data object from which the download options are removed. - + """ + print('ap 3433 remove_download_options') + if self.current_manager_obj or not media_data_obj.options_obj: return self.system_error( 123, @@ -3371,6 +3460,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 3465 watch_video_in_player') + path = os.path.join( video_obj.file_dir, video_obj.file_name + video_obj.file_ext, @@ -3382,7 +3473,7 @@ class TartubeApp(Gtk.Application): 'The video file is missing from ' \ + utils.upper_case_first(__main__.__packagename__) \ + '\'s\ndata directory (try downloading the\nvideo again!', - False, # Not modal + False, # Not modal 'error', 'ok', ) @@ -3421,6 +3512,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 3517 show_msg_dialogue') + # Prepare arguments main_win_obj = self.main_win_obj if not main_win_obj: @@ -3470,9 +3563,9 @@ class TartubeApp(Gtk.Application): # (Download operation timer) - - def timer_callback(self): + + def timer_callback(self): """Called by gobject timer created by self.download_manager_start(). @@ -3487,9 +3580,11 @@ class TartubeApp(Gtk.Application): Returns: 1 to keep the timer going, or None to halt it - + """ + print('ap 3588 timer_callback') + if self.timer_check_time is None: self.main_win_obj.progress_list_display_dl_stats() self.main_win_obj.results_list_update_row() @@ -3506,16 +3601,16 @@ class TartubeApp(Gtk.Application): # Not all downloaded files confirmed to exist yet, so return 1 # to keep the timer going a little longer return 1 - + # The download operation has finished. The call to # self.download_manager_finished() destroys the timer self.download_manager_finished() # (Menu item and toolbar button callbacks) - - def on_button_stop_operation(self, action, par): + + def on_button_stop_operation(self, action, par): """Called from a callback in self.do_startup(). @@ -3526,9 +3621,11 @@ class TartubeApp(Gtk.Application): action (Gio.SimpleAction): Object generated by Gio par (None): Ignored - + """ + print('ap 3629 on_button_stop_operation') + self.operation_halted_flag = True if self.download_manager_obj: @@ -3539,7 +3636,7 @@ class TartubeApp(Gtk.Application): self.refresh_manager_obj.stop_refresh_operation() - def on_button_switch_view(self, action, par): + def on_button_switch_view(self, action, par): """Called from a callback in self.do_startup(). @@ -3550,9 +3647,11 @@ class TartubeApp(Gtk.Application): action (Gio.SimpleAction): Object generated by Gio par (None): Ignored - + """ + print('ap 3655 on_button_switch_view') + if not self.complex_catalogue_flag: self.complex_catalogue_flag = True else: @@ -3565,7 +3664,7 @@ class TartubeApp(Gtk.Application): self.main_win_obj.video_index_current, ) - + def on_menu_about(self, action, par): """Called from a callback in self.do_startup(). @@ -3577,9 +3676,11 @@ class TartubeApp(Gtk.Application): action (Gio.SimpleAction): Object generated by Gio par (None): Ignored - + """ + print('ap 3684 on_menu_about') + dialogue_win = Gtk.AboutDialog() dialogue_win.set_transient_for(self.main_win_obj) dialogue_win.set_destroy_with_parent(True) @@ -3614,9 +3715,11 @@ class TartubeApp(Gtk.Application): action (Gio.SimpleAction): Object generated by Gio par (None): Ignored - + """ + print('ap 3723 on_menu_about_close') + action.destroy() @@ -3635,6 +3738,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 3743 on_menu_add_channel') + dialogue_win = mainwin.AddChannelDialogue(self.main_win_obj) response = dialogue_win.run() @@ -3658,7 +3763,7 @@ class TartubeApp(Gtk.Application): self.show_msg_dialogue( 'You must give the channel a name', - False, # Not modal + False, # Not modal 'error', 'ok', ) @@ -3671,7 +3776,7 @@ class TartubeApp(Gtk.Application): ): self.show_msg_dialogue( 'You must enter a valid URL', - False, # Not modal + False, # Not modal 'error', 'ok', ) @@ -3716,9 +3821,11 @@ class TartubeApp(Gtk.Application): action (Gio.SimpleAction): Object generated by Gio par (None): Ignored - + """ + print('ap 3829 on_menu_add_folder') + dialogue_win = mainwin.AddFolderDialogue(self.main_win_obj) response = dialogue_win.run() @@ -3740,7 +3847,7 @@ class TartubeApp(Gtk.Application): self.show_msg_dialogue( 'You must give the folder a name', - False, # Not modal + False, # Not modal 'error', 'ok', ) @@ -3780,9 +3887,11 @@ class TartubeApp(Gtk.Application): action (Gio.SimpleAction): Object generated by Gio par (None): Ignored - + """ + print('ap 3895 on_menu_add_playlist') + dialogue_win = mainwin.AddPlaylistDialogue(self.main_win_obj) response = dialogue_win.run() @@ -3806,7 +3915,7 @@ class TartubeApp(Gtk.Application): self.show_msg_dialogue( 'You must give the playlist a name', - False, # Not modal + False, # Not modal 'error', 'ok', ) @@ -3819,7 +3928,7 @@ class TartubeApp(Gtk.Application): ): self.show_msg_dialogue( 'You must enter a valid URL', - False, # Not modal + False, # Not modal 'error', 'ok', ) @@ -3864,9 +3973,11 @@ class TartubeApp(Gtk.Application): action (Gio.SimpleAction): Object generated by Gio par (None): Ignored - + """ + print('ap 3981 on_menu_add_video') + dialogue_win = mainwin.AddVideoDialogue(self.main_win_obj) response = dialogue_win.run() @@ -3922,9 +4033,11 @@ class TartubeApp(Gtk.Application): action (Gio.SimpleAction): Object generated by Gio par (None): Ignored - + """ + print('ap 4041 on_menu_check_all') + self.download_manager_start(True) @@ -3939,9 +4052,11 @@ class TartubeApp(Gtk.Application): action (Gio.SimpleAction): Object generated by Gio par (None): Ignored - + """ + print('ap 4060 on_menu_download_all') + self.download_manager_start(False) @@ -3956,9 +4071,11 @@ class TartubeApp(Gtk.Application): action (Gio.SimpleAction): Object generated by Gio par (None): Ignored - + """ + print('ap 4079 on_menu_general_options') + config.OptionsEditWin(self, self.general_options_obj, None) @@ -3973,9 +4090,11 @@ class TartubeApp(Gtk.Application): action (Gio.SimpleAction): Object generated by Gio par (None): Ignored - + """ + print('ap 4098 on_menu_refresh_db') + self.refresh_manager_start() @@ -3990,9 +4109,11 @@ class TartubeApp(Gtk.Application): action (Gio.SimpleAction): Object generated by Gio par (None): Ignored - + """ + print('ap 4117 on_menu_save_db') + self.save_db() # Show a dialogue window for confirmation (unless file load/save has @@ -4001,7 +4122,7 @@ class TartubeApp(Gtk.Application): self.show_msg_dialogue( 'Database saved', - False, # Not modal + False, # Not modal 'info', 'ok', ) @@ -4018,9 +4139,11 @@ class TartubeApp(Gtk.Application): action (Gio.SimpleAction): Object generated by Gio par (None): Ignored - + """ + print('ap 4147 on_menu_show_hidden') + for name in self.media_name_dict: dbid = self.media_name_dict[name] @@ -4042,9 +4165,11 @@ class TartubeApp(Gtk.Application): action (Gio.SimpleAction): Object generated by Gio par (None): Ignored - + """ + print('ap 4173 on_menu_system_preferences') + config.SystemPrefWin(self) @@ -4060,9 +4185,11 @@ class TartubeApp(Gtk.Application): action (Gio.SimpleAction): Object generated by Gio par (None): Ignored - + """ + print('ap 4193 on_menu_test') + # Add media data objects for testing: videos, channels, playlists and/ # or folders testing.add_test_media(self) @@ -4094,9 +4221,11 @@ class TartubeApp(Gtk.Application): action (Gio.SimpleAction): Object generated by Gio par (None): Ignored - + """ + print('ap 4229 on_menu_update_ytdl') + self.update_manager_start() @@ -4111,9 +4240,11 @@ class TartubeApp(Gtk.Application): action (Gio.SimpleAction): Object generated by Gio par (None): Ignored - + """ + print('ap 4248 on_menu_quit') + self.stop() @@ -4135,6 +4266,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 4271 reject_media_name') + # Get the existing media data object with this name dbid = self.media_name_dict[name] media_data_obj = self.media_reg_dict[dbid] @@ -4149,7 +4282,7 @@ class TartubeApp(Gtk.Application): self.show_msg_dialogue( 'There is already a ' + string + ' with that name\n' \ + '(so please choose a different name)', - False, # Not modal + False, # Not modal 'error', 'ok', ) @@ -4171,6 +4304,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 4309 set_bandwidth_default') + if value < self.bandwidth_min or value > self.bandwidth_max: return self.system_error( 124, @@ -4188,6 +4323,8 @@ class TartubeApp(Gtk.Application): progress, the new setting is applied to the next download job. """ + print('ap 4328 set_bandwidth_apply_flag') + if not flag: self.bandwidth_apply_flag = False else: @@ -4196,6 +4333,8 @@ class TartubeApp(Gtk.Application): def set_complex_index_flag(self, flag): + print('ap 4338 set_complex_index_flag') + if not flag: self.complex_index = False else: @@ -4204,16 +4343,22 @@ class TartubeApp(Gtk.Application): def set_match_first_chars(self, num_chars): + print('ap 4348 set_match_first_chars') + self.match_first_chars = num_chars def set_match_ignore_chars(self, num_chars): + print('ap 4355 set_match_ignore_chars') + self.match_ignore_chars = num_chars def set_match_method(self, method): + print('ap 4362 set_match_method') + self.match_method = method @@ -4223,9 +4368,11 @@ class TartubeApp(Gtk.Application): Applies or releases the simultaneous download limit. If a download operation is in progress, the new setting is applied to the next - download job. + download job. """ + print('ap 4376 set_num_worker_apply_flag') + if not flag: self.bandwidth_apply_flag = False else: @@ -4247,6 +4394,8 @@ class TartubeApp(Gtk.Application): """ + print('ap 4399 set_num_worker_default') + if value < self.num_worker_min or value > self.num_worker_max: return self.system_error( 125, @@ -4262,6 +4411,8 @@ class TartubeApp(Gtk.Application): def set_operation_auto_update_flag(self, flag): + print('ap 4416 set_operation_auto_update_flag') + if not flag: self.operation_auto_update_flag = False else: @@ -4270,6 +4421,8 @@ class TartubeApp(Gtk.Application): def set_operation_dialogue_flag(self, flag): + print('ap 4426 set_operation_dialogue_flag') + if not flag: self.operation_dialogue_flag = False else: @@ -4278,6 +4431,8 @@ class TartubeApp(Gtk.Application): def set_operation_save_flag(self, flag): + print('ap 4436 set_operation_save_flag') + if not flag: self.operation_save_flag = False else: @@ -4286,6 +4441,8 @@ class TartubeApp(Gtk.Application): def set_use_module_moviepy_flag(self, flag): + print('ap 4446 set_use_module_moviepy_flag') + if not flag: self.use_module_moviepy_flag = False else: @@ -4294,6 +4451,8 @@ class TartubeApp(Gtk.Application): def set_use_module_moviepy_flag(self, flag): + print('ap 4456 set_use_module_moviepy_flag') + if not flag: self.use_module_validators_flag = False else: @@ -4302,16 +4461,22 @@ class TartubeApp(Gtk.Application): def set_ytdl_path(self, path): + print('ap 4466 set_ytdl_path') + self.ytdl_path = path def set_ytdl_update_current(self, string): + print('ap 4473 set_ytdl_update_current') + self.ytdl_update_current = string def set_ytdl_write_stderr_flag(self, flag): + print('ap 4480 set_ytdl_write_stderr_flag') + if not flag: self.ytdl_write_stderr_flag = False else: @@ -4320,6 +4485,8 @@ class TartubeApp(Gtk.Application): def set_ytdl_write_stdout_flag(self, flag): + print('ap 4490 set_ytdl_write_stdout_flag') + if not flag: self.ytdl_write_stdout_flag = False else: @@ -4328,6 +4495,8 @@ class TartubeApp(Gtk.Application): def set_ytdl_write_verbose_flag(self, flag): + print('ap 4500 set_ytdl_write_verbose_flag') + if not flag: self.ytdl_write_verbose_flag = False else: diff --git a/lib/mainwin.py b/lib/mainwin.py index 2d85699..414b692 100644 --- a/lib/mainwin.py +++ b/lib/mainwin.py @@ -79,6 +79,8 @@ class MainWin(Gtk.ApplicationWindow): def __init__(self, app_obj): + print ('mw 82 __init__') + super(MainWin, self).__init__( title=__main__.__packagename__.title() + ' v' \ + __main__.__version__ + ' UNSTABLE', @@ -350,6 +352,8 @@ class MainWin(Gtk.ApplicationWindow): by constants.py. """ + print ('mw 355 setup_pixbufs') + for key in constants.DIALOGUE_ICON_DICT: rel_path = constants.DIALOGUE_ICON_DICT[key] full_path = os.path.join('icons', 'dialogue', rel_path) @@ -389,6 +393,8 @@ class MainWin(Gtk.ApplicationWindow): widgets. """ + print ('mw 396 setup_win') + # Set the default window size self.set_default_size( self.app_obj.main_win_width, @@ -417,6 +423,8 @@ class MainWin(Gtk.ApplicationWindow): Sets up a Gtk.Grid on which all the main window's widgets are placed. """ + print ('mw 426 setup_grid') + self.grid = Gtk.Grid() self.add(self.grid) @@ -428,6 +436,8 @@ class MainWin(Gtk.ApplicationWindow): Sets up a Gtk.Menu at the top of the main window. """ + print ('mw 439 setup_menubar') + self.menubar = Gtk.MenuBar() self.grid.attach(self.menubar, 0, 0, 1, 1) @@ -584,6 +594,8 @@ class MainWin(Gtk.ApplicationWindow): Sets up a Gtk.Toolbar near the top of the main window, below the menu. """ + print ('mw 597 setup_toolbar') + self.toolbar = Gtk.Toolbar() self.grid.attach(self.toolbar, 0, 1, 1, 1) @@ -687,6 +699,8 @@ class MainWin(Gtk.ApplicationWindow): toolbar. Creates two tabs, the Videos Tab and the Progress Tab. """ + print ('mw 702 setup_notebook') + self.notebook = Gtk.Notebook() self.grid.attach(self.notebook, 0, 2, 1, 1) self.notebook.set_border_width(self.spacing_size) @@ -724,6 +738,8 @@ class MainWin(Gtk.ApplicationWindow): Creates widgets for the Videos Tab. """ + print ('mw 741 setup_videos_tab') + self.videos_paned = Gtk.HPaned() self.videos_tab.pack_start(self.videos_paned, True, True, 0) self.videos_paned.set_position(self.videos_paned_posn) @@ -789,6 +805,8 @@ class MainWin(Gtk.ApplicationWindow): Creates widgets for the Progress Tab. """ + print ('mw 808 setup_progress_tab') + vbox = Gtk.VBox() self.progress_tab.pack_start(vbox, True, True, 0) @@ -945,6 +963,8 @@ class MainWin(Gtk.ApplicationWindow): Creates widgets for the Errors Tab. """ + print ('mw 966 setup_errors_tab') + vbox = Gtk.VBox() self.errors_tab.pack_start(vbox, True, True, 0) @@ -984,7 +1004,7 @@ class MainWin(Gtk.ApplicationWindow): self.errors_list_liststore = Gtk.ListStore( GdkPixbuf.Pixbuf, GdkPixbuf.Pixbuf, - str, str, str, str, + str, str, str, ) self.errors_list_treeview.set_model(self.errors_list_liststore) @@ -1022,6 +1042,8 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 1045 sensitise_operation_widgets') + self.system_prefs_menu_item.set_sensitive(flag) self.gen_options_menu_item.set_sensitive(flag) self.check_all_menu_item.set_sensitive(flag) @@ -1061,6 +1083,8 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 1086 modify_widgets_in_update_operation') + if not finish_flag: self.check_button.set_label('Updating') @@ -1094,6 +1118,8 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 1121 modify_widgets_in_refresh_operation') + if not finish_flag: self.check_button.set_label('Refreshing') @@ -1129,6 +1155,8 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 1158 show_progress_bar') + if self.progress_bar: return self.app_obj.system_error( 201, @@ -1170,6 +1198,8 @@ class MainWin(Gtk.ApplicationWindow): original button. """ + print('mw 1201 hide_progress_bar') + if not self.progress_bar: return self.app_obj.system_error( 202, @@ -1218,6 +1248,8 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 1251 update_progress_bar') + if not self.progress_bar: return self.app_obj.system_error( 203, @@ -1256,9 +1288,11 @@ class MainWin(Gtk.ApplicationWindow): Returns: -1 if row_iter1 comes before row_iter2, 1 if row_iter2 comes before row_iter1, 0 if their order should not be changed - + """ + print('mw 1294 video_index_auto_sort') + # If auto-sorting is disabled temporarily, we can prevent the list # being sorted by returning -1 for all cases if self.video_index_no_sort_flag: @@ -1316,50 +1350,6 @@ class MainWin(Gtk.ApplicationWindow): return 0 - def OLDvideo_catalogue_auto_sort(self, row1, row2, data, notify): - - """Sorting function created by self.videos_tab. - - Automatically sorts rows in the Video Catalogue. - - Args: - - row1, row2 (mainwin.CatalogueRow): Two rows in the liststore, one - of which must be sorted before the other - - data (None): Ignored - - notify (False): Ignored - - Returns: - -1 if row1 comes before row2, 1 if row2 comes before row1, 0 if - their order should not be changed - - """ - - # Get the media.Video objects displayed on each row - obj1 = row1.video_obj - obj2 = row2.video_obj - - # Sort videos by playlist index (if set), then by upload time, and then - # by receive (download) time - if obj1.index is not None and obj2.index is not None: - if obj1.index < obj2.index: - return -1 - else: - return 1 - elif obj1.upload_time < obj2.upload_time: - return 1 - elif obj1.upload_time == obj2.upload_time: - if obj1.receive_time < obj2.receive_time: - return -1 - elif obj1.receive_time == obj2.receive_time: - return 0 - else: - return 1 - else: - return -1 - def video_catalogue_auto_sort(self, row1, row2, data, notify): """Sorting function created by self.videos_tab. @@ -1377,10 +1367,12 @@ class MainWin(Gtk.ApplicationWindow): Returns: -1 if row1 comes before row2, 1 if row2 comes before row1, 0 if - their order should not be changed + their order should not be changed """ + print('mw 1374 video_catalogue_auto_sort') + # Get the media.Video objects displayed on each row obj1 = row1.video_obj obj2 = row2.video_obj @@ -1434,6 +1426,8 @@ class MainWin(Gtk.ApplicationWindow): filled with new data. """ + print('mw 1429 video_index_reset') + # If not called by self.setup_videos_tab()... if self.video_index_treeview: @@ -1546,6 +1540,8 @@ class MainWin(Gtk.ApplicationWindow): self.self.video_index_add_row(). """ + print('mw 1543 video_index_populate') + for dbid in self.app_obj.media_top_level_list: media_data_obj = self.app_obj.media_reg_dict[dbid] @@ -1558,6 +1554,9 @@ class MainWin(Gtk.ApplicationWindow): else: self.video_index_setup_row(media_data_obj, None) + # Make the changes visible + self.video_index_treeview.show_all() + def video_index_setup_row(self, media_data_obj, parent_pointer=None): @@ -1577,6 +1576,8 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 1579 video_index_setup_row') + # Don't show a hidden folder, or any of its children if isinstance(media_data_obj, media.Folder) \ and media_data_obj.hidden_flag: @@ -1624,16 +1625,18 @@ class MainWin(Gtk.ApplicationWindow): Also called by callbacks in mainapp.TartubeApp.on_menu_add_channel(), .cb on_menu_add_folder() and cb on_menu_add_playlist(). - + Adds a row to the Video Index. Args: - + media_data_obj (media.Video, media.Channel, media.Playlist, media.Folder): The media data object for this row """ + print('mw 1638 video_index_add_row') + # Don't add a hidden folder, or any of its children if media_data_obj.is_hidden(): return @@ -1709,6 +1712,9 @@ class MainWin(Gtk.ApplicationWindow): if self.video_index_no_sort_flag: self.video_index_no_sort_flag = False + # Make the changes visible + self.video_index_treeview.show_all() + def video_index_delete_row(self, media_data_obj): @@ -1718,12 +1724,14 @@ class MainWin(Gtk.ApplicationWindow): Removes a row from the Video Index. Args: - + media_data_obj (media.Video, media.Channel, media.Playlist, media.Folder): The media data object for this row - + """ + print('mw 1733 video_index_delete_row') + # Videos can't be shown in the Video Index if isinstance(media_data_obj, media.Video): return self.app_obj.system_error( @@ -1754,8 +1762,8 @@ class MainWin(Gtk.ApplicationWindow): selection = self.video_index_treeview.get_selection() selection.unselect_all() - # Procedure complete - self.show_all() + # Make the changes visible + self.video_index_treeview.show_all() def video_index_select_row(self, media_data_obj): @@ -1772,6 +1780,8 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 1783 video_index_select_row') + # Cannot select a hidden folder, or any of its children if isinstance(media_data_obj, media.Video) \ or media_data_obj.is_hidden(): @@ -1812,9 +1822,11 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj (media.Channel, media.Playlist or media.Folder): The media data object whose row should be updated - + """ + print('mw 1828 video_index_update_row_icon') + # Videos can't be shown in the Video Index if isinstance(media_data_obj, media.Video): return self.app_obj.system_error( @@ -1829,11 +1841,14 @@ class MainWin(Gtk.ApplicationWindow): # Update the treeview row tree_ref = self.video_index_row_dict[media_data_obj.name] - model = tree_ref.get_model() + model = tree_ref.get_model() tree_path = tree_ref.get_path() tree_iter = model.get_iter(tree_path) model.set(tree_iter, 2, self.videx_index_get_icon(media_data_obj)) + # Make the changes visible + self.video_index_treeview.show_all() + def video_index_update_row_text(self, media_data_obj): @@ -1853,9 +1868,11 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj (media.Channel, media.Playlist or media.Folder): The media data object whose row should be updated - + """ - + + print('mw 1874 video_index_update_row_text') + # Videos can't be shown in the Video Index if isinstance(media_data_obj, media.Video): return self.app_obj.system_error( @@ -1870,11 +1887,14 @@ class MainWin(Gtk.ApplicationWindow): # Update the treeview row tree_ref = self.video_index_row_dict[media_data_obj.name] - model = tree_ref.get_model() + model = tree_ref.get_model() tree_path = tree_ref.get_path() tree_iter = model.get_iter(tree_path) model.set(tree_iter, 3, self.video_index_get_text(media_data_obj)) + # Make the changes visible + self.video_index_treeview.show_all() + def videx_index_get_icon(self, media_data_obj): @@ -1899,6 +1919,8 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 1922 videx_index_get_icon') + if isinstance(media_data_obj, media.Channel): if media_data_obj.fav_flag and media_data_obj.options_obj: @@ -1990,7 +2012,9 @@ class MainWin(Gtk.ApplicationWindow): A string. - """ + """ + + print('mw 2017 video_index_get_text') text = utils.shorten_string( media_data_obj.name, @@ -2048,6 +2072,8 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 2075 video_index_render_text') + dbid = model.get_value(tree_iter, 0) media_data_obj = self.app_obj.media_reg_dict[dbid] @@ -2079,6 +2105,8 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 2018 video_index_popup_menu') + # Find the right-clicked media data object (and a string to describe # its type) dbid = self.app_obj.media_name_dict[name] @@ -2349,6 +2377,8 @@ class MainWin(Gtk.ApplicationWindow): with new data. """ + print('mw 2380 video_catalogue_reset') + # If not called by self.setup_videos_tab()... if self.video_catalogue_listbox: self.video_catalogue_frame.remove( @@ -2379,7 +2409,7 @@ class MainWin(Gtk.ApplicationWindow): """Called from callbacks in self.on_video_index_selection_changed(), mainapp.TartubeApp.on_button_switch_view(), .on_menu_add_video() and on_menu_test(). - + When the user clicks on a media data object in the Video Index (a channel, playlist or folder), this function is called to replace the contents of the Video Catalogue with all the video objects stored as @@ -2398,12 +2428,14 @@ class MainWin(Gtk.ApplicationWindow): each video. Args: - + name (string): The selected media data object's name; one of the keys in self.media_name_dict """ + print('mw 2437 video_catalogue_redraw_all') + # The parent media data object is a media.Channel, media.playlist or # media.Folder object dbid = self.app_obj.media_name_dict[name] @@ -2464,11 +2496,11 @@ class MainWin(Gtk.ApplicationWindow): """Called by self.results_list_update_row and a callback in self.on_video_catalogue_enforce_check(). - + Also called by mainapp.TartubeApp.create_video_from_download(), .announce_video_download(), .mark_video_new() and .mark_video_favourite(). - + This function is called with a media.Video object. If that video is already visible in the Video Catalogue, updates the corresponding mainwin.SimpleCatalogueItem or mainwin.ComplexCatalogueItem (which @@ -2484,20 +2516,19 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 2519 video_catalogue_update_row') + # Is the video's parent channel, playlist or folder the one that is # currently selected in the Video Index? If not, the video is not # displayed in the Video Catalogue - selection = self.video_index_treeview.get_selection() - (model, iter) = selection.get_selected() + if self.video_index_current is None: + return - if iter is None \ - or ( - model[iter][1] != video_obj.parent_obj.name \ - and model[iter][1] != self.app_obj.fixed_all_folder.name \ - and ( - model[iter][1] != self.app_obj.fixed_new_folder.name \ - or not video_obj.new_flag - ) + elif self.video_index_current != video_obj.parent_obj.name \ + and self.video_index_current != self.app_obj.fixed_all_folder.name \ + and ( + self.video_index_current != self.app_obj.fixed_new_folder.name \ + or not video_obj.new_flag ): return @@ -2558,27 +2589,26 @@ class MainWin(Gtk.ApplicationWindow): This function is called with a media.Video object. If that video is already visible in the Video Catalogue, removes the corresponding mainwin.SimpleCatalogueItem or mainwin.ComplexCatalogueItem . - + Args: video_obj (media.Video) - The video to remove """ + print('mw 2602 video_catalogue_delete_row') + # Is the video's parent channel, playlist or folder the one that is # currently selected in the Video Index? If not, the video is not # displayed in the Video Catalogue - selection = self.video_index_treeview.get_selection() - (model, iter) = selection.get_selected() + if self.video_index_current is None: + return - if iter is None \ - or ( - model[iter][1] != video_obj.parent_obj.name \ - and model[iter][1] != self.app_obj.fixed_all_folder.name \ - and ( - model[iter][1] != self.app_obj.fixed_new_folder.name \ - or video_obj.new_flag - ) + elif self.video_index_current != video_obj.parent_obj.name \ + and self.video_index_current != self.app_obj.fixed_all_folder.name \ + and ( + self.video_index_current != self.app_obj.fixed_new_folder.name \ + or not video_obj.new_flag ): return @@ -2631,6 +2661,8 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 2653 video_catalogue_popup_menu') + # Set up the popup menu popup_menu = Gtk.Menu() @@ -2874,6 +2906,8 @@ class MainWin(Gtk.ApplicationWindow): Also resets related IVs. """ + print('mw 2905 progress_list_reset') + # Reset widgets self.progress_list_liststore = Gtk.ListStore( GdkPixbuf.Pixbuf, @@ -2904,25 +2938,20 @@ class MainWin(Gtk.ApplicationWindow): Progress List. Args: - + download_list_obj (downloads.DownloadList): The download list object that has just been created """ + print('mw 2953 progress_list_init') + # For each download item object, add a row to the treeview, and store # the download item's .dbid IV so that # self.progress_list_receive_dl_stats() can update the correct row for dbid in download_list_obj.download_item_list: - # Create a new row in the treeview download_item_obj = download_list_obj.download_item_dict[dbid] - row_iter = self.progress_list_liststore.append([]) - - # Store the row's details so we can update it later - self.progress_list_row_dict[dbid] \ - = self.progress_list_row_count - self.progress_list_row_count += 1 # Prepare the icon if isinstance(download_item_obj.media_data_obj, media.Channel): @@ -2934,17 +2963,34 @@ class MainWin(Gtk.ApplicationWindow): else: pixbuf = self.pixbuf_dict['video_small'] - # Set the row's initial contents - self.progress_list_liststore.set(row_iter, 0, pixbuf) - self.progress_list_liststore.set( - row_iter, - 1, + # Prepare the new row in the treeview + row_list = [] + + row_list.append(pixbuf) + row_list.append( utils.shorten_string( download_item_obj.media_data_obj.name, self.string_max_len, - ) + ), ) - self.progress_list_liststore.set(row_iter, 3, 'Waiting') + row_list.append(None) + row_list.append('Waiting') + row_list.append(None) + row_list.append(None) + row_list.append(None) + row_list.append(None) + row_list.append(None) + row_list.append(None) + + # Create a new row in the treeview. Doing the .show_all() first + # prevents a Gtk error (for unknown reasons) + self.progress_list_treeview.show_all() + self.progress_list_liststore.append(row_list) + + # Store the row's details so we can update it later + self.progress_list_row_dict[dbid] \ + = self.progress_list_row_count + self.progress_list_row_count += 1 def progress_list_receive_dl_stats(self, download_item_obj, dl_stat_dict): @@ -2977,6 +3023,8 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 3022 progress_list_receive_dl_stats') + # Check that the Progress List actually has a row for the specified # downloads.DownloadItem object if not download_item_obj.dbid in self.progress_list_row_dict: @@ -3010,6 +3058,8 @@ class MainWin(Gtk.ApplicationWindow): function to display them. """ + print('mw 3057 progress_list_display_dl_stats') + # Import the contents of the IV (in case it gets updated during the # call to this function), and use the imported copy temp_dict = self.progress_list_temp_dict @@ -3088,6 +3138,8 @@ class MainWin(Gtk.ApplicationWindow): (There are no IVs to reset.) """ + print('mw 3137 results_list_reset') + # Reset widgets self.results_list_liststore = Gtk.ListStore( GdkPixbuf.Pixbuf, @@ -3097,7 +3149,7 @@ class MainWin(Gtk.ApplicationWindow): str, ) self.results_list_treeview.set_model(self.results_list_liststore) - + # Reset IVs self.results_list_row_count = 0 self.results_list_temp_list = [] @@ -3135,8 +3187,7 @@ class MainWin(Gtk.ApplicationWindow): """ - # Create a new row in the treeview - row_iter = self.results_list_liststore.append([]) + print('mw 3186 results_list_add_row') # Prepare the icons if self.app_obj.download_manager_obj.force_sim_flag \ @@ -3157,48 +3208,48 @@ class MainWin(Gtk.ApplicationWindow): 'Results List add row request failed sanity check', ) + # Prepare the new row in the treeview + row_list = [] + # Set the row's initial contents - self.results_list_liststore.set(row_iter, 0, pixbuf) - self.results_list_liststore.set( - row_iter, - 1, + row_list.append(pixbuf) + row_list.append( utils.shorten_string(video_obj.name, self.string_max_len), ) # (For a simulated download, the video duration (etc) will already be # available, so we can display those values) if video_obj.duration is not None: - self.results_list_liststore.set( - row_iter, - 2, + row_list.append( utils.convert_seconds_to_string(video_obj.duration), ) + else: + row_list.append(None) - if video_obj.file_size: - self.results_list_liststore.set( - row_iter, - 3, - video_obj.get_file_size_string(), - ) + if video_obj.file_size is not None: + row_list.append(video_obj.get_file_size_string()) + else: + row_list.append(None) - if video_obj.upload_time: - self.results_list_liststore.set( - row_iter, - 4, - video_obj.get_upload_date_string(), - ) + if video_obj.upload_time is not None: + row_list.append(video_obj.get_upload_date_string()) + else: + row_list.append(None) - self.results_list_liststore.set(row_iter, 5, video_obj.dl_flag) - self.results_list_liststore.set(row_iter, 6, pixbuf2) - self.results_list_liststore.set( - row_iter, - 7, + row_list.append(video_obj.dl_flag) + row_list.append(pixbuf2) + row_list.append( utils.shorten_string( video_obj.parent_obj.name, self.string_max_len, ), ) + # Create a new row in the treeview. Doing the .show_all() first + # prevents a Gtk error (for unknown reasons) + self.results_list_treeview.show_all() + self.results_list_liststore.append(row_list) + # Store some information about this download so that periodic calls to # self.results_list_update_row() can retrieve it, and check whether # the file exists yet @@ -3240,6 +3291,8 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 3293 results_list_update_row') + new_temp_list = [] while self.results_list_temp_list: @@ -3335,7 +3388,7 @@ class MainWin(Gtk.ApplicationWindow): ) else: - + # File not found # If this was a simulated download, the key 'keep_description' @@ -3366,10 +3419,12 @@ class MainWin(Gtk.ApplicationWindow): (There are no IVs to reset.) """ + print('mw 3421 errors_list_reset') + # Reset widgets self.errors_list_liststore = Gtk.ListStore( GdkPixbuf.Pixbuf, GdkPixbuf.Pixbuf, - str, str, str, str, + str, str, str, ) self.errors_list_treeview.set_model(self.errors_list_liststore) @@ -3389,6 +3444,8 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 3446 errors_list_add_row') + # Create a new row for every error and warning message # Use the same time on each utc = datetime.datetime.utcfromtimestamp(time.time()) @@ -3396,10 +3453,7 @@ class MainWin(Gtk.ApplicationWindow): for msg in media_data_obj.error_list: - # Create a new row in the treeview - row_iter = self.errors_list_liststore.append([]) - - # Prepare the pixbufs + # Prepare the icons pixbuf = self.pixbuf_dict['error_small'] if isinstance(media_data_obj, media.Video): @@ -3414,20 +3468,20 @@ class MainWin(Gtk.ApplicationWindow): 'Errors List add row request failed sanity check', ) - # Set the row's contents - self.errors_list_liststore.set(row_iter, 0, pixbuf) - self.errors_list_liststore.set(row_iter, 1, pixbuf2) - self.errors_list_liststore.set(row_iter, 2, time_string) - self.errors_list_liststore.set( - row_iter, - 3, + # Prepare the new row in the treeview + row_list = [] + row_list.append(pixbuf) + row_list.append(pixbuf2) + row_list.append(time_string) + row_list.append( utils.shorten_string(media_data_obj.name, self.string_max_len), ) - self.errors_list_liststore.set( - row_iter, - 4, - utils.tidy_up_long_string(msg), - ) + row_list.append(utils.tidy_up_long_string(msg)) + + # Create a new row in the treeview. Doing the .show_all() first + # prevents a Gtk error (for unknown reasons) + self.errors_list_treeview.show_all() + self.errors_list_liststore.append(row_list) # (Don't update the Errors/Warnings tab label if it's the visible # tab) @@ -3436,10 +3490,7 @@ class MainWin(Gtk.ApplicationWindow): for msg in media_data_obj.warning_list: - # Create a new row in the treeview - row_iter = self.errors_list_liststore.append([]) - - # Prepare the pixbuf + # Prepare the icons pixbuf = self.pixbuf_dict['warning_small'] if isinstance(media_data_obj, media.Video): @@ -3454,20 +3505,20 @@ class MainWin(Gtk.ApplicationWindow): 'Errors List add row request failed sanity check', ) - # Set the row's contents - self.errors_list_liststore.set(row_iter, 0, pixbuf) - self.errors_list_liststore.set(row_iter, 1, pixbuf2) - self.errors_list_liststore.set(row_iter, 2, time_string) - self.errors_list_liststore.set( - row_iter, - 3, + # Prepare the new row in the treeview + row_list = [] + row_list.append(pixbuf) + row_list.append(pixbuf2) + row_list.append(time_string) + row_list.append( utils.shorten_string(media_data_obj.name, self.string_max_len), ) - self.errors_list_liststore.set( - row_iter, - 4, - utils.tidy_up_long_string(msg), - ) + row_list.append(utils.tidy_up_long_string(msg)) + + # Create a new row in the treeview. Doing the .show_all() first + # prevents a Gtk error (for unknown reasons) + self.errors_list_treeview.show_all() + self.errors_list_liststore.append(row_list) # (Don't update the Errors/Warnings tab label if it's the visible # tab) @@ -3496,31 +3547,32 @@ class MainWin(Gtk.ApplicationWindow): """ - # Create a new row in the treeview - row_iter = self.errors_list_liststore.append([]) + print('mw 3555 errors_list_add_system_error') - # Prepare the pixbufs + # Prepare the icons pixbuf = self.pixbuf_dict['error_small'] pixbuf2 = self.pixbuf_dict['system_error_small'] - # Set the row's contents + # Prepare the new row in the treeview + row_list = [] utc = datetime.datetime.utcfromtimestamp(time.time()) time_string = str(utc.strftime('%H:%M:%S')) - self.errors_list_liststore.set(row_iter, 0, pixbuf) - self.errors_list_liststore.set(row_iter, 1, pixbuf2) - self.errors_list_liststore.set(row_iter, 2, time_string) - self.errors_list_liststore.set( - row_iter, - 3, + row_list.append(pixbuf) + row_list.append(pixbuf2) + row_list.append(time_string) + row_list.append( utils.upper_case_first(__main__.__packagename__) + ' error', ) - self.errors_list_liststore.set( - row_iter, - 4, + row_list.append( utils.tidy_up_long_string(str(error_code) + ': ' + msg), ) + # Create a new row in the treeview. Doing the .show_all() first + # prevents a Gtk error (for unknown reasons) + self.errors_list_treeview.show_all() + self.errors_list_liststore.append(row_list) + # (Don't update the Errors/Warnings tab label if it's the visible # tab) if self.visible_tab_num != 2: @@ -3540,6 +3592,8 @@ class MainWin(Gtk.ApplicationWindow): label (to show something like 'Errors (4) / Warnings (1)' ) """ + print('mw 3601 errors_list_refresh_label') + text = '_Errors' if self.tab_error_count: text += ' (' + str(self.tab_error_count) + ')' @@ -3570,9 +3624,11 @@ class MainWin(Gtk.ApplicationWindow): page_num (int) - The number of the newly-visible tab (the Videos Tab is number 0) - + """ - + + print('mw 3636 on_notebook_switch_page') + self.visible_tab_num = page_num if page_num == 2: @@ -3594,9 +3650,11 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj (media.Channel, media.Playlist or media.Channel): The clicked media data object - + """ + print('mw 3662 on_video_index_apply_options') + if self.app_obj.current_manager_obj \ or media_data_obj.options_obj\ or ( @@ -3631,9 +3689,11 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj (media.Channel, media.Playlist or media.Channel): The clicked media data object - + """ + print('mw 3701 on_video_index_check') + if self.app_obj.current_manager_obj: return self.app_obj.system_error( 218, @@ -3656,9 +3716,11 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj (media.Channel, media.Playlist or media.Channel): The clicked media data object - + """ + print('mw 3728 on_video_index_delete_container') + self.app_obj.delete_container(media_data_obj) @@ -3674,9 +3736,11 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj (media.Channel, media.Playlist or media.Channel): The clicked media data object - + """ + print('mw 3748 on_video_index_download') + if self.app_obj.current_manager_obj: return self.app_obj.system_error( 219, @@ -3708,9 +3772,11 @@ class MainWin(Gtk.ApplicationWindow): info (int): Ignored timestamp (int): Ignored - + """ - + + print('mw 3784 on_video_index_drag_data_received') + # Must override the usual Gtk handler treeview.stop_emission('drag_data_received') @@ -3756,9 +3822,11 @@ class MainWin(Gtk.ApplicationWindow): x, y (int): Cell coordinates in the treeview time (int): A timestamp - + """ + print('mw 3834 on_video_index_drag_drop') + # Must override the usual Gtk handler treeview.stop_emission('drag_drop') @@ -3781,9 +3849,11 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj (media.Channel, media.Playlist or media.Channel): The clicked media data object - + """ + print('mw 3861 on_video_index_edit_options') + if self.app_obj.current_manager_obj or not media_data_obj.options_obj: return self.app_obj.system_error( 220, @@ -3811,9 +3881,11 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj (media.Channel, media.Playlist or media.Channel): The clicked media data object - + """ + print('mw 3893 on_video_index_enforce_check') + if self.app_obj.current_manager_obj: return self.app_obj.system_error( 221, @@ -3841,9 +3913,11 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj (media.Channel, media.Playlist or media.Channel): The clicked media data object - + """ + print('mw 3925 on_video_index_mark_favourite') + self.app_obj.mark_container_favourite(media_data_obj, True) @@ -3860,9 +3934,11 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj (media.Channel, media.Playlist or media.Channel): The clicked media data object - + """ + print('mw 3946 on_video_index_mark_not_favourite') + self.app_obj.mark_container_favourite(media_data_obj, False) @@ -3878,9 +3954,11 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj (media.Channel, media.Playlist or media.Channel): The clicked media data object - + """ + print('mw 3966 on_video_index_hide_folder') + self.app_obj.mark_folder_hidden(media_data_obj, True) @@ -3898,9 +3976,11 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj (media.Channel, media.Playlist or media.Channel): The clicked media data object - + """ + print('mw 3988 on_video_index_mark_new') + # Special arrangements for private folders # (Don't need to check the 'New Videos' folder, as the popup menu item # is commented out for that) @@ -3943,9 +4023,11 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj (media.Channel, media.Playlist or media.Channel): The clicked media data object - + """ + print('mw 4035 on_video_index_mark_not_new') + # Special arrangements for private folders if media_data_obj == self.app_obj.fixed_all_folder \ or media_data_obj == self.app_obj.fixed_new_folder: @@ -3985,9 +4067,11 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj (media.Channel, media.Playlist or media.Channel): The clicked media data object - + """ + print('mw 3079 on_video_index_move_to_top') + self.app_obj.move_container_to_top(media_data_obj) @@ -3998,16 +4082,18 @@ class MainWin(Gtk.ApplicationWindow): Refresh the right-clicked media data object, checking the corresponding directory on the user's filesystem against video objects in the database. - + Args: menu_item (Gtk.MenuItem): The clicked menu item media_data_obj (media.Channel, media.Playlist or media.Channel): The clicked media data object - + """ + print('mw 4101 on_video_index_refresh') + if self.app_obj.current_manager_obj: return self.app_obj.system_error( 222, @@ -4031,9 +4117,11 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj (media.Channel, media.Playlist or media.Channel): The clicked media data object - + """ + print('mw 4129 on_video_index_remove_options') + if self.app_obj.current_manager_obj \ or not media_data_obj.options_obj: return self.app_obj.system_error( @@ -4057,9 +4145,11 @@ class MainWin(Gtk.ApplicationWindow): treeview (Gtk.TreeView): The Video Index's treeview event (Gdk.EventButton): The event emitting the Gtk signal - + """ - + + print('mw 4157 on_video_index_right_click') + if event.type == Gdk.EventType.BUTTON_PRESS and event.button == 3: # If the user right-clicked on empty space, the call to @@ -4097,8 +4187,14 @@ class MainWin(Gtk.ApplicationWindow): selection (Gtk.TreeSelection): Data for the selected row """ - + + print('mw 4197 on_video_index_selection_changed') + (model, iter) = selection.get_selected() + if iter is None or not model.iter_is_valid(iter): + return + else: + name = model[iter][1] # Don't update the Video Catalogue during certain proecudres, such as # removing a row from the Video Index (in which case, the flag will @@ -4109,8 +4205,8 @@ class MainWin(Gtk.ApplicationWindow): self.video_index_current = None self.video_catalogue_reset() else: - self.video_index_current = model[iter][1] - self.video_catalogue_redraw_all(model[iter][1]) + self.video_index_current = name + self.video_catalogue_redraw_all(name) def on_video_index_show_downloads(self, menu_item, media_data_obj): @@ -4126,9 +4222,11 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj (media.Channel, media.Playlist or media.Channel): The clicked media data object - + """ + print('mw 4230 on_video_index_show_downloads') + path = media_data_obj.get_dir(self.app_obj) utils.open_file(path) @@ -4145,9 +4243,11 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj (media.Channel, media.Playlist or media.Channel): The clicked media data object - + """ + print('mw 4251 on_video_index_show_properties') + if self.app_obj.current_manager_obj: return self.app_obj.system_error( 224, @@ -4173,9 +4273,11 @@ class MainWin(Gtk.ApplicationWindow): menu_item (Gtk.MenuItem): The clicked menu item media_data_obj (media.Video) - The clicked video object - + """ + print('mw 4281 on_video_catalogue_apply_options') + if self.app_obj.current_manager_obj or media_data_obj.options_obj: return self.app_obj.system_error( 225, @@ -4186,7 +4288,7 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj.set_options_obj(options.OptionsManager()) # Update the video catalogue to show the right icon self.video_catalogue_update_row(media_data_obj) - + # Open an edit window to show the options immediately config.OptionsEditWin( self.app_obj, @@ -4206,9 +4308,11 @@ class MainWin(Gtk.ApplicationWindow): menu_item (Gtk.MenuItem): The clicked menu item media_data_obj (media.Video) - The clicked video object - + """ + print('mw 4316 on_video_catalogue_check') + if self.app_obj.current_manager_obj: return self.app_obj.system_error( 226, @@ -4226,6 +4330,8 @@ class MainWin(Gtk.ApplicationWindow): Deletes the video. """ + print('mw 4335 on_video_catalogue_delete_video') + self.app_obj.delete_video(media_data_obj) @@ -4240,9 +4346,11 @@ class MainWin(Gtk.ApplicationWindow): menu_item (Gtk.MenuItem): The clicked menu item media_data_obj (media.Video) - The clicked video object - + """ + print('mw 4354 on_video_catalogue_download') + if self.app_obj.current_manager_obj: return self.app_obj.system_error( 227, @@ -4265,9 +4373,11 @@ class MainWin(Gtk.ApplicationWindow): menu_item (Gtk.MenuItem): The clicked menu item media_data_obj (media.Video) - The clicked video object - + """ + print('mw 4381 on_video_catalogue_edit_options') + if self.app_obj.current_manager_obj or not media_data_obj.options_obj: return self.app_obj.system_error( 228, @@ -4294,9 +4404,11 @@ class MainWin(Gtk.ApplicationWindow): menu_item (Gtk.MenuItem): The clicked menu item media_data_obj (media.Video) - The clicked video object - + """ + print('mw 4412 on_video_catalogue_enforce_check') + # (Don't allow the user to change the setting of # media.Video.dl_sim_flag if the video is in a channel or playlist, # since media.Channel.dl_sim_flag or media.Playlist.dl_sim_flag @@ -4327,9 +4439,11 @@ class MainWin(Gtk.ApplicationWindow): menu_item (Gtk.MenuItem): The clicked menu item media_data_obj (media.Video) - The clicked video object - + """ + print('mw 4447 on_video_catalogue_re_download') + if self.app_obj.current_manager_obj: return self.app_obj.system_error( 230, @@ -4370,9 +4484,11 @@ class MainWin(Gtk.ApplicationWindow): menu_item (Gtk.MenuItem): The clicked menu item media_data_obj (media.Video) - The clicked video object - + """ + print('mw 4492 on_video_catalogue_remove_options') + if self.app_obj.current_manager_obj or not media_data_obj.options_obj: return self.app_obj.system_error( 231, @@ -4383,7 +4499,7 @@ class MainWin(Gtk.ApplicationWindow): media_data_obj.set_options_obj(None) # Update the video catalogue to show the right icon self.video_catalogue_update_row(media_data_obj) - + def on_video_catalogue_show_properties(self, menu_item, media_data_obj): @@ -4396,9 +4512,11 @@ class MainWin(Gtk.ApplicationWindow): menu_item (Gtk.MenuItem): The clicked menu item media_data_obj (media.Video) - The clicked video object - + """ + print('mw 4520 on_video_catalogue_show_properties') + if self.app_obj.current_manager_obj: return self.app_obj.system_error( 232, @@ -4421,9 +4539,11 @@ class MainWin(Gtk.ApplicationWindow): menu_item (Gtk.MenuItem): The clicked menu item media_data_obj (media.Video) - The clicked video object - + """ + print('mw 4547 on_video_catalogue_toggle_favourite_video') + if not media_data_obj.fav_flag: self.app_obj.mark_video_favourite(media_data_obj, True) else: @@ -4441,9 +4561,11 @@ class MainWin(Gtk.ApplicationWindow): menu_item (Gtk.MenuItem): The clicked menu item media_data_obj (media.Video) - The clicked video object - + """ + print('mw 4569 on_video_catalogue_toggle_new_video') + if not media_data_obj.new_flag: self.app_obj.mark_video_new(media_data_obj, True) else: @@ -4461,9 +4583,11 @@ class MainWin(Gtk.ApplicationWindow): menu_item (Gtk.MenuItem): The clicked menu item media_data_obj (media.Video) - The clicked video object - + """ + print('mw 4591 on_video_catalogue_watch_hooktube') + # Launch the video utils.open_file( utils.convert_youtube_to_hooktube(media_data_obj.source), @@ -4486,9 +4610,11 @@ class MainWin(Gtk.ApplicationWindow): menu_item (Gtk.MenuItem): The clicked menu item media_data_obj (media.Video) - The clicked video object - + """ + print('mw 4618 on_video_catalogue_watch_video') + # Launch the video self.app_obj.watch_video_in_player(media_data_obj) @@ -4508,9 +4634,11 @@ class MainWin(Gtk.ApplicationWindow): menu_item (Gtk.MenuItem): The clicked menu item media_data_obj (media.Video) - The clicked video object - + """ + print('mw 4642 on_video_catalogue_watch_website') + # Launch the video utils.open_file(media_data_obj.source) @@ -4519,7 +4647,7 @@ class MainWin(Gtk.ApplicationWindow): self.app_obj.mark_video_new(media_data_obj, False) - def on_spinbutton_changed(self, spinbutton): + def on_spinbutton_changed(self, spinbutton): """Called from callback in self.setup_progress_tab(). @@ -4533,6 +4661,8 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 4666 on_spinbutton_changed') + if self.checkbutton.get_active(): self.app_obj.set_num_worker_default( int(self.spinbutton.get_value()) @@ -4550,9 +4680,11 @@ class MainWin(Gtk.ApplicationWindow): Args: checkbutton (Gtk.CheckButton) - The clicked widget - + """ + print('mw 4688 on_checkbutton_changed') + if self.checkbutton.get_active(): self.app_obj.set_num_worker_apply_flag(True) @@ -4561,7 +4693,7 @@ class MainWin(Gtk.ApplicationWindow): ) else: - + self.app_obj.set_num_worker_apply_flag(False) @@ -4576,9 +4708,11 @@ class MainWin(Gtk.ApplicationWindow): Args: spinbutton (Gtk.SpinButton): The clicked widget - + """ + print('mw 4716 on_spinbutton2_changed') + self.app_obj.set_bandwidth_default( int(self.spinbutton2.get_value()) ) @@ -4595,9 +4729,11 @@ class MainWin(Gtk.ApplicationWindow): Args: checkbutton (Gtk.CheckButton): The clicked widget - + """ + print('mw 4737 on_checkbutton2_changed') + self.app_obj.set_bandwidth_apply_flag(self.checkbutton2.get_active()) @@ -4611,9 +4747,11 @@ class MainWin(Gtk.ApplicationWindow): Args: button (Gtk.Button): The clicked widget - + """ + print('mw 4755 on_errors_list_clear') + self.errors_list_reset() @@ -4632,6 +4770,8 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 4775 add_child_window') + # Check that the window isn't already in the list (unlikely, but check # anyway) if config_win_obj in self.config_win_list: @@ -4657,6 +4797,8 @@ class MainWin(Gtk.ApplicationWindow): """ + print('mw 4801 del_child_window') + # Update the IV # (Don't show an error if the window isn't in the list, as it's # conceivable this function might be called twice) @@ -4689,6 +4831,8 @@ class SimpleCatalogueItem(object): def __init__(self, main_win_obj, video_obj): + print('mw 4836 __init__') + # IV list - class objects # ----------------------- # The main window object @@ -4715,7 +4859,7 @@ class SimpleCatalogueItem(object): # Public class methods - + def draw_widgets(self, catalogue_row): @@ -4733,6 +4877,8 @@ class SimpleCatalogueItem(object): """ + print('mw 4882 draw_widgets') + self.catalogue_row = catalogue_row event_box = Gtk.EventBox() @@ -4772,6 +4918,8 @@ class SimpleCatalogueItem(object): Sets the values displayed by each widget. """ + print('mw 4923 update_widgets') + self.update_status_image() self.update_video_name() self.update_video_stats() @@ -4784,6 +4932,8 @@ class SimpleCatalogueItem(object): Updates the Gtk.Image widget to display the video's download status. """ + print('mw 4937 update_status_image') + # Set the download status if self.video_obj.dl_flag: self.status_image.set_from_pixbuf( @@ -4802,6 +4952,8 @@ class SimpleCatalogueItem(object): Updates the Gtk.Label widget to display the video's current name. """ + print('mw 4957 update_video_name') + string = '' if self.video_obj.new_flag: string += ' font_weight="bold"' @@ -4829,6 +4981,8 @@ class SimpleCatalogueItem(object): duration/date information. """ + print('mw 4986 update_video_stats') + if self.video_obj.duration is not None: string = 'Duration: ' + utils.convert_seconds_to_string( self.video_obj.duration, @@ -4867,9 +5021,11 @@ class SimpleCatalogueItem(object): event_box (Gtk.EventBox), event (Gtk.EventButton): Data from the signal emitted by the click - + """ + print('mw 5029 on_right_click_row') + if event.type == Gdk.EventType.BUTTON_PRESS and event.button == 3: self.main_win_obj.video_catalogue_popup_menu(event, self.video_obj) @@ -4900,6 +5056,8 @@ class ComplexCatalogueItem(object): def __init__(self, main_win_obj, video_obj): + print('mw 5061 __init__') + # IV list - class objects # ----------------------- # The main window object @@ -4940,7 +5098,7 @@ class ComplexCatalogueItem(object): # Public class methods - + def draw_widgets(self, catalogue_row): """Called by mainwin.MainWin.video_catalogue_redraw_all() and @@ -4957,6 +5115,8 @@ class ComplexCatalogueItem(object): """ + print('mw 5120 draw_widgets') + self.catalogue_row = catalogue_row event_box = Gtk.EventBox() @@ -5072,6 +5232,8 @@ class ComplexCatalogueItem(object): Sets the values displayed by each widget. """ + print('mw 5237 update_widgets') + self.update_thumb_image() self.update_video_name() self.update_status_images() @@ -5089,6 +5251,8 @@ class ComplexCatalogueItem(object): available. """ + print('mw 5256 update_thumb_image') + # See if the video's thumbnail file has been downloaded thumb_flag = False if self.video_obj.file_dir: @@ -5143,6 +5307,8 @@ class ComplexCatalogueItem(object): Updates the Gtk.Label widget to display the video's current name. """ + print('mw 5312 update_video_name') + string = '' if self.video_obj.new_flag: string += ' font_weight="bold"' @@ -5170,6 +5336,8 @@ class ComplexCatalogueItem(object): error and warning settings. """ + print('mw 5341 update_status_images') + # Set the download status if self.video_obj.dl_flag: self.status_image.set_from_pixbuf( @@ -5223,6 +5391,8 @@ class ComplexCatalogueItem(object): description. """ + print('mw 5396 update_video_descrip') + if self.video_obj.short: # Work with a list of lines, displaying either the fist line, or @@ -5265,6 +5435,8 @@ class ComplexCatalogueItem(object): duration/date information. """ + print('mw 5440 update_video_stats') + if self.video_obj.duration is not None: string = 'Duration: ' + utils.convert_seconds_to_string( self.video_obj.duration, @@ -5297,6 +5469,8 @@ class ComplexCatalogueItem(object): external media player. """ + print('mw 5474 update_watch_player') + if self.video_obj.file_dir and self.video_obj.dl_flag: # Link clickable @@ -5316,6 +5490,8 @@ class ComplexCatalogueItem(object): external web browser. """ + print('mw 5495 update_watch_web') + if self.video_obj.source: # Convert a YouTube link into a HookTube link (but don't modify any @@ -5367,9 +5543,11 @@ class ComplexCatalogueItem(object): event_box (Gtk.EventBox), event (Gtk.EventButton): Data from the signal emitted by the click - + """ + print('mw 5551 on_right_click_row') + if event.type == Gdk.EventType.BUTTON_PRESS and event.button == 3: self.main_win_obj.video_catalogue_popup_menu(event, self.video_obj) @@ -5390,6 +5568,8 @@ class ComplexCatalogueItem(object): """ + print('mw 5573 on_click_descrip_label') + if not self.expand_descrip_flag: self.expand_descrip_flag = True else: @@ -5413,9 +5593,11 @@ class ComplexCatalogueItem(object): Returns: True to show the action has been handled - + """ + print('mw 5601 on_click_watch_hooktube_label') + # Launch the video utils.open_file(uri) @@ -5442,9 +5624,11 @@ class ComplexCatalogueItem(object): Returns: True to show the action has been handled - + """ + print('mw 5632 on_click_watch_player_label') + # Launch the video self.main_win_obj.app_obj.watch_video_in_player(self.video_obj) @@ -5470,9 +5654,11 @@ class ComplexCatalogueItem(object): Returns: True to show the action has been handled - + """ + print('mw 5662 on_click_watch_web_label') + # Launch the video utils.open_file(uri) @@ -5500,6 +5686,8 @@ class CatalogueRow(Gtk.ListBoxRow): def __init__(self, video_obj): + print('mw 5691 __init__') + super(Gtk.ListBoxRow, self).__init__() # IV list - class objects @@ -5528,6 +5716,8 @@ class AddVideoDialogue(Gtk.Dialog): def __init__(self, main_win_obj): + print('mw 5721 __init__') + Gtk.Dialog.__init__( self, 'Add videos', @@ -5623,7 +5813,7 @@ class AddVideoDialogue(Gtk.Dialog): # Public class methods - + def on_combo_changed(self, combo): """Called from callback in self.__init__(). @@ -5634,9 +5824,11 @@ class AddVideoDialogue(Gtk.Dialog): Args: combo (Gtk.ComboBox): The clicked widget - + """ + print('mw 5832 on_combo_changed') + self.parent_name = self.folder_list[combo.get_active()] @@ -5657,6 +5849,8 @@ class AddChannelDialogue(Gtk.Dialog): def __init__(self, main_win_obj): + print('mw 5854 __init__') + Gtk.Dialog.__init__( self, 'Add channel', @@ -5759,7 +5953,7 @@ class AddChannelDialogue(Gtk.Dialog): # Public class methods - + def on_combo_changed(self, combo): """Called from callback in self.__init__(). @@ -5770,9 +5964,11 @@ class AddChannelDialogue(Gtk.Dialog): Args: combo (Gtk.ComboBox): The clicked widget - + """ + print('mw 5972 on_combo_changed') + self.parent_name = self.folder_list[combo.get_active()] @@ -5793,6 +5989,8 @@ class AddPlaylistDialogue(Gtk.Dialog): def __init__(self, main_win_obj): + print('mw 5994 __init__') + Gtk.Dialog.__init__( self, 'Add playlist', @@ -5895,7 +6093,7 @@ class AddPlaylistDialogue(Gtk.Dialog): # Public class methods - + def on_combo_changed(self, combo): """Called from callback in self.__init__(). @@ -5906,9 +6104,11 @@ class AddPlaylistDialogue(Gtk.Dialog): Args: combo (Gtk.ComboBox): The clicked widget - + """ + print('mw 6112 on_combo_changed') + self.parent_name = self.folder_list[combo.get_active()] @@ -5929,6 +6129,8 @@ class AddFolderDialogue(Gtk.Dialog): def __init__(self, main_win_obj): + print('mw 6134 __init__') + Gtk.Dialog.__init__( self, 'Add folder', @@ -6017,7 +6219,7 @@ class AddFolderDialogue(Gtk.Dialog): # Public class methods - + def on_combo_changed(self, combo): """Called from callback in self.__init__(). @@ -6028,9 +6230,11 @@ class AddFolderDialogue(Gtk.Dialog): Args: combo (Gtk.ComboBox): The clicked widget - + """ + print('mw 6238 on_combo_changed') + self.parent_name = self.folder_list[combo.get_active()] @@ -6055,6 +6259,8 @@ class DeleteContainerDialogue(Gtk.Dialog): def __init__(self, main_win_obj, media_data_obj): + print('mw 6264 __init__') + # Prepare variables pkg_string = utils.upper_case_first(__main__. __packagename__) diff --git a/lib/media.py b/lib/media.py index 901be90..8372e50 100644 --- a/lib/media.py +++ b/lib/media.py @@ -121,7 +121,7 @@ class GenericContainer(GenericMedia): video_list (list): A list of media.Video objects Returns: - + The modified video_list """ @@ -139,7 +139,7 @@ class GenericContainer(GenericMedia): def count_descendants(self, count_list): """Can be called by anything. Currently called by - mainwin.DeleteContainerDialogue.__init__(), and then again by this + mainwin.DeleteContainerDialogue.__init__(), and then again by this function recursively. Counts the number of child objects, and then calls this function @@ -155,7 +155,7 @@ class GenericContainer(GenericMedia): ) Returns: - + The modified count_list """ @@ -196,7 +196,7 @@ class GenericContainer(GenericMedia): was not a child of this object """ - + # Check this is really one of our children index = self.find_child_index(child_obj) if index is None: @@ -227,7 +227,7 @@ class GenericContainer(GenericMedia): An integer describing the position in self.child_list, or None of the child object is not found in self.child_list - + """ try: @@ -252,7 +252,7 @@ class GenericContainer(GenericMedia): Returns: The container object's level - + """ if self.parent_obj is None: @@ -283,7 +283,7 @@ class GenericContainer(GenericMedia): can't be hidden directly.) Returns: - + True or False. """ @@ -357,7 +357,7 @@ class GenericContainer(GenericMedia): Returns: The full path to the directory - + """ dir_list = [self.name] @@ -401,40 +401,6 @@ class GenericRemoteContainer(GenericContainer): self.vid_count += 1 - def OLDdo_sort(self, obj1, obj2): - - """Sorting function used by functools.cmp_to_key(), and called by - self.sort_children(). - - Sort videos by upload time, with the most recent video first. - - When downloading a channel or playlist, we assume that YouTube (etc) - supplies us with the most recent upload first. Therefore, when the - upload time is the same, sort by the order in youtube-dl fetches the - videos. - - Args: - - obj1, obj2 (media.Video) - Video objects being sorted - - Returns: - - -1 if obj1 comes first, 1 if obj2 comes first, 0 if they are equal - - """ - - if obj1.upload_time < obj2.upload_time: - return 1 - elif obj1.upload_time == obj2.upload_time: - if obj1.receive_time < obj2.receive_time: - return -1 - elif obj1.receive_time == obj2.receive_time: - return 0 - else: - return 1 - else: - return -1 - def do_sort(self, obj1, obj2): """Sorting function used by functools.cmp_to_key(), and called by @@ -448,13 +414,13 @@ class GenericRemoteContainer(GenericContainer): videos. Args: - + obj1, obj2 (media.Video) - Video objects being sorted Returns: - + -1 if obj1 comes first, 1 if obj2 comes first, 0 if they are equal - + """ # # Convert Python2 to Python3 @@ -659,7 +625,7 @@ class Video(GenericMedia): favourite. Returns: - + True if the parent (or the parent's parent, and so on) is marked favourite, False otherwise @@ -688,7 +654,7 @@ class Video(GenericMedia): max_length (int): When storing the description in this object's IVs, the maximum line length to use - + """ descrip_path = os.path.join( @@ -813,7 +779,7 @@ class Video(GenericMedia): max_length (int): A maximum line size """ - + if descrip: self.descrip = utils.tidy_up_long_descrip(descrip, max_length) @@ -836,7 +802,7 @@ class Video(GenericMedia): Returns: The converted string, or None if self.file_size is not set - + """ if self.file_size: @@ -855,7 +821,7 @@ class Video(GenericMedia): Returns: The formatted string, or None if self.receive_time is not set - + """ if self.receive_time: @@ -874,7 +840,7 @@ class Video(GenericMedia): Returns: The formatted string, or None if self.receive_time is not set - + """ if self.receive_time: @@ -893,7 +859,7 @@ class Video(GenericMedia): Returns: The formatted string, or None if self.upload_time is not set - + """ if self.upload_time: @@ -912,7 +878,7 @@ class Video(GenericMedia): Returns: The formatted string, or None if self.upload_time is not set - + """ if self.upload_time: @@ -1326,70 +1292,6 @@ class Folder(GenericContainer): # def del_child(): # Inherited from GenericContainer - def OLDdo_sort(self, obj1, obj2): - - """Sorting function used by functools.cmp_to_key(), and called by - self.sort_children(). - - Sorts the child media.Video, media.Channel, media.Playlist and - media.Folder objects. - - Firstly, sort by class - folders, channels/playlists, then videos. - - Within folders, channels and playlists, sort alphabetically. Within - videos, sort by upload time. - - Args: - - obj1, obj2 (media.Video, media.Channel, media.Playlist or - media.Folder) - Media data objects being sorted - - Returns: - - -1 if obj1 comes first, 1 if obj2 comes first, 0 if they are equal - - """ - - if str(obj1.__class__) == str(obj2.__class__) \ - or ( - isinstance(obj1, GenericRemoteContainer) \ - and isinstance(obj2, GenericRemoteContainer) - ): - if isinstance(obj1, Video): - - if obj1.upload_time < obj2.upload_time: - return 1 - elif obj1.upload_time == obj2.upload_time: - if obj1.receive_time < obj2.receive_time: - return -1 - elif obj1.receive_time == obj2.receive_time: - return 0 - else: - return 1 - else: - return -1 - - else: - if obj1.name.lower() < obj2.name.lower: - return -1 - elif obj1.name.lower() == obj2.name.lower: - return 0 - else: - return 1 - - else: - - if isinstance(obj1, Folder): - return -1 - elif isinstance(obj2, Folder): - return 1 - elif isinstance(obj1, Channel) or isinstance(obj1, Playlist): - return -1 - elif isinstance(obj2, Channel) or isinstance(obj2, Playlist): - return 1 - else: - return 0 - def do_sort(self, obj1, obj2): """Sorting function used by functools.cmp_to_key(), and called by @@ -1404,14 +1306,14 @@ class Folder(GenericContainer): videos, sort by upload time. Args: - + obj1, obj2 (media.Video, media.Channel, media.Playlist or media.Folder) - Media data objects being sorted Returns: - + -1 if obj1 comes first, 1 if obj2 comes first, 0 if they are equal - + """ if str(obj1.__class__) == str(obj2.__class__) \ diff --git a/lib/options.py b/lib/options.py index ed3bde0..f55c068 100644 --- a/lib/options.py +++ b/lib/options.py @@ -539,7 +539,7 @@ class OptionsParser(object): taken from options.OptionsManager.options_dict Returns: - + List of strings with all the youtube-dl command line options """ @@ -822,11 +822,11 @@ class OptionHolder(object): Check if options required by another option are enabled, or not. Args: - + copy_dict (dict): Copy of the original options dictionary. Returns: - + True if any of the required options is enabled, otherwise returns False. @@ -845,7 +845,7 @@ class OptionHolder(object): Returns: True if the option is a boolean switch, otherwise returns False - + """ return type(self.default_value) is bool diff --git a/lib/refresh.py b/lib/refresh.py index f46946e..4144ca7 100644 --- a/lib/refresh.py +++ b/lib/refresh.py @@ -80,7 +80,7 @@ class RefreshManager(threading.Thread): # Public class methods - + def run(self): """Called by mainapp.TartubeApp.refresh_manager_start(). diff --git a/lib/testing.py b/lib/testing.py index 7a29d87..c2c1f39 100644 --- a/lib/testing.py +++ b/lib/testing.py @@ -51,7 +51,7 @@ def add_test_media(app_obj): Args: app_obj (mainapp.TartubeApp): The main application - + """ # Test videos diff --git a/lib/updates.py b/lib/updates.py index 6a28f30..5a3d038 100644 --- a/lib/updates.py +++ b/lib/updates.py @@ -104,90 +104,6 @@ class UpdateManager(threading.Thread): # Public class methods - - def OLDrun(self): - - """Called as a result of self.__init__(). - - Based on code from downloads.VideoDownloader.do_download(). - - Creates a child process to run the youtube-dl update. - - Reads from the child process STDOUT and STDERR, and calls the main - application with the result of the update (success or failure). - """ - - # Prepare the system command - - # The user can change the system command for updating youtube-dl, - # depending on how it was installed - # (For example, if youtube-dl was installed via pip, then it must be - # updated via pip) - cmd_list \ - = self.app_obj.ytdl_update_dict[self.app_obj.ytdl_update_current] - - # Create a new child process using that command - self.create_child_process(cmd_list) - - # So that we can read from the child process STDOUT and STDERR, attach - # a file descriptor to the PipeReader objects - if self.child_process is not None: - - self.stdout_reader.attach_file_descriptor( - self.child_process.stdout, - ) - - self.stderr_reader.attach_file_descriptor( - self.child_process.stderr, - ) - - while self.is_child_process_alive(): - - # Read from the child process STDOUT, and convert into unicode for - # Python's convenience - while not self.stdout_queue.empty(): - - stdout = self.stdout_queue.get_nowait().rstrip() - stdout = utils.convert_item(stdout, to_unicode=True) - - if stdout: - # "It looks like you installed youtube-dl with a package - # manager, pip, setup.py or a tarball. Please use that to - # update." - if re.search('It looks like you installed', stdout): - self.stderr_list.append(stdout) - else: - self.stdout_list.append(stdout) - - # The child process has finished - while not self.stderr_queue.empty(): - - # Read from the child process STDERR queue (we don't need to read - # it in real time), and convert into unicode for python's - # convenience - stderr = self.stderr_queue.get_nowait().rstrip() - stderr = utils.convert_item(stderr, to_unicode=True) - - if stderr: - self.stderr_list.append(stderr) - - # (Generate our own error messages for debugging purposes, in certain - # situations) - if self.child_process is None: - self.stderr_list.append('Download did not start') - - elif self.child_process.returncode > 0: - self.stderr_list.append( - 'Child process exited with non-zero code: {}'.format( - self.child_process.returncode, - ) - ) - - # Operation complete; inform the main application of success or failure - if self.stderr_list: - self.app_obj.update_manager_finished(False) - else: - self.app_obj.update_manager_finished(True) def run(self): @@ -202,7 +118,7 @@ class UpdateManager(threading.Thread): """ # Prepare the system command - + # The user can change the system command for updating youtube-dl, # depending on how it was installed # (For example, if youtube-dl was installed via pip, then it must be @@ -251,11 +167,11 @@ class UpdateManager(threading.Thread): # Read from the child process STDERR queue (we don't need to read # it in real time), and convert into unicode for python's # convenience -# # (Convert Python2 to Python3) +# # (Convert Python2 to Python3) # stderr = self.stderr_queue.get_nowait().rstrip() # stderr = utils.convert_item(stderr, to_unicode=True) stderr = self.stderr_queue.get_nowait().rstrip().decode('utf-8') - + if stderr: self.stderr_list.append(stderr) @@ -351,7 +267,7 @@ class UpdateManager(threading.Thread): """Called by mainapp.TartubeApp.on_button_stop_operation(), .stop() and a callback in .on_button_stop_operation(). - + Based on code from downloads.VideoDownloader.stop(). Terminates the child process. diff --git a/lib/utils.py b/lib/utils.py index bffb496..feca808 100644 --- a/lib/utils.py +++ b/lib/utils.py @@ -90,7 +90,7 @@ def convert_item(item, to_unicode=False): Convert item between 'unicode' and 'str'. Args: - + item (-): Can be any python item. to_unicode (boolean): When True it will convert all the 'str' types @@ -98,7 +98,7 @@ def convert_item(item, to_unicode=False): back to 'str'. Returns: - + The converted item """ @@ -310,7 +310,7 @@ def format_bytes(num_bytes): Returns: The formatted string - + """ if num_bytes == 0.0: @@ -332,7 +332,7 @@ def get_encoding(): Returns: The system encoding. - + """ try: @@ -354,7 +354,7 @@ def open_file(uri): Args: uri (string): The URI to open - + """ if sys.platform == "win32": @@ -378,7 +378,7 @@ def remove_shortcuts(path): Returns: The converted path - + """ return path.replace('~', os.path.expanduser('~')) @@ -399,7 +399,7 @@ def shorten_string(string, num_chars): Returns: The converted string - + """ if string and len(string) > num_chars: @@ -423,7 +423,7 @@ def to_string(data): Returns: The converted string - + """ return '%s' % data @@ -441,7 +441,7 @@ def upper_case_first(string): Returns: The converted string - + """ return string[0].upper() + string[1:] diff --git a/screenshots/tartube.png b/screenshots/tartube.png new file mode 100644 index 0000000000000000000000000000000000000000..6751fde56cda833581e88fcfa9937f89a7fdf373 GIT binary patch literal 233086 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𝔎NJ#w4DqF&R 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%0AHS@ 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 )H%t{$*CY%r$K@$W70 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�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

}iZ?bjBZM9+*WUM>w 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 q|Nl;v`G4