Compare commits
9
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
551767f9f5 | ||
|
|
fa90cd3ce9 | ||
|
|
660261a9a5 | ||
|
|
3a74fd0230 | ||
|
|
2dbb1ea316 | ||
|
|
c902db2e90 | ||
|
|
83e5881768 | ||
|
|
8424b44dec | ||
|
|
33e49a8ca7 |
@@ -0,0 +1,42 @@
|
||||
name: CI
|
||||
|
||||
# Runs on the self-hosted host-mode runner on the desktop (label `arch`). The
|
||||
# gitbutter VPS only queues the job; all compile/test compute happens locally.
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
check:
|
||||
runs-on: arch
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Toolchain versions
|
||||
run: |
|
||||
rustc --version
|
||||
cargo --version
|
||||
cargo clippy --version
|
||||
cargo deny --version
|
||||
cargo audit --version
|
||||
|
||||
- name: Format check
|
||||
run: cargo fmt --all -- --check
|
||||
|
||||
- name: Clippy (all targets, warnings as errors)
|
||||
run: cargo clippy --all-targets -- -D warnings
|
||||
|
||||
- name: Tests
|
||||
run: cargo test --all-targets
|
||||
|
||||
- name: Doc tests
|
||||
run: cargo test --doc
|
||||
|
||||
- name: cargo-deny (advisories, bans, licenses, sources)
|
||||
run: cargo deny check
|
||||
|
||||
- name: cargo-audit
|
||||
run: cargo audit
|
||||
Generated
+4
-4
@@ -200,9 +200,9 @@ checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000"
|
||||
|
||||
[[package]]
|
||||
name = "anyhow"
|
||||
version = "1.0.102"
|
||||
version = "1.0.103"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
|
||||
checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3"
|
||||
|
||||
[[package]]
|
||||
name = "arbitrary"
|
||||
@@ -3682,9 +3682,9 @@ checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8"
|
||||
|
||||
[[package]]
|
||||
name = "memmap2"
|
||||
version = "0.9.10"
|
||||
version = "0.9.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3"
|
||||
checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
use std::process::Command;
|
||||
|
||||
fn main() {
|
||||
println!("cargo:rerun-if-changed=.git/HEAD");
|
||||
if let Ok(head) = std::fs::read_to_string(".git/HEAD") {
|
||||
if let Some(reference) = head.strip_prefix("ref: ") {
|
||||
println!("cargo:rerun-if-changed=.git/{}", reference.trim());
|
||||
}
|
||||
}
|
||||
|
||||
let short = Command::new("git")
|
||||
.args(["rev-parse", "--short=8", "HEAD"])
|
||||
.output()
|
||||
.ok()
|
||||
.filter(|output| output.status.success())
|
||||
.and_then(|output| String::from_utf8(output.stdout).ok())
|
||||
.map(|value| value.trim().to_string())
|
||||
.filter(|value| !value.is_empty())
|
||||
.unwrap_or_else(|| "unknown".to_string());
|
||||
|
||||
println!("cargo:rustc-env=PEERSPEAK_GIT_SHORT={short}");
|
||||
}
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
# Maintainer: mollusk <jitty+lc1iz0dc@protonmail.com>
|
||||
pkgname=peerspeak-git
|
||||
_pkgname=peerspeak
|
||||
pkgver=0.5.0.r0.g0000000
|
||||
pkgver=0.6.1.r310.g660261a
|
||||
pkgrel=1
|
||||
pkgdesc="Decentralized peer-to-peer voice chat (Rust/iroh/PipeWire/Opus/iced)"
|
||||
arch=('x86_64')
|
||||
|
||||
+16
-7
@@ -34,6 +34,17 @@ use tokio::sync::Mutex;
|
||||
|
||||
static UI_RX: OnceLock<Mutex<Option<tokio::sync::mpsc::Receiver<UiEvent>>>> = OnceLock::new();
|
||||
|
||||
const APP_VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||
const GIT_SHORT: &str = env!("PEERSPEAK_GIT_SHORT");
|
||||
|
||||
fn app_build_label() -> String {
|
||||
if GIT_SHORT == "unknown" {
|
||||
format!("PeerSpeak v{APP_VERSION}")
|
||||
} else {
|
||||
format!("PeerSpeak v{APP_VERSION} ({GIT_SHORT})")
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub enum Screen {
|
||||
Home,
|
||||
@@ -1100,7 +1111,7 @@ fn effective_background_bytes(
|
||||
}
|
||||
|
||||
pub fn run_gui() -> iced::Result {
|
||||
crate::log_msg(&format!("PeerSpeak v{} starting", env!("CARGO_PKG_VERSION")));
|
||||
crate::log_msg(&format!("{} starting", app_build_label()));
|
||||
// Restore the last window size (saved on close). Position is restored too,
|
||||
// but only on X11 — Wayland's xdg-shell gives clients no way to set their own
|
||||
// position, so we center there and leave placement to the compositor.
|
||||
@@ -3807,6 +3818,7 @@ fn connect_card(state: &AppState) -> Element<'_, AppMessage> {
|
||||
let subtitle = text("NAT-traversing full-mesh voice chat")
|
||||
.size(16)
|
||||
.color(color_subtext);
|
||||
let build_label = text(app_build_label()).size(11).color(color_subtext);
|
||||
|
||||
let nickname_input = column![
|
||||
text("Nickname").size(14).color(color_subtext),
|
||||
@@ -3862,6 +3874,7 @@ fn connect_card(state: &AppState) -> Element<'_, AppMessage> {
|
||||
column![
|
||||
logo,
|
||||
subtitle,
|
||||
build_label,
|
||||
vertical_space(20.0),
|
||||
nickname_input,
|
||||
vertical_space(16.0),
|
||||
@@ -5243,9 +5256,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
|
||||
}
|
||||
settings_nav = settings_nav
|
||||
.push(iced::widget::Space::new().height(iced::Length::Fill))
|
||||
.push(text(format!("PeerSpeak v{}", env!("CARGO_PKG_VERSION")))
|
||||
.size(11)
|
||||
.color(color_subtext));
|
||||
.push(text(app_build_label()).size(11).color(color_subtext));
|
||||
let settings_nav = container(settings_nav)
|
||||
.padding(12)
|
||||
.width(iced::Length::Fixed(220.0))
|
||||
@@ -5265,9 +5276,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
|
||||
vertical_space(10.0),
|
||||
settings_body,
|
||||
vertical_space(10.0),
|
||||
text(format!("PeerSpeak v{}", env!("CARGO_PKG_VERSION")))
|
||||
.size(11)
|
||||
.color(color_subtext),
|
||||
text(app_build_label()).size(11).color(color_subtext),
|
||||
]
|
||||
.spacing(8)
|
||||
.width(iced::Length::Fill),
|
||||
|
||||
+13
-3
@@ -380,7 +380,11 @@ impl MultitrackRecorder {
|
||||
let batch = CycleBatch {
|
||||
new_peers: pending.new_peers,
|
||||
mic_frame,
|
||||
mix_frame: if self.with_mix { pending.mix_frame } else { None },
|
||||
mix_frame: if self.with_mix {
|
||||
pending.mix_frame
|
||||
} else {
|
||||
None
|
||||
},
|
||||
peer_frames: pending.peer_frames,
|
||||
};
|
||||
match self.batch_tx.try_send(batch) {
|
||||
@@ -560,9 +564,15 @@ mod tests {
|
||||
assert_eq!(state.cycles_written, 3);
|
||||
assert_eq!(state.mic.samples.len(), 3 * frame);
|
||||
assert_eq!(state.mix.as_ref().unwrap().samples.len(), 3 * frame);
|
||||
assert_eq!(&state.mix.as_ref().unwrap().samples[2 * frame..], &[0, 0, 0]);
|
||||
assert_eq!(
|
||||
&state.mix.as_ref().unwrap().samples[2 * frame..],
|
||||
&[0, 0, 0]
|
||||
);
|
||||
assert_eq!(state.peers.get(&early).unwrap().samples.len(), 3 * frame);
|
||||
assert_eq!(&state.peers.get(&early).unwrap().samples[2 * frame..], &[2, 2, 2]);
|
||||
assert_eq!(
|
||||
&state.peers.get(&early).unwrap().samples[2 * frame..],
|
||||
&[2, 2, 2]
|
||||
);
|
||||
assert_eq!(
|
||||
state.peers.get(&late).unwrap().samples,
|
||||
vec![0, 0, 0, 0, 0, 0, 7, 7, 7],
|
||||
|
||||
Reference in New Issue
Block a user