saves to downloadmode correctly
This commit is contained in:
parent
bc6b5cba34
commit
8417969b9d
@ -98,10 +98,11 @@ impl Configuration {
|
|||||||
let config_dir = project_dirs.config_dir();
|
let config_dir = project_dirs.config_dir();
|
||||||
let cache_dir = project_dirs.cache_dir().to_path_buf();
|
let cache_dir = project_dirs.cache_dir().to_path_buf();
|
||||||
let data_dir = project_dirs.data_local_dir().to_path_buf();
|
let data_dir = project_dirs.data_local_dir().to_path_buf();
|
||||||
let _ = [&config_dir, &cache_dir.as_path(), &data_dir.as_path()]
|
for dir in [&config_dir, &cache_dir.as_path(), &data_dir.as_path()].iter() {
|
||||||
.iter()
|
if !dir.exists() {
|
||||||
.filter(|x| !x.exists())
|
let _ = fs::create_dir_all(dir);
|
||||||
.map(fs::create_dir_all);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Config setup
|
// Config setup
|
||||||
let config_file_path = config_dir.join(JSON_CONFIG_FILENAME).to_path_buf();
|
let config_file_path = config_dir.join(JSON_CONFIG_FILENAME).to_path_buf();
|
||||||
@ -139,7 +140,7 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_datafile_ugly(&self, data_entry: DataEntry) {
|
pub fn push_datafile_ugly(&self, data_entry: DataEntry) {
|
||||||
unsafe { get_mut_ref(&self.datafile_content) }.push(data_entry);
|
unsafe { get_mut_ref(&self.datafile_content) }.push(data_entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ mod m3u8;
|
|||||||
mod parser;
|
mod parser;
|
||||||
use std::io::{stdin, stdout, Stdin, StdoutLock, Write};
|
use std::io::{stdin, stdout, Stdin, StdoutLock, Write};
|
||||||
|
|
||||||
pub use m3u8::M3u8;
|
pub use m3u8::{DataEntry, M3u8};
|
||||||
pub use parser::Parser;
|
pub use parser::Parser;
|
||||||
mod config;
|
mod config;
|
||||||
pub use config::Configuration;
|
pub use config::Configuration;
|
||||||
|
@ -2,7 +2,7 @@ use colored::Colorize;
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::{fmt::Display, ops::Deref};
|
use std::{fmt::Display, ops::Deref};
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize, Clone, Hash)]
|
||||||
pub struct M3u8 {
|
pub struct M3u8 {
|
||||||
pub tvg_id: String,
|
pub tvg_id: String,
|
||||||
pub tvg_name: String,
|
pub tvg_name: String,
|
||||||
@ -25,7 +25,7 @@ impl Display for M3u8 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize, Clone, Hash)]
|
||||||
pub struct DataEntry {
|
pub struct DataEntry {
|
||||||
m3u8: M3u8,
|
m3u8: M3u8,
|
||||||
pub path: String,
|
pub path: String,
|
||||||
|
64
src/main.rs
64
src/main.rs
@ -3,7 +3,9 @@ use std::process::Command;
|
|||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
use colored::Colorize;
|
use colored::Colorize;
|
||||||
use ilovetv::{download_with_progress, get_mut_ref, Configuration, M3u8, Parser, Readline};
|
use ilovetv::{
|
||||||
|
download_with_progress, get_mut_ref, Configuration, DataEntry, M3u8, Parser, Readline,
|
||||||
|
};
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
@ -125,9 +127,32 @@ async fn main() {
|
|||||||
}
|
}
|
||||||
// Downloadmode
|
// Downloadmode
|
||||||
"d" => {
|
"d" => {
|
||||||
let to_download =
|
let download_selections =
|
||||||
ask_which_to_download(&mut readline, &search_result.as_ref().unwrap());
|
ask_which_to_download(&mut readline, &search_result.as_ref().unwrap());
|
||||||
download_m3u8(&to_download).await;
|
|
||||||
|
for to_download in download_selections.iter() {
|
||||||
|
download_m3u8(to_download, None).await;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Save to offlinemode
|
||||||
|
"o" => {
|
||||||
|
let download_selections =
|
||||||
|
ask_which_to_download(&mut readline, &search_result.as_ref().unwrap());
|
||||||
|
|
||||||
|
for to_download in download_selections.iter() {
|
||||||
|
let path = config.data_dir.join(&to_download.name);
|
||||||
|
let path = path.to_string_lossy().to_string();
|
||||||
|
download_m3u8(to_download, Some(&path)).await;
|
||||||
|
let data_entry = DataEntry::new((*to_download).clone(), path);
|
||||||
|
config.push_datafile_ugly(data_entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Err(e) = config.write_datafile() {
|
||||||
|
println!(
|
||||||
|
"Failed to information about downloaded entries for offline use {:?}",
|
||||||
|
e
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
@ -186,20 +211,25 @@ fn ask_which_to_download<'a>(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn download_m3u8(files_to_download: &Vec<&M3u8>) {
|
async fn download_m3u8(file_to_download: &M3u8, path: Option<&str>) {
|
||||||
for m3u8 in files_to_download.iter() {
|
let file_ending_place = file_to_download.link.rfind(".").unwrap();
|
||||||
let file_ending_place = m3u8.link.rfind(".").unwrap();
|
let potential_file_ending = &file_to_download.link[file_ending_place..];
|
||||||
let potential_file_ending = &m3u8.link[file_ending_place..];
|
let file_ending = if potential_file_ending.len() > 6 {
|
||||||
let file_ending = if potential_file_ending.len() > 6 {
|
".mkv"
|
||||||
".mkv"
|
} else {
|
||||||
} else {
|
potential_file_ending
|
||||||
potential_file_ending
|
};
|
||||||
};
|
let file_name = format!("{}{}", file_to_download.name, file_ending);
|
||||||
let file_name = format!("{}{}", m3u8.name, file_ending);
|
println!("Downloading {}", &file_name);
|
||||||
println!("Downloading {}", &file_name);
|
let path = if let Some(path) = path {
|
||||||
if let Err(e) = download_with_progress(&m3u8.link, Some(&file_name)).await {
|
format!("{}{}", path, file_ending)
|
||||||
eprintln!("Failed to download {}, {:?}", &file_name, e);
|
} else {
|
||||||
}
|
file_name.clone()
|
||||||
|
};
|
||||||
|
println!("{}", &path);
|
||||||
|
|
||||||
|
if let Err(e) = download_with_progress(&file_to_download.link, Some(&path)).await {
|
||||||
|
eprintln!("Failed to download {}, {:?}", &file_name, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user