Version 1.0.0
This commit is contained in:
parent
d1cacecb48
commit
72937872cd
5 changed files with 109 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
/target
|
||||||
|
/Cargo.lock
|
13
Cargo.toml
Normal file
13
Cargo.toml
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
[package]
|
||||||
|
name = "ff2mpv-rust"
|
||||||
|
version = "1.0.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
serde = { version = "1.0.152", features = ["derive"] }
|
||||||
|
serde_json = "1.0.93"
|
||||||
|
|
||||||
|
[profile.release-full]
|
||||||
|
inherits = "release"
|
||||||
|
strip = "symbols"
|
||||||
|
lto = "fat"
|
25
README.md
Normal file
25
README.md
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
# ff2mpv-rust
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Native messaging host for ff2mpv written in Rust.
|
||||||
|
|
||||||
|
This is a native compiled binary, so it runs much faster and doesn't require external dependencies by itself, unlike Python and Ruby scripts.
|
||||||
|
|
||||||
|
# What is this?
|
||||||
|
This is a script for hooking mpv and [ff2mpv](https://github.com/woodruffw/ff2mpv), that allows opening any video link in mpv straight from the browser.
|
||||||
|
|
||||||
|
# Contributing
|
||||||
|
|
||||||
|
All issues and pull requests are welcome! Feel free to open an issue if you've got an idea or a problem. You can open a pull request if you are able to implement it yourself.
|
||||||
|
|
||||||
|
---
|
||||||
|
<p align="center">
|
||||||
|
<sub><strong>
|
||||||
|
Made with ponies and love!
|
||||||
|
<br/>
|
||||||
|
GNU GPL © Ryze 2023
|
||||||
|
</strong></sub>
|
||||||
|
</p>
|
42
src/lib.rs
Normal file
42
src/lib.rs
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
use std::io::{self, Read, Write};
|
||||||
|
use serde::Deserialize;
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
pub struct MpvMessage {
|
||||||
|
pub url: String
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_mpv_message() -> Result<MpvMessage, String> {
|
||||||
|
let message = match get_browser_message() {
|
||||||
|
Ok(msg) => msg,
|
||||||
|
Err(e) => return Err(format!("IO Error: {}", e))
|
||||||
|
};
|
||||||
|
|
||||||
|
match serde_json::from_str(&message) {
|
||||||
|
Ok(msg) => Ok(msg),
|
||||||
|
Err(e) => Err(format!("JSON Error: {}", e))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_browser_message() -> io::Result<String> {
|
||||||
|
let mut stdin = io::stdin();
|
||||||
|
let mut buf: [u8; 4] = [0; 4];
|
||||||
|
stdin.read_exact(&mut buf)?;
|
||||||
|
|
||||||
|
let length = u32::from_ne_bytes(buf);
|
||||||
|
let mut reader = io::BufReader::new(stdin.take(length as u64));
|
||||||
|
|
||||||
|
let mut string = String::with_capacity(length as usize);
|
||||||
|
reader.read_to_string(&mut string)?;
|
||||||
|
Ok(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn send_browser_message(message: &str) -> io::Result<()> {
|
||||||
|
let length = (message.len() as u32).to_ne_bytes();
|
||||||
|
let message = message.as_bytes();
|
||||||
|
|
||||||
|
let mut stdout = io::stdout();
|
||||||
|
stdout.write(&length)?;
|
||||||
|
stdout.write(&message)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
27
src/main.rs
Normal file
27
src/main.rs
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
use std::process::{Command, self};
|
||||||
|
use ff2mpv_rust::{get_mpv_message, send_browser_message};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let message = match get_mpv_message() {
|
||||||
|
Ok(msg) => msg,
|
||||||
|
Err(e) => {
|
||||||
|
eprintln!("{}", e);
|
||||||
|
process::exit(-1)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let mpv = Command::new("mpv")
|
||||||
|
.arg(message.url)
|
||||||
|
.spawn();
|
||||||
|
|
||||||
|
if let Err(e) = mpv {
|
||||||
|
eprintln!("{}", e);
|
||||||
|
process::exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Err(e) = send_browser_message("ok") {
|
||||||
|
eprintln!("{}", e);
|
||||||
|
process::exit(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue