// yt - A fully featured command line YouTube client // // Copyright (C) 2024 Benedikt Peetz // SPDX-License-Identifier: GPL-3.0-or-later // // This file is part of Yt. // // You should have received a copy of the License along with this program. // If not, see . use anyhow::{Context, Result}; use bytes::Bytes; use crate::{ app::App, download::Downloader, storage::{ subscriptions::get_subscriptions, video_database::{getters::get_videos, VideoStatus}, }, }; macro_rules! get { ($videos:expr, $status:ident) => { $videos .iter() .filter(|vid| vid.status == VideoStatus::$status) .count() }; (@changing $videos:expr, $status:ident) => { $videos .iter() .filter(|vid| vid.status == VideoStatus::$status && vid.status_change) .count() }; } pub async fn show(app: &App) -> Result<()> { let all_videos = get_videos( app, &[ VideoStatus::Pick, // VideoStatus::Watch, VideoStatus::Cached, VideoStatus::Watched, // VideoStatus::Drop, VideoStatus::Dropped, ], None, ) .await?; // lengths let picked_videos_len = get!(all_videos, Pick); let watch_videos_len = get!(all_videos, Watch); let cached_videos_len = get!(all_videos, Cached); let watched_videos_len = get!(all_videos, Watched); let drop_videos_len = get!(all_videos, Drop); let dropped_videos_len = get!(all_videos, Dropped); // changing let picked_videos_changing = get!(@changing all_videos, Pick); let watch_videos_changing = get!(@changing all_videos, Watch); let cached_videos_changing = get!(@changing all_videos, Cached); let watched_videos_changing = get!(@changing all_videos, Watched); let drop_videos_changing = get!(@changing all_videos, Drop); let dropped_videos_changing = get!(@changing all_videos, Dropped); let subscriptions = get_subscriptions(app).await?; let subscriptions_len = subscriptions.0.len(); let cache_usage_raw = Downloader::get_current_cache_allocation(app) .await .context("Failed to get current cache allocation")?; let cache_usage = Bytes::new(cache_usage_raw); println!( "\ Picked Videos: {picked_videos_len} ({picked_videos_changing} changing) Watch Videos: {watch_videos_len} ({watch_videos_changing} changing) Cached Videos: {cached_videos_len} ({cached_videos_changing} changing) Watched Videos: {watched_videos_len} ({watched_videos_changing} changing) Drop Videos: {drop_videos_len} ({drop_videos_changing} changing) Dropped Videos: {dropped_videos_len} ({dropped_videos_changing} changing) Subscriptions: {subscriptions_len} Cache usage: {cache_usage}" ); Ok(()) } pub fn config(app: &App) -> Result<()> { let config_str = toml::to_string(&app.config)?; print!("{}", config_str); Ok(()) }