Commit message (Collapse) | Author | Age | |
---|---|---|---|
* | docs(yt/watch/playlist_handler/client_messages): Add TODO about `current_exe` | Benedikt Peetz | 46 hours |
| | |||
* | docs(yt_dlp): Fix typo in `Cargo.toml`'s description | Benedikt Peetz | 46 hours |
| | |||
* | fix(yt_dlp): Avoid writing the json output to disk | Benedikt Peetz | 46 hours |
| | | | | | There is no point in doing this anymore, as we no longer need to deserialize it. | ||
* | fix(yt/update/video_entry_to_video): Cast the json objects | Benedikt Peetz | 46 hours |
| | | | | | Otherwise, we might encounter very weird behaviour if yt_dlp ever changes the types of these keys. | ||
* | feat(yt/update): Print a nice progress number | Benedikt Peetz | 46 hours |
| | | | | | | | This number obviously does not actually mean that we have finished updating (as it is incremented on staring). But it still provides some feedback, on how long the update will probably take. | ||
* | feat(yt/update): Support grouped updates | Benedikt Peetz | 46 hours |
| | | | | | | | | | | Rustpython currently does not use a garbage collector. Thus, every cyclic reference between Python objects results in a memory leak of these objects (as Rustpython uses (A)RCs). The only real way to workaround the memory leaks, is by restarting the whole process, and this `--grouped` flag seems to be the best solution for that. | ||
* | perf(yt/update/updater): Acknowledge, that `yt_dlp` has a sync API | Benedikt Peetz | 47 hours |
| | | | | | | | | | | | | | | | The previous code was written with the assumption, that `yt_dlp` had an async API (which means, that calls to it should never block). Unfortunately, the API is sync and all calls into it block. Therefore, all the parallelism in the previous code accounted for nothing; The actual update ran completely sequentially. The new version uses a local thread pool to avoid blocking the tokio runtime and as such achieves higher speed. Unfortunately, because the rustpython implementation is way slower than cpython, the whole update takes longer. But that is a problem for another day. | ||
* | feat(yt/select): Support a directory selection process | Benedikt Peetz | 47 hours |
| | | | | The single file approach becomes unwieldy once one has more open videos. | ||
* | refactor(yt/select): Split the `select::select` function up | Benedikt Peetz | 47 hours |
| | |||
* | feat(yt/update): Specify subscriptions to update as positional args | Benedikt Peetz | 3 days |
| | | | | | Having the `-s/--subscription` flag is pointless, as there are no other flags that could make a positional arg ambiguous. | ||
* | feat({yt/update,yt_dlp}): Use yt_dlp errors again | Benedikt Peetz | 3 days |
| | | | | | This code was temporarily commented out, as I had not migrated it in the pyo3 -> rustpython migration. | ||
* | docs(yt/update): Add comment about the `unsmuggle_url` invocation | Benedikt Peetz | 3 days |
| | |||
* | fix(yt/update): Avoid printing all the subscriptions that are not updated | Benedikt Peetz | 3 days |
| | | | | This is just too much noise. | ||
* | fix(yt/select/selection_file/duration): Improve the duration parser | Benedikt Peetz | 3 days |
| | | | | | | | | The previous parser was very brittle, it failed for (valid) outputs like `1d 10h 30m` (as it only expected two number unit pairs). On top of that, extending it was failure prone (as proven by the roundtrip failure in combination with the `d` unit). | ||
* | fix(yt/version): Use yt_dlp's native python version imply | Benedikt Peetz | 4 days |
| | | | | This is just cleaner, compared to running `yt-dlp --version` as command. | ||
* | build(treewide): Update | Benedikt Peetz | 4 days |
| | |||
* | refactor(yt): Move to `crates/yt` | Benedikt Peetz | 4 days |
| | | | | Having one crate outside the `crates` directory is just weird. | ||
* | feat({yt_dlp,yt}): Migrate from pyo3 to rustpython | Benedikt Peetz | 4 days |
| | | | | | | | | That allows us to avoid cpython's GIL and gives us full ability to leverage async/concurrent code to speed up python operations. I have also taken the opportunity to change the `InfoJson` struct to an untyped json value, as that is what it actually is. | ||
* | chore(yt_dlp/wrappers/info_json): Add additional missing field | Benedikt Peetz | 2025-03-21 |
| | |||
* | refactor(yt_dlp): Remove the unneeded `async` from the public functions | Benedikt Peetz | 2025-03-21 |
| | |||
* | chore(treewide): Migrate to rust edition 2024 | Benedikt Peetz | 2025-03-21 |
| | | | | | Even though the diff in the libmpv2 crate is quite big, it really only added `unsafe` blocks to the `unsafe` functions. | ||
* | build(treewide): Update | Benedikt Peetz | 2025-03-21 |
| | |||
* | chore(treewide): Add/Update the license headers | Benedikt Peetz | 2025-02-22 |
| | |||
* | fix(crates/libmpv2/mpv): Log the setting of properties | Benedikt Peetz | 2025-02-21 |
| | |||
* | chore(crates/yt_dlp/wrappers/info_json): Add further fields | Benedikt Peetz | 2025-02-21 |
| | |||
* | chore(crates/libmpv2): Make `cargo clippy` happy | Benedikt Peetz | 2025-02-21 |
| | |||
* | style(treewide): Re-format | Benedikt Peetz | 2025-02-16 |
| | |||
* | build(rustfmt.toml): Add | Benedikt Peetz | 2025-02-16 |
| | |||
* | fix(crates/termsize): Remove all of `clippy`'s warnings | Benedikt Peetz | 2025-02-16 |
| | |||
* | refactor(crates/fmt): Init forked `uu_fmt` library | Benedikt Peetz | 2025-02-16 |
| | |||
* | chore(crates/termsize): Vendor | Benedikt Peetz | 2025-02-16 |
| | |||
* | fix(crates/yt_dlp/wrappers/info_json): Serialize the `InfoType`s with their ↵ | Benedikt Peetz | 2025-02-16 |
| | | | | correct name | ||
* | fix(crates/yt_dlp/wrappers/info_json): Don't serialize `None` values | Benedikt Peetz | 2025-02-16 |
| | | | | This keeps the jsons, which we internally parse, shorter. | ||
* | feat(crates/yt_dlp/lib): Wrap `process_ie_result` function | Benedikt Peetz | 2025-02-16 |
| | |||
* | fix(crates/yt_dlp/lib): Actually resolve the `entries` generator object | Benedikt Peetz | 2025-02-16 |
| | | | | Previously, we just ignored it. | ||
* | fix(crates/yt_dlp/lib): Swallow all error logs from yt_dlp | Benedikt Peetz | 2025-02-16 |
| | | | | | | These are already returned as `PythonError`s and thus often printed twice. As such, removing the python print gives the consumer more liberty of how to handle the error. | ||
* | fix(crates/yt_dlp/progress_hook): Print the progress to stderr | Benedikt Peetz | 2025-02-16 |
| | |||
* | fix(crates/yt_dlp/error::PythonError): Add the python type as `kind` | Benedikt Peetz | 2025-02-16 |
| | |||
* | fix(crates/libmpv2/Mpv::command): Correctly escape arguments | Benedikt Peetz | 2025-02-14 |
| | | | | | This allows us to avoid all these ad-hoc command escaping `format!` invocations. | ||
* | chore(crates/yt_dlp/wrappers/info_json): Add further fields | Benedikt Peetz | 2025-02-14 |
| | |||
* | test(crates/yt_dlp): Ignore tests that hang forever | Benedikt Peetz | 2025-02-14 |
| | |||
* | fix(crates/yt_dlp): Actually return errors instead of panicing | Benedikt Peetz | 2025-02-14 |
| | |||
* | fix(crates/yt_dlp): Avoid printing the file extension in the progress display | Benedikt Peetz | 2025-02-14 |
| | | | | The file extension should not be relevant for a user. | ||
* | fix(crates/libmpv2): Improve the error message for the `RawError` | Benedikt Peetz | 2025-02-14 |
| | | | | | Additionally, this commits migrates the error away from `thiserror`, simply because the crate is not needed at this scale. | ||
* | build(treewide): Update | Benedikt Peetz | 2025-02-14 |
| | |||
* | fix(yt_dlp/wrappers/info_json): Add further fields to `RequestedDownloads` | Benedikt Peetz | 2024-12-14 |
| | |||
* | build(treewide): Update | Benedikt Peetz | 2024-12-14 |
| | |||
* | fix(yt_dlp/wrappers/info_json): Add missing fields to `Subtitle` | Benedikt Peetz | 2024-12-14 |
| | |||
* | fix(yt_dlp/wrappers/info_json): Treat `Extractor` and `ExtractorKey` as Strings | Benedikt Peetz | 2024-12-14 |
| | | | | | There are too many possible extractors to mandate hard-coding them in a enumeration. | ||
* | build(treewide): Update dependencies | Benedikt Peetz | 2024-11-16 |
| |