feat: started rudimentary gpo cli tool to manually sync devices
parent
0e543539cf
commit
f4008e4b9c
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue