about summary refs log tree commit diff stats
path: root/yt/src/description/mod.rs
blob: 527fa8e2878a6a54a27310a67684519b2f6fa0e7 (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
// 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 = {
        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",
            );

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

    display_fmt_and_less(description).await?;

    Ok(())
}