-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCHANGELOG
510 lines (492 loc) · 33.8 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
Current
- Set VideoD.thumbnails to None on "private" videos to avoid fatal AttributeErrors.
- Added handling of private videos that don't contain any thumbnail in the YouTube API.
- Fixed missing Authentication section in default config.
- Added some categories and sorted settings in Advanced tab.
- Made captions and duration overlay padding configurable and changed bottom padding to match right/left padding.
- Revert ThumbnailTile and VideoTile to the old fixed size scaling due to *heavy* glitchiness and performance issues
when using min and max width/height.
- Added retry attempt handling for failed GetUploadsThread threads with configurable delay and max attempts.
v0.6.2
- Made sd warn and has-captions overlays optional (and made sd warning False by default due to recently buggy API data).
- Changed Function menu alt-key from F to u (overlapped with File menu).
- Shuffled around various settings to lessen a wasteful amount of tabs.
- Moved datestamp settings to its own Time & Date tab.
- Update text ellision values to work with the VideoTile redesign.
- Made config.ini only contain overrides instead of mirroring all defaults.
- Created (and added to UI) a FontPickerButton which lets users pick fonts and displays the current font in a
human readable format on the button.
- Changed default Fonts from Helvetica to Noto Sans (likely the same font)
- Made all font read_config entries non-literal eval (i.e. read as string).
- Added utils function for checking if a string contains unicode.
- Removed size limit from TextPickleType due to lack of support.
- PostgreSQL doesn't seem to support strings with any length limit at all.
- Added some if coverage in debug tile colouring.
- ElidedLabel is now aligned to top and added spacer between thumb and title.
- Removed redundant (and also problematic) layout alignments.
- Removed maximum height sizing logic from VideoTile.
- Made Title, Channel and Date text fields optional if cfg lines == 0.
- Changed VideoTile sizing from fixed size to fixed width and max height.
- Changed ThumbnailTile sizing from fixed size to minimum width (scaled).
- Refactor renamed (and moved) VideoTileLabel to ElidedLabel.
- Changed start with stored videos to True by default.
- Changed VideoTileLabel font handling from plaintext to QFont.fromString.
- Added accidentally omitted config hotkey to defaults and sample config.
- Fixed critical DB creation failure bug introduced in commit 2da05b2 (Caused by IDE refactor move).
- Made PyYAML dependency in requirements.txt >= instead of ==.
- Made sample cfg/hotkeys if not exist use the new create_config_file function.
- Replaced copyfile(sample, cfg) with func that uses DEFAULTS dict directly.
- Made log_handler automatically create missing dirs and files.
- Made PyQt5 pip requirements >= instead of forcing specific version.
- Renamed subs list reload item, so it's harder to confuse with subfeed refresh.
- Hotfix: disabled elision by default and instead explicitly using it during init only, due to VideoTileLabel.width()
changing drastically later on.
- Deleted deprecated debug_functions and cli arg --debug_open_1k_fds that was used for "too many file descriptors"
debugging.
- Moved log_handler into handlers package.
- Moved plaintext_history_handler into handlers package.
- Moved default_application_handler into handlers package.
- Made pickle load callers handle and log ModuleNotFound (happens when restructuring) and unexpected exceptions.
- Moved more path constants out of classes and into absolute_paths.
- Moved misplaced logdir up to the project root level (was in sources root).
- Refactored lots of manual OS_PATH cases to use absolute_paths instead.
- Fixed config_handler OS_PATH pointing at wrong level after move.
- Fixed orphaned settings import of ROOT_PATH in main_window (due to abs path move).
- Moved history_handler into handlers package and renamed with suffix 'plaintext'.
- Moved config_handler into handlers package.
- Moved pickle_handler into handlers package.
- Moved (Youtube auth) generate_keys into youtube folder.
- Moved (YouTube API) authentication into youtube folder.
- Removed deprecated show_grab_method debug option and code.
- Made Title, Channel and Date VideoTile labels part of a class VideoTileLabel to avoid excessively redundant code.
v0.6.1
- Removed no longer necessary pixel size hacks from config.
- Made VideoTile element line height configurable.
- Reworked VideoTile element QLabel ellison logic; QLabel width * modifier (0.28) * lines.
- Reworked VideoTile element QLabel height logic; Set height equal to line amount and add some newline
spacing for unicode.
- Changed VideoTile layout from VBox to Grid, because grid is not plagued by forced padding between all items.
- Changed broken update_font to an elide_text function and made VideoTile classes override setText to make ellison
default.
v0.6.0
- Added attrib original_text in VideoTile elements to save the unedited text before ellison overwrites it forever.
- Tuned all the pixel size, ellison and max size values to work with the new VideoTime system.
- Made all the new max size and ellison settings configurable.
- Fixed ellison inconsistency and mismatch issues by creating a function get_unicode_weight which calculates a
"width-weight" for unicode characters, and then that weight is subtracted from the ellison modifier.
- Changed VideoTile sizing logic to use a maximum size instead of fixed size, which fixed the issue with QLabel text
going OOB.
- Added debug tile coloring for padding debug.
- Made channel title and date text pixel size configurable
- Made title text weight configurable (Normal, DemiBold, Bold).
- Merged configurable database type and location into one single option 'url'.
- Fixed bug where timestamp wouldn't show the correct level, due to accidentally being offset by 1.
- Made config inform about which options require restart. Also: rearranged some options.
- Fixed broken thumbnail tooltip feature.
- Moved get_default_player from playback to super (VideoTile).
- Cleaned up keyboard modifiers code a bit.
- Fixed bad function signatures.
- Made player an optional kwarg in open_in_player()
- Refactored some strings.
- Deprecated and deleted config_play_video function.
- Made Subfeed context menu options on par with Playback's (alt players etc, mark watched, play w/o mark watched, etc...).
- Fixed buggy implementation of mousePressEvent in Subfeed that listened to *all* mouse events, not just LeftButton (whoops!).
- Added Playback's MidButton decrease_prio/mark_downloaded functionality to Subfeed.
- Created a function open_in_browser that properly opens a url in the web browser.
- Added some pydoc here and there.
- Made open_in_player compatible with being served URLs as well as file paths.
- Deprecated and deleted 'use_url_as_path' config hotfix.
- Added "restart may be required" signifier to config options w/o bindings.
- Fixed bug where timedelta years weren't subtracted by 10 when showing decades.
- Made youtube-dl an optional dependency, and removed tqdm entirely.
- Added in stock BreezeStyleSheets and made them load instead of the windows modded ones if you're on Linux. Also added
a missing README.md.
- Added toolbar icon size modifier for use on High DPI displays.
- Implemented actions and kwargs bindings in GenericLineEdit.
- Tweaked Elided text modifier for video title to perfection (if text is bolded or otherwise it will cut off a little
sooner than this perfection, but that's why it's been made user configurable).
- Explicitly set progress bars to blue instead of assuming it would be the default (varies with QStyle and QPalette).
- Fixed issue #5 (Launched players would quit along with Sane) by pre-pending 'nohup' to Popen arguments (if Linux).
- Changed timedelta formatting delimiter from % to $ due to shortcomings in ConfigParser (%% is an escaped percent sign,
so config parser finds it, but it doesn't actually do anything, but % isn't a valid string interpolation. so it fails.
- Made video uploaded timedelta format customisable, and changed to use relativedelta with a string.Template to have
strftime-esque formatting (it only allows for [a-z], so had to go with repeating letters instead of dash.
- Made GridView elided text values customisable.
- Fixed GridView text bleeding out of frame (length-wise, height cut-off issue is still unresolved).
- Made elided title text modifier customisable and moved out of place 'title pixel size' item in ConfigView.
- Removed mysterious hide_downloaded setting from GUI config (and MainWindowListener) that seemingly did nothing.
- Fixed bug where despawned Central Widgets were not respawning properly, leading it segfaults.
- Config checkboxes now support multiple functions where some don't have kwargs.
- Toggle for playback and download feature and debug mode now toggles the menubar and toolbar items as well.
- Created function to respawn menubar and toolbar in MainWindow (useful when config has changed to reflect hiding items)
- Extended GenericConfigCheckBox's function(**kwargs) capability to include lists of functions (and/or lists of kwargs).
- Added functionality for tabs to be inserted at their predetermined position instead of at end of row, and made it the
default.
- Made Debug tab in ConfigView spawn and despawn when enable Debug option is checked/unchecked.
- Made Download tab in ConfigView spawn and despawn when enable PlaybackView option is checked/unchecked.
- Implemented ability for GenericConfigCheckBox to take checked/unchecked action functions and kwargs.
- Split ConfigView's populate_options into one function per tab, which allows for more fine grained adding/populating
in future.
- Moved settings for enabling debug mode and GUI to a new "Advanced" tab in ConfigView.
- Made "Download" tab not show on startup if Playback view is disabled.
- Created del_tab and add_tab (and refactored add_tabs accordingly) in ConfigViewTabs.
- Moved Views to their own "Views" tab in ConfigView.
- Removed obsolete tab_id kwarg from InputSuper (ConfigView).
- Mask database location from being written to generated sample config.
- Made Database type and location customisable from config (default type: sqlite).
- Sample configuration files are now generated if none already exist.
- Fixed issue with log-to-file feature spawning a new file handler instance for each create_logger() call
(3000+ file descriptors).
- Made Left mouse button action remappable (a little stop-gap pending full implementation of hotkeys, default: open in
default web browser)
- Made Playback view (and implicitly downloading features) optional (default: disabled).
- Fixed bug that prevented QtWidget styles in Window->Theme->Style from working at all.
- Made DownloadView able to retry/re-add failed downloads.
- Made video download logic able to emit failed download signals to DownloadView and set info accordingly.
- Made downloader properly report and set failed download status to failed on pesky SSL Handshake errors (Errno 0).
- Updated MainWindow's confirmation_dialog function to make all args but message and action optional.
- Removed debug logging for unfinished downloads when clear finished downloads button is pressed.
- Made config text input fields actually set the the text variable to current config instead of just showing a
placeholder while text variable was Null (could potentially have lead to issues down the line)
- Made config text input fields save-as-you-type instead of unintuitively requiring user to hit the return key.
- Added config option to adjust thumbnail tile overlay width and height
(NB: If you have enabled force AR width won't change)
- Fixed bug where SaneInputDialog didn't auto close after OK was clicked.
- Added startup choice between build API key and oauth from string or load from file
- Updated startup checks to send in a cancel_action instead of needing to carry around (and update) two boolean
variables for whether or not public files were used.
- Made it possible to bind actions to cancel button on SaneConfirmationDialog
- Implemented an init_ui() in SaneDialog, giving it new purpose.
- Made essential Sane{Confirmation,}Dialog args normal instead of kwarg
v0.5.1
- Made OAuth2 AppFlow run local server and open in browser when using GUI. This should entirely rid us of needing access
to a console \o/
- Made application a bit more robust when tackling OAuth failures, be it aborted auth or missing files.
- Moved API Key/OAuth file exists logic to MainWindow and made it a pop-up. In the case of a missing key or client
secret file, the user will from now on be prompted from GUI about whether they want to load their own or use the
public set (NB: prone to exceeded quota).
- Made it possible again to run CLI commands without GUI, using the --no_gui flag.
- Added option for doing a single refresh and print of subfeed with --refresh_and_print_subfeed
- Made all icon constant variables in MainWindow default to the light version, to avoid false positive "NoneType"
warnings in code.
- Changed Configuration pop-out window to a CentralWidget/View and added it to toolbar.
- Renamed all instances of "preferences" (both in code and files) to "config" to make it less confusing as the class
itself is called ConfigView.
- Added --print_playlist_items cli option with and optional --print_playlist_items_url_only switch for use in exploding
YouTube playlist IDs into individual video items.
- Fixed long lasting "Too many open files" bug caused by thread-unsafe google-api-client httplib2.
v0.5.0
- Refomatted CHANGELOG to over exceed 80 char line width
- Changed logging levels for DB to DEBUG6 and DB listener to DEBUG7
- Made geoblock if stmt look up partial match in list instead of exact, which makes it less susceptible to changes in
error message (which happens *quite* a lot)
- Added some debug logging for Issue #36
- Implemented dark-mode icon set to be toggled on/off (Solves Issue #16)
- Muted non-critical KeyError errors about B/s speed in calc_avg_speed
- Refactored geo block if check to use a list of predefined strings
- Handle geo blocked videos that throw "This video is not available."
- Added Pipfile.lock to .gitignore and removed it from git cache (people need to re-run Pipenv lock)
- Added debugging code to arbitrarily open 1000 fds
- Added handling of OSError and other critical or unexpected exceptions in subfeed refresh (too many open files issue)
- Added fail, pause, finish and set_color functionality to ProgressBarListener
- Created a SaneAbortedOperation Exception which can hold other exceptions
- Removed coloured VideoTile logging of "likely vod" cases
- Updated youtube-dl dependency to latest version (fixes broken music video dl, somehow o0)
- Replaced all integer is obj comparisons with == and != across project
- Replaced all video kind obj comparisons with == to fix more potential issues project wide
- Replaced obj comparison with == to fix an issue where VIDEO_KIND_PREMIERE was not correctly evaluated on startup
- Simplified SubfeedGridViewTile contextMenu logic to avoid instability issues
- Commented out debug logging of inserting/deleting GridView items
- Added option to mark/unmark videos as liveBroadcastContent, as well as colouring them
- Cleaned up youtube_requests and removed debug list/search and needle (old debug code)
- Added SubSort section (PlaySort copy) and colouring and pinning of live broadcast content to config files and GUI
- Added confirmation dialog when left-clicking (download action) a non-VOD
- Added Video kind attribute to database
- Made liveBroadcastContent video tiles behave differently to VODs
- Added livestream (live/upcoming) handling and added a video kind attr
- Reduced unnecessary SubFeed tile removal on-download by reloading it before PlayView
- Fixed CVE-2017-18342 (pyaml >= 4.2b1)
- Fixed pesky SubFeed redraw glitch introduced by GridViewListener rewrite
- Added thumbnail overlay functionality to SubFeedView
- Added Downloaded video overlay and darkened bg of Watched overlay so it's not eerily similar to the Discarded overlay
- Created repaint_video(s) and singular redraw_video functions and split VideoTile setPixmap into own function:
set_thumbnail_pixmap
- Fixed accidental removal of already existing video ptr
- Reverted rest of update_grid code to avoid possible ptr issues
- Reverted q_labels_keys_to_delete code to avoid possible ptr issues
- Added some documentation to GridView functions and debug of update_grid
- Added missing return in calc_avg_speed KeyError exception handling.
- Added Handling of 'B/s' cases in determine_si_unit
- Added cli options to print downloaded, discarded and/or watched videos (--print_downloaded_videos,
--print_watched_videos, --print_discarded_videos)
- Fixed issue with get_single_video being broken due to referencing the static PlaybackGridViewListener instead of the
instantiated one from MainModel (more listener rewrite bugs)
- Fixed all issues with tile glitchyness (introduced by listener rewrite) both when showing and not showing videos that
are watched/discarded/downloaded. Videos will only be hidden/unhidden if the respective watched/discarded/downloaded
option is False, in the case of those options the video will skip hide/unhide calls and just do the redraw.
- Fixed issue with downloaded videos not disappearing from Subfeed
- Obliterated Issue #32 by always passing in a widget_id to hide/unhide functions (deprecates all the messy
"determine which view" code
- Moved download and related listeners into PlaybackViewListener and made GridViewListener an inheritable
structure/model
- Split GridViewListener into Subfeed and Playback listeners respectively
- Created a Video.__str__ override that prints "channel - title [url]" (allowed for changing all instances of
{} - {} [{}]".format(video.channel_title, video.title, video.url_video) to the more sensible "{}".format(video)
- Moved listeners.py listeners into their own files
- Moved DatabaseListener to new listener structure
- Renamed DownloadHandler to DownloadViewListener and structured it
- Removed redundant logging of 404 thumbnails that gets handled by caller
- Fixed broken logic in GridView tile listeners (fixes issues #31 and #32)
- Removed exception hook parsing deprecated by SaneExceptionHandler
- Renamed strangely named 'purl' video file metadata tag to the established standard 'url'
- Deleted deprecated test_file.py from eons past
- Moved MainWindow stuff out of init and into functions; renamed and restructured all the Views, added some missing
pydoc here and there and fixed a lot of stuff in MainWindow in general
- Merged pull request #30 from skandix/master (things found in .py files, that obviously need to be fixed)
- Mapped global hotkey Ctrl+Z to undo action
- SaneHistory can now undo prio, watched and discarded actions (created anti-functions for watch,
discard and decrease_watch_prio)
- Implemented SaneHistory in QMainWindow and related
- Fixed peculiarities in SaneHistory/SaneHistoryItem's __str__ and __log__ (also fixed bug where entries got removed
even if Exception was raised)
- Renamed the old history system to plaintext_history (now legacy, should be removed at a later point)
- Remade SaneGridViewHistory to SaneHistory, and made it a global history.
- Created a SaneGridViewHistory(QObject) for better history control
- Implemented sort-by channel title in Play View (with some FIXME caveats)
- Added average download speed indicator and most common ETA speed indicator (default ticks = 50)
- Removed nonsensical ability to pause a finished download (with no effect, backend)
- Added a started/finished on field to Download View
- Properly implemented duration field in Download view
- Added support for deleting incomplete entries from DownloadView (context menu on the video/item tile)
- Hotfixed issue #28 (Low priority UI Visual Bug)
- Fixed bug where a successful geo block proxy download would be set as failed
- Removed useless "pause/resume" context menu from finished downloads
- Made Download view progress bar say "Postprocessing..." during mux (and optionally postprocessing) stage
- Fixed issue with Total size only showing audio track size on finished download.
- Added paused and failed status to ProgressBar Status field (WIP: failed not yet handled anywhere)
- Made youtube_dl_handler detect and report failed downloads (WIP: Not yet handled anywhere)
- Changed to a saner colour scheme (darker variety)
- Made DownloadView and ProgressBar handle paused videos + misc small stuff
- Recoded sane_try to take a func parameter and apply args and kwargs on it
- Added option to display all exceptions in GUI dialogs (useful for testing/debug)
- Made Sane able to display exceptions in GUI using the SaneTextViewDialog
- Made MainWindow use the new SaneExceptionHandler and added necessary functions
- Created a SaneExceptionHandler(QObject) and made the cli.py hook legacy.
- Created an exceptions list that the sys_excepthook appends to so others can poll it for exceptions
- Created an exception_pyqt_slot that wraps the pyqtSlot in order to handle backend Exceptions in frontend (very WIP)
- Added a debug menu with some subitems that raises generic Exceptions
- Fixed startup failures caused by missing {clients_secret,keys}.json by copying over public no no custom keys/secret
exists
- Fixed CVE-2018-18074 by updating 'requests' dependency to >=2.20.0
- Removed leftover PlayView ThumbnailTile debug.
- Added a big red SD definition indicator at top left of video thumbs to make it easier to spot still-processing
(youtube's end) videos
- Added cli option --print_subscriptions to print subscriptions (from DB) and quit.
- Reclassified Database logging from DEBUG to DEBUG5 and DEBUG4 in order to make it easier to filter out DB logging
when it's not relevant (it's raaather spammy)
- Added more logging levels (DEBUG2-5) and pydoc
- Fixed false-positive bug in thumbnail matching for YouTube 404 image in cases the check shouldn't be run.
- Make "Initializing UI" info logging a bit less vague by specifying who logged it
- Added has_captions overlay to thumbnail tile (where applicable) and re-aligned duration position
- Fixed headache-inducing bug where an if test for None also reacted to False
- Added checks in write_operations for videos missing the newly implemented extra video info columns (helps with
backwards compatibility)
- Added new video DB extra video info columns
- Removed video response logging debug
- Fixed bug in yt_duration_to_timedeltat() regex that failed matching durations with hours
- Fixed broken bool input validation in boolify_string()
- Fixed issue #26 by making MainWindow omit the 'Manual dir search' submenu if yt_file_path is unset in config.
- Handle regionRestrictions not always existing in YouTube API contentDetails resource
- Added extra video info properties (has_caption, dimension, definition, projection, region_restriction_allowed,
region_restriction_blocked) to Video object and Database
- Fixed duration check accidentally setting has_captions property on videos and actually implement has_caption
- Add forced garbage collection at end of refresh_videos() to combat "Too many open files" bug
- Added logging of 'ulimit -a' on Linux to debug "Too many open files" bug
- Removed debug log spam from on_any_event in dir_handler and add info logging to on_moved and on_created
- Made (GridView) background color customisable (fixes issues for people with Qt as their system theme)
- Fix Subscriptions view that was set to Downloads view (code typo-ish)
- Swapped subprocess call(...) with Popen([..]) to fix custom img app on Linux
- Added configurable friendly names for the various player options
- Added 7 more optional configurable alternative/external players and listificated to all player strings
- Added handling for external player arguments
- Fix issue with proxied dl never triggering due to youtube_dl putting bash color codes in the Exception msg >_<
- Added working pipenv Pipfile (and lock) to project as an alternative to virtualenv
- Rephrased logger messages to be less vague
- Set missing youtube_response keys to None instead of raising Exception
- Fixed use of wrong kwarg and some message typos in logger calls
- Added exception handling to most of models' Channel DB insertion
- Made DB write_operations missing thumb/duration log message specify which video it occurred for
- Made Thumbnail N/A log message specify which video it occurred for
- Massive README.md overhaul
- Bug fix: Subscriptions list API retrieval now handles strange cases where channels are missing title in backend.
v0.4.1
- Made MainWindow read hotkeys from ini file instead of using hardcoded ones
- Fixed bug where hotkeys parser read the wrong ini file
- "Download video by URL/ID" now handles URLs with '&' params
- Changed SaneInputDialog from QInputDialog to QDialog and added support for QValidator
- Added info about log level 1 (Enable all) in ConfigView
- Removed deprecated config.ini file/gui mismatch check
- Fixed white text on white background tooltip issue in breeze light theme
- Changed various config defaults for GUI
- Video duration is now displayed on thumbnail tiles
- Renamed functions from *filename to *filepath where applicable, and made filepath function os.path.join its return
value and send paths - not names - to SaneFFmpegMergerPP
- Split output filename detection into functions and created a new one for finding incomplete downloads
- Made SaneFFmpegMergerPP attempt merge as follows: 1. Attempt to encode audio to aac, 2. Attempt to encode video to
h264 or 3. Encode both audio and video to above formats (worst case scenario)
- Added handling of incompatible container audio and video stream muxing (mostly MP4) where youtube_dl would just die
to an unhandled Exception
- Made SaneFFmpegPostProcessor use config.ini options instead of youtube_dl's _downloader.params
- Added postprocessing section and options to config files and gui
- Forked own version of youtube_dl's ffmpeg.py to override some hardcoded stuff
v0.4.0
- Added has_section function that returns ConfigParser.has_section response
- Add whitelisting for video extensions on the resulting file from youtube_dl
- Added optional user override for youtube_dl opts (read-only/info in ConfigView)
- Add hotkeys icon asset
- Set window titles and icons for various ConfigViews
- Added the possibility of kwargs for add_submenu
- Application now remembers and sets last theme and style that was use
- Added support for QStyles that can be used in addition to or instead of Themes/StyleSheets
- Sending QApplication reference into MainWindow constructor and apply themes on it rather that MainWindow
- Centered progress bar text in breeze themes
- Fixed overlapping submenu icon padding issue in breeze themes
- Implemented themes (bundling in breeze light/dark theme)
- Added missing config options/handling for DefaultApp and its members and finalised implementation of custom
image viewer, for both linux and windows
- Hotfixed issue #82 by changing t_font.PixelSize from 0.45 to 0.40 (resulting in *slightly* smaller font) and add
TitleTile PixelSize as a config option (default: 0.40, old oob-issue value was 0.45)
- Align ConfigView items to top of window frame (Fixes wonky (default centered) alignment)
- Added SPAM log level to ConfigView/Logging description
- Added Log level description to Logging ConfigView section
- Added function add_option_info for adding flavour text to left and/or right ConfigView grid columns
- Made SaneInputDialog take an action as argument instead of using hardcoded calls
- Added support for checking if YouTube says you are subscribed to a channel, and add an override/disable feature
instead of deleting the subscription.
- Added add_subscription function and dialog to MainWindow and tied it to File menu (manually add a local-only
subscription)
- Added subscribed and subscribed_override to SubscriptionsDetailedListView
- Added DB Statement function to get channel by title
- Fixed issue where continuing a download would not redraw video, or update db
- Made .watched be handled properly for NULL
- Fixed QEventLoop: Cannot be used without QApplication
- Fixed issue where GridView widgets weren't properly deleted in Linux/Python3.5/PyQt5.10
- Changed db update to happen for each int percentage, drastically reducing db write
- Added event updates to db
- Added requirements-py35.txt for python3.5 and below (later versions use the normal one)
- DownloadTile now receives db_download_til
- Continue/Pause implemented for contextMenu
- Downloads now loads from db, and waits
- Db videos are now sent to download view
- New downloads are now added to db
- Added a default_application_handler (static) and refactored play and sub tiles to use it.
- Removed quotes from config.ini.sample
- Moved function from video_d to video so that video_d don't need to import Video
- Fixed download tiles not clearing with clear finished button
- Added download video functionality for videos that are missing vid_path
- Implemented new and improved way of detecting finished downloads
- Fixed QProgressBar overflow issue, and centered percentage text
- Fixed single video download, and added decimal point to percentage during download
- Assigned icon to Downloads View
- Fixed timedelta for video tiles
- Added downloads view
- Added continue/pause for downloads view
- Added db storage for downloads view
- Added priority to downloaded videos
- Added option to filter videos based on age
- Made views exclusive checkable
- Added text edit to config view
- Added Hotkeys View and made both it and ConfigView into popout windows
- Added darkmode versions of select icons
- Split ConfigView into multiple tabs per section/category
- Added ascending sort
- Added missing section handling
- Added gui.dialogs with SaneInputDialog and SaneTextViewDialog
- Added "No File" thumbnail overlay and made it update/vanish when download is finished
- Made Subfeed View use show_downloaded and show_dismissed
- Implemented show_watched and show_dismissed for PlaybackGridView
- Added option to pipe instead of downloading the youtube-dl request
- Made SubfeedGridView and PlaybackGridView inherit and override ThumbnailTile, and split out overlay drawing from
setPixmap() to add_overlay()
- Moved icons from gui/ to resources/
- Fixed issue where YouTube API search() would return truncated descriptions
- Significantly optimised DB performance
- Added "tray" icon that indicates when DB is writing/busy
- Added "View description" and "View image" functionality to SubfeedView and PlaybackGridView context menus
- Added "play w/o mark watched" to PlaybackGridView context menu
- Added a usage history dialog (Ctrl+H)
- Added GetUploadsThread exception handling
- Improved geo proxy code to handle more generic error messages thrown at it.
- Replaced optional video-grab input field on toolbar with a dialog prompt (Ctrl+O)
- Changed '_v-id-' identification string/syntax
- Made the system able to detect moved files
- Fixed download_thumbnails_threaded Exception when receiving len 0 video list
- Fixed filter_videos not returning videos not in db
- Removed defunct check for empty DB
- Made the home and end key scroll to value 0 and value maximum-1
- DEBUG: Added "Send to logger" context menu option for videos in GridViews
v0.3.4
- Added optional video-grab input field on toolbar
- More logging improvement across the entire project
- DB now deletes unsubscribed channels when told to reload subscriptions
- Scrolled views now load new videos when 100% scrolled to bottom, not 90%.
- Removed ffmpeg import that created unnecessary dependencies.
- NULL QPixmaps are now replaced with a custom 'Thumbnail N/A' image.
- Fixed issue where SubfeedGridViewTile logger was accidentally named PlaybackGridView.
v0.3.3
- Added support for proxies to bypass geo blocks.
v0.3.2
- Optimized grid views by changing q_labels to dict, and reusing them.
- Made GridView generic, and move specialized functions to sub_feed
- Removed regrab_percentage and related functionality
- Gave manual db grab shortcut(Ctrl+E)
v0.3.1
- Added scrollbar to GridView and PlaybackGridView
v0.3.0
- Cleaned version of v0.3.0-pre
v0.3.0-pre
- Added a Play View which shows your downloaded videos (gui).
- Play View can recognise and add downloaded videos from a specified directory (config).
- Added function to manually refresh download directory.
- Added feature that watches the specified download directory for changes (inotify).
- Videos can now be downloaded with youtube-dl (lib).
- Videos can now be played with a video player of your choosing (config).
- Database now stores download date.
- Added function to manually update from database (gui).
- More logging.
v0.2.1
- Added Deep refresh feature that more thoroughly scrapes YouTube.
- Fixed bad timezone handling on datestamps which affect "new video" calculation.
- Videos found by Deep refresh that are > 1h old are marked as "missed".
- Fixed broken implementation of syshook intercept that would cause Exceptions in logging
- Implemented regrab feature that will automatically refresh feed if the cache gets too small.
- Log handler now uses multiple facilities which allows for a better overview.
- Logging is now implemented project-wide.
v0.2.0
- Application now uses test to determine how many pages to use for missed videos.
- Tests can now be initiated from GUI.
- Progressbar on reloading of subfeed.
- Optional embedded thumbnails in tooltip.
- Optional keeping of Aspect Ratio when resizing thumbnails.
- Thumbnail overlays for missed and new videos.
- Default background colour is now white.
- Application now uses db to check for old videos.
- Option to hide/show wip/unimplemented GUI elements.
v0.2.0-dev2
- Renamed VERSION.txt --> VERSION.
- A grand rewrite of ConfigView making it humanly usable.
- ConfigView now has comboboxes and covers *all* settings.
v0.2.0-dev
- Added this changelog. \o/
- Added feature: Versioning.
- Added feature: Colouring of *new* videos in GridView.
- Added feature: Reload subscriptions list on demand from GUI.
- Added feature: Text (title, channel, date) on video tiles in GridView.
- SubscriptionsDetailedListView is now a table that practically mimics the DBs 'Channel' tbl.
- Video tiles in GridView now have a fixed size and spawn new if space allows.
- Fixed a lot of icons and related gfx.
- Misc file/folder restructuring.
- HOTFIX: Only one resizeEvent on a big change.
- BUG: Grid resize has issues if started > 2x2.
v0.1.0-dev
Initial release/tag.