Compare commits

..

7 commits
1.1.1 ... main

Author SHA1 Message Date
87f401f5cf
Make clippy happy
Some checks failed
build-plugin / build (dev) (push) Has been cancelled
build-plugin / build (release) (push) Has been cancelled
2024-07-15 02:43:20 +03:00
caa7d4c5a7
Fix hash for rust-toolchain.toml
Some checks are pending
build-plugin / build (dev) (push) Waiting to run
build-plugin / build (release) (push) Waiting to run
2024-07-15 02:35:26 +03:00
dff668c760
Add build workflow 2024-07-15 02:34:04 +03:00
38b50ccf4d
Update Nix flake 2024-07-15 02:22:14 +03:00
216688e63e
Add Nix dev shell and direnv support 2024-05-24 15:48:51 +03:00
1eca609a2d
Add Cargo.lock 2023-09-04 23:14:47 +03:00
d104354966
Calm down clippy 2023-03-10 06:04:40 +03:00
15 changed files with 1196 additions and 25 deletions

1
.envrc Normal file
View file

@ -0,0 +1 @@
use flake

54
.github/workflows/build.yml vendored Normal file
View file

@ -0,0 +1,54 @@
name: build-plugin
on:
workflow_dispatch:
push:
branches: [ main ]
paths:
- "src/**"
- Cargo.lock
- rust-toolchain.toml
- flake.nix
- flake.lock
- shell.nix
pull_request:
branches: [ main ]
paths:
- "src/**"
- Cargo.lock
- rust-toolchain.toml
- flake.nix
- flake.lock
- shell.nix
env:
CARGO_TERM_COLOR: always
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
profile: [ "dev", "release" ]
env:
BUILD_NAME: ${{ matrix.profile == 'dev' && 'debug' || matrix.profile }}
steps:
- uses: actions/checkout@v4
- name: Install Nix
uses: nixbuild/nix-quick-install-action@v28
- name: Check
run: nix develop --command cargo clippy --profile ${{ matrix.profile }} -- -D warnings
- name: Build
run: nix develop --command cargo build --profile ${{ matrix.profile }}
- name: Upload build
uses: actions/upload-artifact@v4
with:
name: mpv-rpc_${{ env.BUILD_NAME }}
path: target/${{ env.BUILD_NAME }}/libmpv_rpc.so

2
.gitignore vendored
View file

@ -1,2 +1,2 @@
/target
/Cargo.lock
/.direnv

1005
Cargo.lock generated Normal file

File diff suppressed because it is too large Load diff

65
flake.lock Normal file
View file

