Merge video_quality to types + prevent downloader from throwing warnings while im working in it + add todos + tweak the about and settings windows
/ Build Release Binary (ubuntu-latest) (push) Successful in 1m42s
/ Build Release Binary (windows-latest) (push) Successful in 5m14s

This commit is contained in:
2026-09-17 03:55:27 -04:00
parent 1e13df0d6f
commit 0009db0ea9
6 changed files with 58 additions and 41 deletions
+2 -2
View File
@@ -1,6 +1,5 @@
use crate::args::ArgsConfig;
use crate::types::{Playlist, Video};
use crate::video_quality::VideoDownloadQuality;
use crate::types::{Playlist, Video, VideoDownloadQuality};
use eframe::egui::{Context, Ui};
use eframe::{CreationContext, Frame, Storage};
use serde::{Deserialize, Serialize};
@@ -18,6 +17,7 @@ pub struct AppSettings {
pub(crate) use_firefox_cookies: bool,
pub(crate) use_chrome_cookies: bool,
pub(crate) save_thumbnails: bool,
pub(crate) reencode_videos: bool,
pub(crate) video_download_quality: VideoDownloadQuality,
}
+12
View File
@@ -1,3 +1,7 @@
// TODO: Remove once downloader is done
#![allow(dead_code)]
#![allow(unused)]
use crate::app::Application;
use crate::layer::Layer;
use crate::types::{Playlist, Video};
@@ -11,6 +15,7 @@ use yt_dlp::client::LibraryInstaller;
pub(crate) struct Downloader {
video_queue: Vec<Video>,
playlists_queue: Vec<Playlist>,
added_queue: Vec<String>,
yt_downloader: Option<yt_dlp::Downloader>,
tokio_handle: Handle,
@@ -22,12 +27,19 @@ pub(crate) struct Downloader {
rejected_ffmpeg_install: bool,
}
// TODO: Create a queue manager
// TODO: Create task to download videos
// TODO: Create task to process playlists
// TODO: Create task to process added urls
// TODO: Create function to recreate the yt_dlp::Downloader
impl Downloader {
pub fn new() -> Self {
let yt_downloader = None;
Self {
video_queue: Vec::new(),
playlists_queue: Vec::new(),
added_queue: Vec::new(),
yt_downloader,
tokio_handle: Handle::current(),
yt_dlp_installed: false,
-1
View File
@@ -11,7 +11,6 @@ mod layer;
mod logging;
mod top_bar_layer;
mod types;
mod video_quality;
#[tokio::main]
async fn main() {
+9 -1
View File
@@ -1,6 +1,6 @@
use crate::app::Application;
use crate::layer::Layer;
use crate::video_quality::VideoDownloadQuality;
use crate::types::VideoDownloadQuality;
use eframe::egui::Ui;
use eframe::{Frame, egui};
use tracing::warn;
@@ -39,6 +39,8 @@ impl Layer for TopBarLayer {
if self.show_settings_window {
egui::Window::new("Settings")
.open(&mut self.show_settings_window)
.collapsible(false)
.resizable(false)
.show(ui, |ui: &mut Ui| {
if ui
.checkbox(
@@ -63,6 +65,10 @@ impl Layer for TopBarLayer {
}
};
ui.checkbox(&mut application.settings.save_thumbnails, "Save thumbnails");
ui.checkbox(
&mut application.settings.reencode_videos,
"Re-encode videos",
);
ui.menu_button("Video download quality", |ui: &mut Ui| {
ui.radio_value(
&mut application.settings.video_download_quality,
@@ -96,6 +102,8 @@ impl Layer for TopBarLayer {
if self.show_about_window {
egui::Window::new("About")
.open(&mut self.show_about_window)
.collapsible(false)
.resizable(false)
.show(ui, |ui: &mut Ui| {
ui.heading("yt-offline");
ui.label("A simple unified offline YouTube downloader + viewer");
+35 -1
View File
@@ -1,5 +1,5 @@
use crate::video_quality::VideoDownloadQuality;
use serde::{Deserialize, Serialize};
use yt_dlp::cache::VideoQuality;
#[derive(Serialize, Deserialize, Default)]
pub(crate) struct Video {
@@ -29,3 +29,37 @@ pub(crate) struct Playlist {
pub(crate) videos: Vec<Video>,
pub(crate) num_videos: usize,
}
#[derive(Deserialize, Serialize, PartialEq, Default)]
pub enum VideoDownloadQuality {
#[default]
Best,
High,
Medium,
Low,
Worst,
}
impl VideoDownloadQuality {
#[allow(dead_code)]
pub fn to_ytdlp(&self) -> VideoQuality {
match self {
VideoDownloadQuality::Best => VideoQuality::Best,
VideoDownloadQuality::High => VideoQuality::High,
VideoDownloadQuality::Medium => VideoQuality::Medium,
VideoDownloadQuality::Low => VideoQuality::Low,
VideoDownloadQuality::Worst => VideoQuality::Worst,
}
}
#[allow(dead_code)]
pub fn to_string(&self) -> String {
match self {
VideoDownloadQuality::Best => "best".to_string(),
VideoDownloadQuality::High => "high".to_string(),
VideoDownloadQuality::Medium => "medium".to_string(),
VideoDownloadQuality::Low => "low".to_string(),
VideoDownloadQuality::Worst => "worst".to_string(),
}
}
}
-36
View File
@@ -1,36 +0,0 @@
use serde::{Deserialize, Serialize};
use yt_dlp::model::VideoQuality;
#[derive(Deserialize, Serialize, PartialEq, Default)]
pub enum VideoDownloadQuality {
#[default]
Best,
High,
Medium,
Low,
Worst,
}
impl VideoDownloadQuality {
#[allow(dead_code)]
pub fn to_ytdlp(&self) -> VideoQuality {
match self {
VideoDownloadQuality::Best => VideoQuality::Best,
VideoDownloadQuality::High => VideoQuality::High,
VideoDownloadQuality::Medium => VideoQuality::Medium,
VideoDownloadQuality::Low => VideoQuality::Low,
VideoDownloadQuality::Worst => VideoQuality::Worst,
}
}
#[allow(dead_code)]
pub fn to_string(&self) -> String {
match self {
VideoDownloadQuality::Best => "best".to_string(),
VideoDownloadQuality::High => "high".to_string(),
VideoDownloadQuality::Medium => "medium".to_string(),
VideoDownloadQuality::Low => "low".to_string(),
VideoDownloadQuality::Worst => "worst".to_string(),
}
}
}