Skip to main content

mdd_soundcloud/driver/
soundcloud.rs

1use crate::domain::track::{Playlist, PlaylistMeta, PlaylistSource};
2use pyo3::prelude::*;
3use pyo3::types::PyModule;
4use std::time::SystemTime;
5
6#[derive(Debug)]
7pub struct SoundcloudDriver {}
8
9impl SoundcloudDriver {
10    pub fn sum(x: i32, y: i32) -> PyResult<i32> {
11        Python::with_gil(|py| {
12            let builtins = PyModule::import(py, "builtins")?;
13            let total: i32 = builtins.call1("sum", (vec![x, y],))?.extract()?;
14            Ok(total)
15        })
16    }
17
18    pub fn get_playlist(url: &str) -> PyResult<()> {
19        Python::with_gil(|py| {
20            let activators = PyModule::from_code(
21                py,
22                r#"
23                    from sclib.asyncio import SoundcloudAPI, Track, Playlist
24
25                    def get_playlist(url):
26                        api = SoundcloudAPI()
27                        playlist = await api.resolve('url')
28                        return playlist
29
30                        "#,
31                "activators.py",
32                "activators",
33            )?;
34
35            let py_playlist: &PyAny = activators.call1("get_playlist", (url,))?.extract()?;
36            parse_playlist(py_playlist);
37            Ok(())
38        })
39    }
40}
41
42fn parse_playlist<'a>(_py_playlist: &'a PyAny) -> Playlist {
43    let meta = PlaylistMeta {
44        name: String::from("test"),
45        playlist_source: PlaylistSource::Soundcloud,
46        timestamp: SystemTime::now(),
47    };
48    let tracks = vec![];
49    let playlist = Playlist { meta, tracks };
50    playlist
51}