about summary refs log tree commit diff stats
path: root/yt/src/description/mod.rs
blob: 10f0e0c5ae0636059576063deebc1738d61a42c8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// 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 crate::{
    comments::output::display_fmt_and_less,
    storage::video_database::{
        getters::{get_currently_playing_video, get_video_info_json},
        Video,
    },
    unreachable::Unreachable,
    App,
};

use anyhow::{bail, Result};
use yt_dlp::wrapper::info_json::InfoJson;

pub async fn description(app: &App) -> Result<()> {
    let description = get(app).await?;
    display_fmt_and_less(description).await?;

    Ok(())
}

pub async fn get(app: &App) -> Result<String> {
    let currently_playing_video: Video =
        if let Some(video) = get_currently_playing_video(app).await? {
            video
        } else {
            bail!("Could not find a currently playing video!");
        };

    let info_json: InfoJson = get_video_info_json(&currently_playing_video)
        .await?
        .unreachable(
            "A currently *playing* must be cached. And thus the info.json should be available",
        );

    Ok(info_json
        .description
        .unwrap_or("<No description>".to_owned()))
}