YTFE changelog
v1.26.3 (2024.10.17.)
Bugfixes:
- There was an ugly heap trash bug in the paging, which was triggered by doing a paging and then do a search, or open a video's or playlist's page with persistent connection enabled and caused all HTTP connection to cease functioning until restart. (And it - theoretically - caused another kind of heap trash, if persistent connection was disabled, but this bug was known and had been workarounded (because i was unable to uncover the bug's source earlier), so this crash was not triggerable.)
v1.26.2 (2024.10.13.)
Bugfixes:
- If the downloaded JSON-s did not contain any kind of size information about a stream, then that was taken as a zero sized stream and thus filtered out, if the filtering of ignored formats was turned on. From now on, it is interpreted - and displayed - as unknown.
- The HTML parser did not parsed the by-default non-self-closing tags properly if they were used as self-closing. (The HTML
s
tag is not self-closing, but the S
tag in the YT XML is.)
- The program could not continue the download of EDL video streams.
- If a tab was closed, right at the moment when the program auto-reloaded it to continue a failed download, the program crashed.
- If a video was being downloaded and played simultaneously and got a 403, then at reloading, the program could not open the file(s) it was writing before (???) and that caused the downloading thread to crash, which caused the program to believe the download was finished, which resulted in the merging of incomplete files. This is most inconceivable as an external player playing a network stream and another program writing a file has nothing to do with each other. (At least it was not supposed to.) Anyway, the opening failure is now handled, so the program simply will try again the download, until the external player playing the network stream becomes closed, so the program can open the files again. (Really inconceivable.)
Bugfixes:
- YT changed the way EDL videos were given to the frontend: separately grouped
S
tags were moved from the adaptationset
nodes to an external and common segmentlist
node, and sourceURL
got renamed to media
in the representation.segmentlist.segmenturl[]
nodes too.
- The program could not download EDL audio streams. (I never found any until now.)
Other new stuff:
- The logging panel has been removed from the program; it was not used and was unreachable to users anyway.
- Some refactoring and optimizations.
v1.26.1 (2024.09.12.)
Bugfixes:
- With MPV, for some reason, actively played tabs (except the first tab) caused to crash the program when they was closed, due to MPV's
stdout
becoming nil
. (VLC did not do this.)
v1.26.0 (2024.09.10.)
Most importantly:
- Since the Android streams are very unstable (they throw 403 a lot), even with the continue capability it is very annoying to be forced to reload the page after each 20-30 seconds, re-select the format and retry download. A new option called
auto-retry downloads after failure
has been introduced which reloads the tab when a download error occurs and retries to download the video. (It remembers the selected format too.)
Bugfixes:
- The program always asked the overwriting question if a separate audio or video stream queried for download was existing, which made download continuation impossible. (With separate streamed videos this question should only asked, if both streams is queried and the merged file exists.)
v1.25.0 (2024.09.02.)
New stuff:
- The program now tries to open the default browser (for opening the manual) with
gio
, kde-open
and exo-open
before xdg-open
. (This does not affect the Mac, which has it's own open
command.)
- Now the user can set the close action for the
Ctrl + Q
hotkey and for the tray icon's quit command exactly as the same way as for the main window's closing query.
Bugfixes:
- Main window's width was erroneously calculated when zooming in. (Took the right edge of the last button in the nav bar, instead of the last label.)
- Tab filtering window's size was not adapted to the zoom factor.
- Tab filtering window's initial size was too small on the Mac.
- Tabulation orders on several panels were out of order at several points.
v1.24.0 (2024.09.01.)
Most importantly:
- Tabs now can be filtered.
Other new stuff:
- Dialog button order now can be changed.
- The
close or minimize
dialog is now uses the same dialog type as the other ones.
- The
Ctrl + Q
hotkey from now on will throw up the close or minimize
dialog, instead of the simple confirm to close
one.
- Some refactoring and optimizations.
- All logging lines the code had until this point have been disabled. They had only served debugging purposes during the early stages of development, but the parts they were contained by are already working without known errors; i have not used the log entries long since. While logging can be disabled globally, the logging function was still called each time, which meant the passed strings were still needed to be assembled and also, the marker file's existence for logging was checked each time. (This latter one is now changed: the marker file is only checked when everything else are: at the loading of the config. But the rest still stands.) The overhead should not be noticeable, but it is better this way, that production versions do not log anything. Whenever i will be contacted by users about bugs, logging will be used for debugging at the user's machine via the development versions.
Bugfixes:
- The subtitle list box did not shown the selected subtitle after switching back to a tab. (The selection was still in effect, but it was not visible.)
- After a tab has finished loading, the subtitle selection was not reset and if a subtitle was selected on the previous page and the new one did not have that many subtitles, then the program crashed.
- If the mouse moved to somewhere else than a tab during dragging a tab, then the hover effect remained active on the last tab the mouse was over.
- If a dragged tab was dropped somewhere else than another tab, then the drag and drop mechanism stopped to work.
- If a tab was dragged to the left and the scrollbar was not at it's leftmost point, then if the selected tab's index has fallen into the interval of the target tab's index plus the scrollbar's position and the dragged tab's index, then the highlight has shifted one place to the right, erroneously.
- Tabulation on the main panel was halted by the two scrollbars.
- Tabulation order on the main panel was out of order at several points.
v1.23.0 (2024.08.25.)
Most importantly:
- From now on, if the file to be downloaded is already exist, then the program also asks, if it should continue downloading it. (Useful in cases of interrupted downloads, for instance if the program gets a 403 with the Android format list client during download.) For external downloaders, there is a new flag for this: the continue flag. (Out of the known downloaders, only
curl
, wget
, aria2
and OpenBSD's ftp
supports this flag. The program fills it automatically, if not filled.)
Bugfixes:
- Subtitles' names did not appeared in the subtitle list if the format list client was not the
Web
one.
- Subtitles were not working with the Android format list client.
- The program will no longer try to merge the downloaded A/V streams, if the external downloader exited with an error code. (The internal downloader was not affected, thus this was a de-facto OpenBSD-only bug.)
- Dialogs and their buttons are now a bit more informative.
Bugfixes:
- Dialog buttons now should be in normal order (left to right) and not reversed. (Except for the Mac. For reasons currently unknown.)
- Program now fills the header flag for
axel
and aria2
too, if not filled.
- There was a "bug" in the channel video iterator (actually, the bug is in YT), which prevented the program to show the videos, if the continuation item was among the first 30 elements of the iterated videolist page. (This should not happen, as one page contains 30 elements, so if there are less than 31 videos remaining (which means, it is the last page of the channel), then there should not be any continuation item at all, but if there are more than 30, then the first 30 item should be a video anyway.)
v1.22.1 (2024.08.17.)
Bugfixes:
- The program could not open channels, if the selected format list client was not the
Web
one.
v1.22.0 (2024.08.11.)
Most importantly:
- Downloading the direct stream links with external downloader (simple downloader (e.g.:
curl
, wget
, etc.), not A/V downloader (e.g.: youtube-dl
, yt-dlp
), that was working already) is now implemented. (Except for EDL videos.) This way, it is now became possible even under OpenBSD to fully use the program without youtube-dl
or yt-dlp
. (Except for EDL videos. Maybe one day. Until then, there are those A/V downloaders.)
Bugfixes:
- Setting the cache path to empty could cause a crash.
- The element positioning on the Prefs panel had some conceptional errors. (It should look usable on OS X now.)
- Some page-component downloads were not made able to follow the user's choice between the internal and the external downloaders, they always were downloaded via the internal one. (This affected only OpenBSD, since on the rest of the platforms, the internal would simply do it's job and download the file anyway, but on OpenBSD this caused the tab to hang in the middle of loading.)
- Using the external downloader for the Android format list client caused the page loading to fail. (While theoretically this was true on all platforms, since the internal download is only broken on OpenBSD, practically this only was a blocker on OpenBSD, as on the rest of the platforms, the user could simply use the internal downloaders.)
v1.21.0 (2024.08.11.)
Most importantly:
- YT introduced the - so-called - "poTokens" (Proof of Origin tokens), which made it - seemingly - impossible to use the web surface of YT with anything but a browser, as it relies on cookies and JS objects/features only existing in browsers.
yt-dlp
solved the problem by accessing the different media players' URLs (thus YTFE was still fully funcioning if set up to use yt-dlp
, instead of obtaining the links internally) and i followed their lead. Therefore from now on the user can select the format list's client. (See Prefs/Formats in the manual.) And of course, can specify an external downloader for obtaining the format lists, if needed. (Currently, the internal HTTP functions are still broken in OpenBSD, so there it is definitely needed.) Note: This tool needs to be HTTP POST-capable. (curl
, wget
) Important: Since the alternative clients (Android, iOS, MediaConnect) have no n
signature protection, therefore the JS interpreter is not needed if they are selected.
Other new stuff:
- Similarly to
yt-dlp
, the JS player - which is the same at every video - is now cached, by version. (Reload does not affect it, but emptying the cache does.) With this, the program can spare around 200-250 ms at each format list's n
signature deciphering (as in: each new - not cached - video page loading). But then again, this only affects the Web
client, the rest of the format clients do not need the signature deciphering at all.
- Some refactoring and optimizing.
Bugfixes:
- The internal audio/video downloader reported HTTP error 416 for all HTTP errors.
Bugfixes:
- Until now, the program did not looked for the
phantomjs
interpreter.
v1.20.7 (2024.07.27.)
Bugfixes:
- If a playlist's entry has been removed by YT and the entry's name became empty, then a nullpointer has been passed to one of the functions the program crashed. This did not happen before upgrading to Lazarus 3.4; it seems Lazarus 3.4 changed something in the string handling. Or i don't know.
- Also, if you stepped back in tab history to a playlist like this, then the filters crashed the program by overindexing an empty array. This had to be in the earlier versions, it just did not get discovered.
v1.20.6 (2024.07.10.)
Bugfixes:
- YT started to use the global player object in the yuck-cipher, which was not defined in the extract.
v1.20.5 (2024.04.02.)
Bugfixes:
- Download speed calculation fell out of synchron for ~1 second, when the user switched back to a downloading tab.
Update (2024.06.17.):
- Under OpenBSD 7.5, with the new 8.3.0 harfbuzz library, Lazarus and the GTK2 programs built with it are crashing due to unknown reasons. So, a Qt5 build is introduced for OpenBSD and for now, from OpenBSD 7.5, only the Qt5 version is usable.
v1.20.4 (2024.02.18.)
Bugfixes:
- Fixing a theoretical pointer bug caused by the refactoring done in the last version. (Apparently everything worked, but it does not matter: i forgot, that Pascal does not pass the pointers of arrays automatically, but clones the array for the caller, which does not really matter for object arrays (probably this is why were no visible errors), but it does for arrays of simple variable types.)
- Some obscure tab-overindexing bugs have been fixed. (Not likely anyone ran into them.)
Other new stuff:
- Some refactoring and optimizing.
v1.20.3 (2024.02.17.)
Bugfixes:
- Streams with sizes falling into the interval of 2-4 GB and the multiples of it were undownloadable due to HTTP error 416.
-
A bad index caused the Qt5 version of the program to throw up a boundary error message, if the external downloader was used. (Interestingly it did not do it with the merger, even if the bug was present there too.)
Note: This has only affected the Qt5 version of the program and it is not known if it happened with all libqt5 versions, or not.
Bugfixes:
-
Due to a bug in either Qt5 or the Qt5 interface of Lazarus, the textarea's lines in the download window do not extend "on the fly" (right before the writing), if empty strings are inserted. So, writing the status into the newly inserted (empty) lines caused boundary errors. This prevented the download. (And if player logging was enabled, it had thrown an error when the playing has started. Similar things would apply to the external downloader and the merger, but the bug mentioned above prevented this one.) Workarounded by adding spaces, instead of empty lines.
Note: This has only affected the Qt5 version of the program and it is not known if it happened with all libqt5 versions, or not.
Other new stuff:
v1.20.2 (2024.01.22.)
Bugfixes:
- In certain circumstances, if the browser was not running already when the manual was opened from the program, then the browser took the control from the program which did not respond until the browser stopped.
v1.20.1 (2024.01.21.)
Bugfixes:
- Blocking a user in the videolist now will immediately remove the videos of the blocked user from the tabs, you do not have to reload them.
v1.20.0 (2023.12.31.)
Most importantly:
- There is an update notifier, which - if turned on (by default it is not) - tells at start if there is a new version. (BTW, it does nothing else, just queries this plaintext file: http://oscomp.hu/depot/ytfe_direct/version.) Warning: Under OpenBSD the FreePascal HTTP client is still broken, this function cannot be used there. As a workaround, the mentioned link can be checked, as the program does not do anything else anyway. (Naturally, this can be done on other platforms either, but for what.)
Other new stuff:
- We can move with the up/down cursors in the videolists.
Bugfixes:
- F1 brought up the help even if Ctrl/Shift/Alt/Option/Meta/Command keys were pressed too.
v1.19.6 (2023.12.24.)
Bugfixes:
- The search of the currently opened entry in the playlists (for displaying it on the playlist tab) has became broken at one point. (I don't know when. Maybe in the last round. And at invalid links - in certain cases - it even crashed the program.)
v1.19.5 (2023.12.10.)
Bugfixes:
v1.19.4 (2023.11.26.)
Bugfixes:
- Until now, the program did not looked for the
BESENShell
interpreter. (I forgot to add it beside the qjs
. :P )
- Until now, the program did not looked for the
gjs
interpreter. (I had no idea, that there is such. :P )
Bugfixes:
- If there was a space in the media title, then the player only displayed the first word in it's window title. (At least MPV did this.)
v1.19.3 (2023.11.17.)
Bugfixes:
- YT does not give sizes at formats which contains both audio and video streams, however it was introduced in 1.19.1 that the zero-sized formats become ignored, so, if the filter ignored option was enabled, then the
best
format (which i have no idea why is the best, when it always has lower resolution/bitrate than the bulk of the formats) has been disappeared from among the formats.
Bugfixes:
- If we reloaded a page, which was not scrolled to the top, then occasionally the first visible entry description box contained another description.
- On particular systems, the tray icon could not be added to the tray at start and the program crashed. The cause remained unknown, but anyways, if it could not be added, that is now handled and the user will be informed.
v1.19.2 (2023.11.10.)
Bugfixes:
- The focus-fix introduced in 1.19.1 did throw an exception if we sent the live instance an URL and the program's window was not visible.
v1.19.1 (2023.10.30.)
Most importantly:
- There is support for Mac: old Core (32-bit) OSX, Core 2 (64-bit) OSX and M1 macOS; this latter one i can only compile, to run - as in: to test and to debug - i cannot.
Bugfixes:
- In the macport path (
/opt/local/bin
) the program did not searched and it did not know the macport binaries (vlc3
, node
, etc.) either. (Of course...)
Bugfixes:
- If the stream was no longer available, because of removal, then play just silently returned. From now, it throws a message, that it is not available.
- The cycling of players (by clicking the label above) did not cycled the flags.
- From the default VLC commandline the subtitle's and window-title's placeholder was missing.
- The program did not know the video window-title-setter flag of VLC.
- If a particular format is not available for some reason (error 503, etc.) and YT marks the size of it as zero bytes due to this, then it will not be visible in the formatlist.
- If a download failed at a not two-streamed (as in: audio and video, separatedly) format, then the download button did not got re-enabled again.
- At downloading, it did not gave up to download the fragment (and the stream) after reaching 25 errors of 0 or 404.
- Until this point, the error 503 (Service unavailable) was handled as blocker too. (Actually this was intentional, but it was not appropriate.)
- In the Qt5 version we pressed Return and did not released it very fast, then - because Qt5 does not allow that there would not be any element in focus - the history back button got focused, then pressed, which killed the search.
v1.19.0 (2023.09.22.)
Most importantly:
Other new stuff:
- Now there is an option to display the pages' type (S = Search, P = Playlist, V = Video, H = Hybrid (Playlist + Video), C = Channel) on the tabs. (Disabled by default, as it was until now.)
- The number of characters displayed on tabs is now configurable. (From 16 to 256, 24 by default, as it was until now.)
Bugfixes:
- YT varied the search pages' place in the JSON, so only a
'<no title>'
were visible on the tabs of the search page panels.
v1.18.7 (2023.07.03.)
Bugfixes:
v1.18.6 (2023.05.07.)
Bugfixes:
- In-text URL handling in descriptions became totally absurd: there are hashtags and truncated URLs in the description, and another JSON node describes what they should be replaced to. By text. Yes, one has to iterate all the subnodes and replace the hashtags and strings starting with
https://
in the subnodes listing order...
v1.18.5 (2023.05.05.)
Most importantly:
- I have a separate OpenBSD 7.2 OpenBSD VM now; that version is updated to 1.18.5.
Bugfixes:
- The handling of the dual-way stored description introduced in 1.18.3 was buggy: branch two's JSON object was not reset to
nil
before processing and thus sometimes it had an invalid pointer.
v1.18.4 (2023.04.29.)
Caveat:
- I have updated my OpenBSD VM from 7.2 to 7.3, but there were ABI breakages in the new OpenBSD 7.3 and 1.18.4 is built on that, therefore it cannot run on older OpenBSD-s. 1.18.3 has been kept for 7.2- for now, until i make another VM for that.
Bugfixes:
- Two bugs were fixed which froze the tab or - in worse case - the program, if at the channels or videos the list did not exist.
v1.18.3 (2023.04.11.)
Bugfixes:
- The program did not know the
mujs
interpreter.
- The description on YT is stored in the JSON two ways and the new way was unknown to the program.
Bugfixes:
- An encapsulation glitch has been fixed. (Apostrophes were missing from the videoplayer's window's title.)
- A bug in the HTML parser was fixed.
v1.18.2 (2023.01.21.)
Bugfixes:
- YT introduced that the URLs of users and channels are presented in the
'youtube.com/@xy'
in the links instead of the old 'youtube.com/user/xy'
and 'youtube.com/channel/xy'
.
v1.18.1 (2022.12.24.)
Bugfixes:
- Three insignificant bugs were fixed, into which i doubt anyone would ran beside me. I do not even remember what they were... :P
v1.18.0 (2022.11.02.)
New stuff:
- Persistent connection is now available.
Bugfixes:
- Certain users' channels are given differently now than they were given before and the videos were not displayed.
Bugfixes:
- Some smaller bugs were fixed.
v1.17.2 (2022.09.25.)
Bugfixes:
- For some time, some videos started to throw 403 back, both at play and download, because the linkprotector cipher was changed. (Interestingly it only affect certain videos (music videos?), other videos are still working; so, now they are pushing two types of cipher onto the signature of the links + the throttle signature cipher onto eveything too.) This new approach of the old cipher has been processd. (The other one has been left in for backward compatibility, because according to the signs, the two operates parallel, at one video like this, at another one like that.) This too had been made quite complicated, but the core remained untouched, only the method for finding it has been changed. (Here too, thanks to pukkandan of
yt-dlp
, that he helped finding the core function.)
v1.17.1 (2022.08.24.)
Bugfixes:
- Until now, the yuck-cipher gave back nothing for the empty signatures (what is present e.g. at the EDL videos), no attention had to been paid for it, but now for some reason it burps up an
'N'
letter, with which it killed the EDL URLs (them being a local file). Fixed.
v1.17.0 (2022.08.24.)
Most importantly:
- Last time it turned out that QuickJS cannot run the yuck-cipher because of the dates, but i sent code to it's developer in vain, until now he did not reacted... Well, he knows. I rather built in the code into YTFE: you can find a new option in the prefs which enables-disables the reformatting of the dates; if you switch it on, then from now, theoretically it should work with QuickJS - and with any JS engine struggling with a similar problem -, Node.js is not needed. It is optional by the way, because the abbreviations of time zones contains several collisions, e.g. i've ran into that
MST
can be Malaysia Standard Time
and Mountain Standard Time
. Of course the searcher finds the first in the list first one and of course Google uses the latter one... I tried to peek it out from Node.js' source, that how V8 do it, but that is incomplete and contains collisions too. (With the referred list too, i did not made much progress.) So, the feature is disableable, if one would run into something similar like this, but then the JS interpreters (e.g. QuickJS) which knows only the standard date formats, fall out.
Other new stuff:
- Players now have the
{TITLE}
parameter, to prevent the player's caption being a very long garbage URL. E.g. under mpv
this is '--force-media-title'
. For more details see the manual.
Bugfixes:
- In the searcher of the yuck-cipher, if a salt string like
'};'
was present, then that deceived the extractor.
Under translation...
v1.5.0 (2021.01.19.)
New stuff:
- There is a
Summary window
, which comes up at first start and informs about what it did find, but it can be opened with the Ctrl + S
combo.
- The selectable formats from now can be combined, as in: what is just audio, or just video, will be paired up by the program and they can be played together.
-
With this, the settings of the players has been renewed too:
- First, the format flag is now has to be specified separately and the
{FORMAT}
template is not needed to (must not) be encapsulated.
- Seond, if one of those paired up stream is selected and direct URL passing is set (see later), then first here has to be specified that with what flag can the player pull an external audio file beside the image, second into the command-line the
{AURL}
has to be inserted, to make it able to use it.
- On the prefs panel, the elements have been reordered, because it was a mess, so now they are grouped by function.
- Like at the players, at the downloading command too, the format flag must be specified with a separate field too. This way, the problem is no more, that a format cannot be selected (because there is no
{FORMAT}
template in the command-line), or it is mandatory (else, e.g. in youtube-dl
's case, from the -f "{FORMAT}"
it will be -f ""
and it will not work...)
- As i sung last time, the program is now able to extract the direct URLs to the stream from YT's whirling sea of shit and can pass them to the player and downloader. At the player, i already described above that what is connected here; well, that particular URL passing. Logically, if the URL passing is done by direct link, then the
{AURL}
template will be used, if with the original YT link, then the {FORMAT}
template will be.
-
It is almost the same at the downloader too, but here
{AURL}
does not make any sense, if one use a direct link; instead of this, it will copy two downloading command to the clipboard if you copy the downloading command and the program itself will directly download it, if you want to download it. Otherwise this option - that the download should go with direct links - is not really recommended, at least not in the case of separated strems, due to the following:
- For some reason, youtube streams all separated streams (as in: audio-only, or video-only streams) with 0.000001 yoctobit per millennium, at least it did it at here. It is interesting, that this does not occur neither with
youtube-dl
, nor the external downloaders (curl
and co.), nor the players (mpv
, vlc
, etc.), only the program is lucky to got this. Full streams (audio+video) come down with a normal speed, just they do with any other tool. So, i have no clue why it does this.
- The program only downloads the two stream, but it does not merge them together, while e.g.
youtube-dl
does. (Evidently, if someone needs them separatedly, then it is good, but one can download them at the combined versions too.) Logically, there is no such problem, at the full streams.
Because of this, contrary to the player, where the direct link is the default, here the original is.
- Option Formats downloader has been renewed: from now it does not operate with the
-F
flag, spitting out the pre-made table to stdout
, but rather saves it into a file with --write-info-json
and thanks to this, from now here too there is {TARGET}
template (must prefixed with the '-o '
flag in the command-line). The program will provide a unified list, either if it handles the quality list internally, or with an external tool.
- The newly started instance gets feedback from the primary instance (among others, the PID).
- With
Ctrl + PgDn/PgUp
one can step forward-backward between the tabs.
- Now it will look for
youtube-dl
in /usr/local/bin
too at the first run.
Bugfixes:
- With
Ctrl + Space
the playing could be started several times.
- Some minor stuff, which was fixed in the meantime (e.g. in the handling of the external tools, this is the reason why it is good that i started to support OpenBSD), but i already forgot them...
Other notes:
- Under OpenBSD still no internal HTTP query works (not up to me: until this very day, no reaction arrived to my forum topic), so at there the external tools remain.
- A lot of command-line preference has been changed, new templates, etc.; who wants to, armed with the manual can put them into their place, but i would rather suggest to export the bookmarks, blacklist, global playlist, then backup the program's config dir (
mv ~/.ytfe ~/.ytfe.bak
), start the program and let it handle. Then the just exported stuff can be imported. And if there was some setting (e.g. extra command-line flags at the players or whatever), then it can be obtained from the old backup dir.
v1.4.0 (2020.12.21.)
New stuff:
- New hotkey for the play button on the actually viewed tab: Ctrl + Space
- Above the search field there is now a
search
label.
- Manual has got a button on the surface.
- From now on, the program will print out the sent and received IPC messages.
- There is an X on the tabs' close button.
Changes:
- From now on the
hide when minimized
option is disabled by default.
- From now on the default action of the window's close button is not minimizing, but asking.
v1.3.0 (2020.12.19.)
New stuff:
-
From now, the program handles the channels too, one can browse them. And bookmark them. We've got there, achievement unlocked, there are channels... (...and the band responsible for "designing" the slimescripted YT should rot.)
In the searchlists and in the related videos the uploader's channel can be reached in the menu, opened by right click on the image. Can be copied too. Same applies for tabs too.
In the cache files' format - among other reasons, for this too - some minor changes have been made; everybody should empty the cache, before the new version is installed. (This is simpler than clicking refresh at each page coming back from cache.)
-
Finally, there is paging again. In searches, videos and channels too. However, contrary to the "old" (buzzwords: obsolete, twentieth centurian, etc.) system which was able to jump to any specified page, the "new" (buzzword: modern, innovative, etc.) system only can page forward, one step at the time (more accurately appending the content of the next page to the previous when downscrolling the page), due to the "innovation" of YouTube, but at least instead of passing one
GET
parameter, a cubic metre of junk must be wheelbarrowed out in the POST
(except for the paging of channels, where it must be done in GET
, cuz fuck logic, but the junkmountain remained), which YT assembles together in JS for multiple times the resources in the browser... (This part applies to channels too.) The paged in hits are cached by the program: what was paged in once, that can be selected by a textfield, furthermore due to the cache, they can be paged backward too.
Naturally - by calculating with the experiences so far (SSL miseries and the crash of OpenBSD FreePascal internal HTTP client) - there is an option for an external pager, but care must be taken that paging - with the exception of channels - is done via POST
requests, so e.g. the by-default available in BSDs fetch
is according to the best of my knowledge - and the manual - is not suitable for this (curl
and wget
is). For paging the channels the HTML/IMG downloader is responsible, extended by that much, that it got an additional field, where the header flag can be set (e.g. in curl
's case it is '-H '
(Note the trailing space!), in wget
's case '--header='
, fetch according to the best of my knowledge - and the manual - is not suitable for this either, so with that nobody should want to page neither channel nor anything else). However care must be taken that the character which separates the flag from the header string must be given too, because as it is visible in the previous two examples, the separator can be not only a space, but also an equal sign for instance. Further details in the manual. (But one can see Prefs and see what to where.)
- From now, the available formats' list are cached too.
- The much less flexible and
youtube-dl
dependent Obtain params with youtube-dl
has removed and instead of it, the Obtain formats
dropdown is introduced, in which it can be selected that the program itself should select the formats from the downloaded page, use any kind of parametered external downloader for this (e.g. youtube-dl
), or use the params list. (Which is changed too, see one below.)
-
From now on the YT downloader's and the video player's command line supports the
{FORMAT}
template, to where the format ID selected from the pulldown box will be inserted (e.g.: --ytdl-format="{FORMAT}"
). This way, similarly to Obtain params with youtube-dl
the also much less flexible and also youtube-dl
dependent ytdl-format arg.'s separator char
became purposeless and has been removed.
And actually, with the introduction of this and the previously mentioned Obtain formats
, the program has once again became entirely tool-independent. (For the same reason, into the own parameters the argument marking the format (e.g. --ytdl-format=
) is not needed to be added anymore, it is enough to add the code marking the format. Granted, if this is used.)
To those who until this point downloaded the available formats with youtube-dl
and after the update, notice that "the program has speeded up much", i tell, no, the program was this fast before either, the "speedup" is due to that the previously mentioned two youtube-dl
dependent options have ceased to exist and the third one defaults to the internal, as in: the program itself will mine out the available formats during download and does not instructs - the written in Python and thus grimly slow - youtube-dl
to do it.
One who wants to, can restore it to the external tool and give youtube-dl
to it for this purpose if preferred, because for instance the format list spat out by youtube-dl
is more readable, than the program's, or because after X days, YT varied again and i did not pulled the program after it yet, while youtube-dl
is almost daily updated... Since now the formats' list is too cached, so the program avoids calling youtube-dl
here too (except for the first opening or reloading per se). MOAR FEATURES!
- The actually generated command line of the youtube downloader and the video player can be copied to the clipboard in the tab's menu with the
Copy Download Command
, or Copy Play Command
entries.
- Since
youtube-dl
does not overwrite already existing files, so the program from now will ask if it should overwrite it and if yes, it will delete the file for the downloader, whatever it is (though nothing else is in the "market" than youtube-dl
).
Bugfixes:
- Images on search tabs were "zoomed in", if the program pulled something from cache. (YT provided differently sized images earlier.)
- The copied URL at the bookmarks were erroneous if the list was filtered.
v1.2.2 (2020.11.25.)
Bugfixes:
- YT varied it's code again, so searches were killed off.
v1.2.1 (2020.11.18.)
Bugfixes:
- Fortunately it turned out, that unlike the socket error, the signals crashing the program was not OpenBSD's, but the program's fault. This is now fixed. The change affected the other systems too, but if someone did not experience this (like me), then it does not matter.
v1.2.0 (2020.11.11.)
Most importantly:
- OpenBSD support has added, but there are two problems with it. One is the socket problem mentioned in my blogpost, however this can be workarounded with the external downloader, just as the SSL misery could be before the arriving of FreePascal 3.2.0. When this will be fixed, i do not know, as they did not even answered my report on the Lazarus forum. The other is, if we send a signal to the task, then under OpenBSD it only yields in a beautiful crash instead of shutting down (
SIGHUP
, SIGINT
, SIGQUIT
, SIGTERM
) or bringing up the main window (SIGUSR1
). The program can be stopped from the GUI and the main window can be bringed up with the second instance, so one can live with this too, if someone uses OpenBSD for desktop and would want to YT with this program. (Weird, that the same code works under Linux, FreeBSD and Solaris too and actually without Lazarus, under OpenBSD too...) I'll make a simplified PoE and send it in to the FreePascal/Lazarus Team and we'll see.
Other new stuff:
- Lifetime of cached pages can be given (in seconds).
- Bookmarks can be filtered by type.
- Quitting became more sophisticated; at the closing of the main window there is a fourth option now, which asks whether the user wants to quit and from now Ctrl + Q and the tray menu quit can ask this too, if set.
- If the program is started with argument
'-fwm'
, then the main window will be shown, even if we did quit that way, that it was minimized to the tray.
- If an instance is already running and we run another one withour arguments or with the
'-fwm'
argument, then it will bring up the first instance's main window.
- By sending
SIGUSR1
(Linux: 10, FreeBSD/OpenBSD: 30, Solaris: 16) to the program, the main window will show up. (Not yet on OpenBSD, see above.)
- The manual now contains a new section called
Troubleshooting
, where are some somethingdoesnotwork
situation's solution/workaround is written down.
Bugfixes:
- If the last tab was closed and it did not contain any related videos, then the label telling this was not disappeared.
- When sending
SIGHUP
to the program it did not halted properly.
- If it weren't given in the config, the
youtube-dl
separator remained empty.
v1.1.0 (2020.10.21.)
New stuff:
- The more foolproof version of bolond's idea is implemented, from now Ctrl + U will do the same as one would paste the URLs into the URL-opener and press open, in short: open URLs from clipboard, instantly.
- The timeout of HTTP querys now can be set.
- The +/- values of videos will be obtained elsewhere from now (so good, that it is stored in three sepatated places; go find it...), so they will be not shortened that thousands, millions, etc.
Bugfixes:
- YT yet again started to vary the structure of incoming data, so - until this point only at search results, but - started to entertain the user with
no results found
messages, because until this point the window["ytInitialData"]
was the main JSON object, but now it is the ytInitialData
. What is beautiful, that the servers are ad-hoc updated to the new code, so it is sometimes the new, sometimes the old. Handled, the program now eats both.
- Out of the same reasons - currently also only in searches - the images did not came in, or totally unrelated images were in their place (local influencers and similar), because until now
thumbnail.thumbnails[].thumbnails.url
was the JSON path, but now it is thumbnail.thumbnails[].url
and naturally this is also alternates, as it comes from a server with the old or new code. This too is now handled.
- And again from out of the same reasons, the titles were disappeared in playlists, because instead of
title.simpleText
it is now title.runs[].text
. This too is now handled.
v1.0.1 (2020.07.11.)
Bugfixes:
- The node
'compactRadioRenderer'
only contained the playlists generated by YT, but not the related ones, therefore those were missing from the view.
v1.0.0 (2020.07.11.)
Most importantly:
- Now compiled with FreePascal 3.2.0 and Lazarus 2.0.10 and with the new internal SSL library, so SSL problems should be fixed.
- Recently YT started render on client-side, with the data now provided in JSON, instead of HTML. Program is now able to parse and process the JSON too.
Other new stuff:
- "Quick" blocking in the menu of the tabs.
- Option for saving only the URLs in history, bookmarks, playlist and global playlist.
- Playlist, history and bookmarks now has an URL field where the selected entry's URL is visible.
- Global playlist now allows the deletion or movement of several elements.
- Global playlist now alerts the user at quit, if the list is not saved.
- All around, the searching in lists is now looping both forward and backward.
- Description now contains how many related videos are there and how many's were blocked.
- Trayicon now prints out the actually opened tab's title.
- Bookmarks now can be imported/exported.
- The
ytdl-format
argument's separator is now can be set.
- Option for the tabbar scrolling to the newly opened tab, or not.
- New hotkey: Ctrl + Q will make the program quit. (And it will do it - contrary to the combo of window-closing (Alt + F4, Cmd + W) - even it is set, that closing the window will minimize it to the tray.)
Bugfixes:
- Fixed four bugs in the handling of the players' list.
- Fixed four bugs in the players' tab handling.
- Fixed an index glitch in history, closed tabs and bookmarks.
- Fixed a typo in the command-line templates' encapsulation.
v1.0.0-beta5 (2019.08.04.)
Most importantly:
- Since the built-in FP SSL still cannot connect to YT and FP 3.2 still not out, program now supports to do the HTTP queries via external programs which can be set in the prefs.
v1.0.0-beta4 (2019.07.28.)
Most importantly:
- Playlists can be exported now and the global playlist can append lists to itself, can delete and randomize the list.
Other new stuff:
- Quality selector now knows after closing what was assigned to a video.
- Quality selector can now select the default quality by a string (e.g.: "best").
- Clear buttons asks for confirmation.
- Hotkey (Ctrl + P) for player cycling has been added.
Bugfixes:
- Assembly of related videos had a "bug". (Rather it was the vileness of google.)
Bugfixes:
- UTF-8 HTML entity handling had a bug.
- Signal handling had a bug.
- Image handling had a bug.
- Loading tabs and their threads had at least four bugs.
v1.0.0-beta3 (2019.05.05.)
Most importantly:
- Program now can fill up the parameter list with
youtube-dl -F
and pass it to the player with the --ytdl-format
argument.
Other new stuff:
- The program stores the sizes of the main window too.
- The search box and the stream selector is now resizes along the window.
- Program can be instructed what to do if the main window is closed: minimize it, close it for real, or ask what to do.
Bugfixes:
- Trayicon play crashed the program if no tabs were open.
- The program now terminates itself properly and saves the session if it gets a SIGTERM, SIGINT, SIGQUIT (Update 2019.05.20.: and SIGTERM) signal.
v1.0.0-beta2 (2019.02.24.)
Most importantly:
- The program now has a trayicon with hide/show and play/stop controls.
- Logfile can be turned on from the prefs and can be redirected to anywhere.
- Lists are prefixed by type. (S=search, V=video, P=playlist, B=both)
- Users can be blocked in the search/video list.
- Quality can be set now; other parameters are introduced where anything can be passed to the player and on the main surface it can be selected from the list (e.g. what quality we want).
Other new stuff:
- All YT values are pre-filled with <no ***> strings, so it can be seen that it is not filled, but not an empty string will be there.
- Whitespaces are trimmed from the edges of video titles.
- XDG recommendation-compliant config directory as an option: by hand the config dir can be moved from
~/.ytfe
to ~/.config/ytfe
; it will be found there either.
- Linux i686 support introduced.
Bugfixes:
- A scrollbar glitch has been fixed.
v1.0.0-beta1 (2019.01.27.)
Summary:
- First public beta. Initial OS support: Linux, FreeBSD and Solaris on AMD64.