Merge branch 'tootube2' into 'master'

Moar correction/tweak

See merge request veretcle/tootube!3
This commit is contained in:
VC
2023-10-04 14:44:33 +00:00
6 changed files with 120 additions and 9 deletions

88
Cargo.lock generated
View File

@@ -17,6 +17,15 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "aho-corasick"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab"
dependencies = [
"memchr",
]
[[package]]
name = "anstream"
version = "0.6.1"
@@ -189,6 +198,19 @@ dependencies = [
"cfg-if",
]
[[package]]
name = "env_logger"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
dependencies = [
"humantime",
"is-terminal",
"log",
"regex",
"termcolor",
]
[[package]]
name = "errno"
version = "0.3.3"
@@ -365,6 +387,12 @@ version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "humantime"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]]
name = "hyper"
version = "0.14.27"
@@ -428,6 +456,17 @@ version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
[[package]]
name = "is-terminal"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
dependencies = [
"hermit-abi",
"rustix",
"windows-sys",
]
[[package]]
name = "itoa"
version = "1.0.9"
@@ -637,6 +676,35 @@ dependencies = [
"bitflags 1.3.2",
]
[[package]]
name = "regex"
version = "1.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff"
dependencies = [
"aho-corasick",
"memchr",
"regex-automata",
"regex-syntax",
]
[[package]]
name = "regex-automata"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
[[package]]
name = "reqwest"
version = "0.11.20"
@@ -833,6 +901,15 @@ dependencies = [
"windows-sys",
]
[[package]]
name = "termcolor"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64"
dependencies = [
"winapi-util",
]
[[package]]
name = "tinyvec"
version = "1.6.0"
@@ -902,6 +979,8 @@ name = "tootube"
version = "0.1.0"
dependencies = [
"clap",
"env_logger",
"log",
"reqwest",
"serde",
"toml",
@@ -1090,6 +1169,15 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
dependencies = [
"winapi",
]
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"

View File

@@ -11,6 +11,8 @@ reqwest = { version = "^0.11", features = ["blocking", "json"] }
clap = "^4"
serde = { version = "1.0", features = ["derive"] }
toml = "^0.5"
log = "^0.4"
env_logger = "^0.10"
[profile.release]
strip = true

14
LICENSE Normal file
View File

@@ -0,0 +1,14 @@
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.

View File

@@ -64,10 +64,10 @@ pub fn run(config: Config) {
let local_path = dl_video(&dl_url)
.unwrap_or_else(|e| panic!("Cannot download video at URL {}: {}", dl_url, e));
let resumable_upload_id = create_resumable_upload(&config.youtube, &latest_vid)
let resumable_upload_url = create_resumable_upload(&config.youtube, &latest_vid)
.unwrap_or_else(|e| panic!("Cannot retrieve the uploads resumable id: {e}"));
upload_video(&local_path, &resumable_upload_id, &config.youtube)
upload_video(&local_path, &resumable_upload_url, &config.youtube)
.unwrap_or_else(|e| panic!("Cannot resume upload!: {e}"));
remove_file(&local_path).unwrap_or_else(|e| panic!("Cannot delete file {}: {}", local_path, e));

View File

@@ -21,5 +21,7 @@ fn main() {
let config = parse_toml(matches.get_one::<String>("config").unwrap());
env_logger::init();
run(config);
}

View File

@@ -1,6 +1,6 @@
use crate::{config::YoutubeConfig, error::TootubeError, peertube::PeerTubeVideo};
use serde::{Deserialize, Serialize};
use std::{error::Error, sync::Mutex};
use std::{error::Error, fs::File, sync::Mutex};
static ACCESS_TOKEN: Mutex<String> = Mutex::new(String::new());
@@ -136,7 +136,7 @@ pub fn create_resumable_upload(
if res.status().is_success() {
Ok(res
.headers()
.get("x-guploader-uploadid")
.get("location")
.ok_or("Cannot find suitable header")?
.to_str()?
.to_string())
@@ -147,17 +147,22 @@ pub fn create_resumable_upload(
pub fn upload_video(
f_path: &str,
r_id: &str,
r_url: &str,
config: &YoutubeConfig,
) -> Result<(), Box<dyn Error>> {
// Get access token
let access_token = refresh_token(config)?;
// Create client
let client = reqwest::blocking::Client::new();
let res = client.put(format!("https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet%2Cstatus&upload_id={}", r_id))
.header("Authorization", format!("Bearer {}", access_token))
.body(f_path.to_string())
.send()?;
let file = File::open(f_path)?;
let res = client
.put(r_url)
.header("Authorization", format!("Bearer {}", access_token))
.body(file)
.send()?;
if res.status().is_success() {
Ok(())