upwork-wlroots-bridge 0.1.4

Implementation for Wlroots (Sway, Wayfire, Hikari, River, etc.) of Gnome Screenshot and Idle DBUS Server, which Upwork uses to capture the screen as proof of work.
Documentation
use std::{
    sync::{Arc, Mutex},
    time::Instant,
};

use clap::Parser;
use tokio::task;
use upwork_wlroots_bridge::{idle::Idle, opts::Opts, screenshot::Screenshot};
use zbus::{ConnectionBuilder, Result};

#[tokio::main()]
async fn main() -> Result<()> {
    let screenshot = Screenshot {
        opts: Opts::parse(),
    };

    let _ = ConnectionBuilder::session()?
        .name("org.gnome.Shell.Screenshot")?
        .serve_at("/org/gnome/Shell/Screenshot", screenshot)?
        .build()
        .await?;

    let last_active = Arc::new(Mutex::new(Instant::now()));

    task::spawn(Idle::start(last_active.clone()));

    let idle = Idle {
        opts: Opts::parse(),
        last_active,
    };

    let _ = ConnectionBuilder::session()?
        .name("org.gnome.Mutter.IdleMonitor")?
        .serve_at("/org/gnome/Mutter/IdleMonitor/Core", idle)?
        .build()
        .await?;

    println!("DBUS Server initialized successfully!");

    loop {
        std::future::pending::<()>().await;
    }
}