feat: started rudimentary gpo cli tool to manually sync devices

main
Jef Roosens 2025-03-17 11:31:58 +01:00
parent 0e543539cf
commit f4008e4b9c
No known key found for this signature in database
GPG Key ID: 21FD3D77D56BAF49
3 changed files with 56 additions and 0 deletions

45
src/cli/gpo.rs 100644
View File

@ -0,0 +1,45 @@
use clap::Subcommand;
use crate::db;
#[derive(Subcommand)]
pub enum Command {
/// Add devices of a specific user to the same sync group
Sync {
username: String,
devices: Vec<String>,
},
/// List the devices for the given user
Devices { username: String },
}
impl Command {
pub fn run(&self, config: &crate::config::Config) -> u8 {
let pool = db::initialize_db(config.data_dir.join(crate::DB_FILENAME), true).unwrap();
let repo = db::SqliteRepository::from(pool);
let store = crate::gpodder::GpodderRepository::new(repo);
match self {
Self::Sync { username, devices } => {
let user = store.get_user(&username).unwrap();
store
.update_device_sync_status(
&user,
vec![devices.iter().map(|s| s.as_ref()).collect()],
Vec::new(),
)
.unwrap();
}
Self::Devices { username } => {
let user = store.get_user(&username).unwrap();
let devices = store.devices_for_user(&user).unwrap();
for device in devices {
println!("{} ({} subscriptions)", device.id, device.subscriptions);
}
}
}
0
}
}

View File

@ -1,4 +1,5 @@
mod db;
mod gpo;
mod serve;
use std::path::PathBuf;
@ -49,6 +50,11 @@ pub enum Command {
Serve,
#[command(subcommand)]
Db(db::DbCommand),
/// Perform operations on the database through the Gpodder abstraction, allowing operations
/// identical to the ones performed by the API.
#[command(subcommand)]
Gpo(gpo::Command),
}
impl Cli {
@ -75,6 +81,7 @@ impl Cli {
match &self.cmd {
Command::Serve => serve::serve(&config),
Command::Db(cmd) => cmd.run(&config),
Command::Gpo(cmd) => cmd.run(&config),
}
}
}

View File

@ -34,6 +34,10 @@ impl GpodderRepository {
}
}
pub fn get_user(&self, username: &str) -> Result<models::User, AuthErr> {
self.store.get_user(username)?.ok_or(AuthErr::UnknownUser)
}
pub fn validate_credentials(
&self,
username: &str,