// yt - A fully featured command line YouTube client // // Copyright (C) 2024 Benedikt Peetz <benedikt.peetz@b-peetz.de> // 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 <https://www.gnu.org/licenses/gpl-3.0.txt>. use anyhow::Result; use crate::{ app::App, storage::{ subscriptions::get_subscriptions, video_database::{getters::get_videos, Video, VideoStatus}, }, }; macro_rules! get { ($videos:expr, $status:ident) => { $videos .iter() .filter(|vid| vid.status == VideoStatus::$status) .collect::<Vec<&Video>>() }; (@changing $videos:expr, $status:ident) => { $videos .iter() .filter(|vid| vid.status == VideoStatus::$status && vid.status_change) .collect::<Vec<&Video>>() }; } 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)).len(); let watch_videos_len = (get!(all_videos, Watch)).len(); let cached_videos_len = (get!(all_videos, Cached)).len(); let watched_videos_len = (get!(all_videos, Watched)).len(); let drop_videos_len = (get!(all_videos, Drop)).len(); let dropped_videos_len = (get!(all_videos, Dropped)).len(); // changing let picked_videos_changing = (get!(@changing all_videos, Pick)).len(); let watch_videos_changing = (get!(@changing all_videos, Watch)).len(); let cached_videos_changing = (get!(@changing all_videos, Cached)).len(); let watched_videos_changing = (get!(@changing all_videos, Watched)).len(); let drop_videos_changing = (get!(@changing all_videos, Drop)).len(); let dropped_videos_changing = (get!(@changing all_videos, Dropped)).len(); let subscriptions = get_subscriptions(&app).await?; let subscriptions_len = subscriptions.0.len(); 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}" ); Ok(()) }