@ -0,0 +1,65 @@
{
"nodes": {
"fenix": {
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"rust-analyzer-src": "rust-analyzer-src"
},
"locked": {
"lastModified": 1720938532,
"narHash": "sha256-Q2ldXS7ZUJWDqdF+GjgRQPlDfdM6NyJ1aw7xUdzjY+4=",
"owner": "nix-community",
"repo": "fenix",
"rev": "e761b522381d124fdc3ba20cecb2be2abec1d8cf",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "fenix",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1720955038,
"narHash": "sha256-GaliJqfFwyYxReFywxAa8orCO+EnDq2NK2F+5aSc8vo=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "aa247c0c90ecf4ae7a032c54fdc21b91ca274062",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "nixpkgs-unstable",
"type": "indirect"
}
},
"root": {
"inputs": {
"fenix": "fenix",
"nixpkgs": "nixpkgs"
}
},
"rust-analyzer-src": {
"flake": false,
"locked": {
"lastModified": 1720717809,
"narHash": "sha256-6I+fm+nTLF/iaj7ffiFGlSY7POmubwUaPA/Wq0Bm53M=",
"owner": "rust-lang",
"repo": "rust-analyzer",
"rev": "ffbc5ad993d5cd2f3b8bcf9a511165470944ab91",
"type": "github"
},
"original": {
"owner": "rust-lang",
"ref": "nightly",
"repo": "rust-analyzer",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

32
flake.nix Normal file
View file

@ -0,0 +1,32 @@
{
inputs = {
nixpkgs.url = "nixpkgs/nixpkgs-unstable";
fenix = {
url = "github:nix-community/fenix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, fenix }:
let
overlays = [ fenix.overlays.default ];
getPkgsFor = (system: import nixpkgs {
inherit system overlays;
});
forEachSystem = func: nixpkgs.lib.genAttrs [
"x86_64-linux"
"aarch64-linux"
"aarch64-darwin"
"x86_64-darwin"
] (system: func (getPkgsFor system));
in {
devShells = forEachSystem (pkgs: {
default = pkgs.callPackage ./shell.nix {};
});
};
}

4
rust-toolchain.toml Normal file
View file

@ -0,0 +1,4 @@
[toolchain]
channel = "stable"
profile = "default"
targets = ["x86_64-unknown-linux-gnu", "aarch64-unknown-linux-gnu"]

12
shell.nix Normal file
View file

@ -0,0 +1,12 @@
{ mkShell, fenix }:
let
toolchain = fenix.fromToolchainFile {
file = ./rust-toolchain.toml;
sha256 = "Ngiz76YP4HTY75GGdH2P+APE/DEIx2R/Dn+BwwOyzZU=";
};
in
mkShell {
packages = [ toolchain ];
}

View file

@ -265,7 +265,7 @@ impl MpvEventHandler for DiscordClient {
MpvEvent::FileLoaded(file_info) => self.set_presence(file_info),
MpvEvent::Seek(remaining_time) => self.set_timestamps(remaining_time),
MpvEvent::Play(remaining_time) => self.set_timestamps(remaining_time),
MpvEvent::Pause(_) => self.clear_timestamps(),
MpvEvent::Pause => self.clear_timestamps(),
MpvEvent::Buffering => self.clear_timestamps(),
MpvEvent::Toggle => self.toggle_activity(),
MpvEvent::Exit => self.close(),

View file

@ -17,7 +17,7 @@ fn get_track_cover_art(artist: &Option<String>, title: &Option<String>) -> Optio
if let Some(ref artist) = artist {
// Some artist fields might contain + characters
// Pointing at multiple artists
for part in artist.split("+") {
for part in artist.split('+') {
builder.and().artist(part);
}
}
@ -33,7 +33,7 @@ fn get_album_cover_art(album_artist: &Option<String>, album: &Option<String>) -
if let Some(ref album_artist) = album_artist {
// Some artist fields might contain + characters
// Pointing at multiple artists
for part in album_artist.split("+") {
for part in album_artist.split('+') {
builder.and().artist(part);
}
}
@ -47,7 +47,7 @@ fn get_cover_art_from_query(query: String) -> Option<String> {
Err(_) => return None
};
let release = match result.entities.get(0) {
let release = match result.entities.first() {
Some(group) => group,
None => return None
};

View file

@ -22,5 +22,5 @@ fn mpv_open_cplugin(handle: *mut mpv_handle) -> std::os::raw::c_int {
};
plugin.run();
return 0;
0
}

View file

@ -1,6 +1,8 @@
use std::env;
pub mod macros;
#[allow(unused_imports)]
pub use macros::{error, warning, info};
#[allow(dead_code)]
@ -49,19 +51,19 @@ impl Logger {
pub fn info(&self, message: &str) {
if self.log_level >= LogLevel::Info {
println!("[mpv-rpc (INFO)] {}", message);
println!("[mpv-rpc (INFO)] {message}");
}
}
pub fn warning(&self, message: &str) {
if self.log_level >= LogLevel::Warn {
println!("[mpv-rpc (WARN)] {}", message);
println!("[mpv-rpc (WARN)] {message}");
}
}
pub fn error(&self, message: &str) {
if self.log_level >= LogLevel::Error {
println!("[mpv-rpc (ERROR)] {}", message);
println!("[mpv-rpc (ERROR)] {message}");
}
}
}

View file

@ -25,7 +25,7 @@ impl MpvEventQueue {
Ok(new_self)
}
pub fn from_ptr<'a>(handle: *mut mpv_handle, logger: Rc<Logger>) -> Result<Self, &'static str> {
pub fn from_ptr(handle: *mut mpv_handle, logger: Rc<Logger>) -> Result<Self, &'static str> {
MpvEventQueue::new(Handle::from_ptr(handle), logger)
}
@ -42,8 +42,7 @@ impl MpvEventQueue {
pub fn next_event(&mut self) -> Option<MpvEvent> {
let event = self.mpv.wait_event(-1.0);
let mpv_event = self.convert_event(event);
mpv_event
self.convert_event(event)
}
pub fn handle_request(&self, request: MpvRequest) -> Result<(), &'static str> {
@ -112,7 +111,7 @@ impl MpvEventQueue {
let time = self.get_remaining_time();
match pause {
false => Some(MpvEvent::Play(time)),
true => Some(MpvEvent::Pause(time))
true => Some(MpvEvent::Pause)
}
}

View file

@ -17,7 +17,7 @@ pub enum MpvEvent {
Exit,
FileLoaded(FileInfo),
Play(i64),
Pause(i64),
Pause,
Seek(i64)
}
@ -30,5 +30,5 @@ pub trait MpvEventHandler {
}
pub trait MpvRequester {
fn next_request<'a>(&mut self) -> Option<MpvRequest>;
fn next_request(&mut self) -> Option<MpvRequest>;
}

View file

@ -48,10 +48,7 @@ impl RPCPlugin {
}
fn handle_event(&mut self, event: MpvEvent) -> bool {
let exit = match event {
MpvEvent::Exit => true,
_ => false
};
let exit = matches!(event, MpvEvent::Exit);
if let Err(e) = self.discord.handle_event(event) {
logging::error!(self.logger, "Failed to handle event: {e}");