Refactor access of current time

This commit is contained in:
Kiana Sheibani 2023-12-01 18:32:32 -05:00
parent 00d0195595
commit 504184e69b
Signed by: toki
GPG key ID: 6CB106C25E86A9F7
4 changed files with 24 additions and 13 deletions

View file

@ -1,10 +1,8 @@
use crate::error;
use crate::queries::*; use crate::queries::*;
use sqlite::*; use sqlite::*;
use std::fs::{self, OpenOptions}; use std::fs::{self, OpenOptions};
use std::io; use std::io;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::time::SystemTime;
pub struct DatasetMetadata { pub struct DatasetMetadata {
pub last_sync: Timestamp, pub last_sync: Timestamp,
@ -239,18 +237,17 @@ pub fn get_metadata(
.and_then(Result::ok)) .and_then(Result::ok))
} }
pub fn update_last_sync(connection: &Connection, dataset: &str) -> sqlite::Result<()> { pub fn update_last_sync(
connection: &Connection,
dataset: &str,
current_time: Timestamp,
) -> sqlite::Result<()> {
let query = "UPDATE datasets SET last_sync = :sync WHERE name = :dataset"; let query = "UPDATE datasets SET last_sync = :sync WHERE name = :dataset";
let current_time = SystemTime::now()
.duration_since(SystemTime::UNIX_EPOCH)
.unwrap_or_else(|_| error("System time is before the Unix epoch (1970)!", 2))
.as_secs();
connection connection
.prepare(query)? .prepare(query)?
.into_iter() .into_iter()
.bind((":sync", current_time as i64))? .bind((":sync", current_time.0 as i64))?
.bind((":dataset", dataset))? .bind((":dataset", dataset))?
.try_for_each(|x| x.map(|_| ())) .try_for_each(|x| x.map(|_| ()))
} }

View file

@ -170,7 +170,7 @@ fn dataset_list() {
print!(" - \x1b[33mRun 'startrnr sync' to update!\x1b[0m"); print!(" - \x1b[33mRun 'startrnr sync' to update!\x1b[0m");
} else { } else {
print!( print!(
" - \x1b[33mRun 'startrnr sync \"{}\"' to update!\x1b[0m", " - \x1b[33mRun 'startrnr sync {:?}' to update!\x1b[0m",
name name
); );
} }
@ -529,15 +529,18 @@ fn sync(datasets: Vec<String>, all: bool, auth_token: Option<String>) {
datasets datasets
}; };
let current_time = current_time();
for dataset in datasets { for dataset in datasets {
let dataset_config = get_metadata(&connection, &dataset) let dataset_config = get_metadata(&connection, &dataset)
.expect("Error communicating with SQLite") .expect("Error communicating with SQLite")
.unwrap_or_else(|| error(&format!("Dataset {} does not exist!", dataset), 1)); .unwrap_or_else(|| error(&format!("Dataset {} does not exist!", dataset), 1));
sync_dataset(&connection, &dataset, dataset_config, &auth) sync_dataset(&connection, &dataset, dataset_config, current_time, &auth)
.expect("Error communicating with SQLite"); .expect("Error communicating with SQLite");
// .unwrap_or_else(|_| error("Error communicating with SQLite", 2)); // .unwrap_or_else(|_| error("Error communicating with SQLite", 2));
update_last_sync(&connection, &dataset).expect("Error communicating with SQLite"); update_last_sync(&connection, &dataset, current_time)
.expect("Error communicating with SQLite");
} }
} }

View file

@ -289,6 +289,7 @@ pub fn sync_dataset(
connection: &Connection, connection: &Connection,
dataset: &str, dataset: &str,
metadata: DatasetMetadata, metadata: DatasetMetadata,
current_time: Timestamp,
auth: &str, auth: &str,
) -> sqlite::Result<()> { ) -> sqlite::Result<()> {
let events = get_tournament_events(&metadata, auth) let events = get_tournament_events(&metadata, auth)

View file

@ -1,9 +1,10 @@
use sqlite::*; use sqlite::*;
use std::io::{self, Write}; use std::io::{self, Write};
use std::process::exit; use std::process::exit;
use std::time::SystemTime;
use crate::database::*; use crate::database::*;
use crate::queries::{PlayerData, PlayerId}; use crate::queries::{PlayerData, PlayerId, Timestamp};
pub const SECS_IN_HR: u64 = 3600; pub const SECS_IN_HR: u64 = 3600;
pub const SECS_IN_DAY: u64 = SECS_IN_HR * 24; pub const SECS_IN_DAY: u64 = SECS_IN_HR * 24;
@ -19,6 +20,15 @@ pub fn issue(msg: &str, code: i32) -> ! {
exit(code) exit(code)
} }
pub fn current_time() -> Timestamp {
Timestamp(
SystemTime::now()
.duration_since(SystemTime::UNIX_EPOCH)
.unwrap_or_else(|_| error("System time is before the Unix epoch (1970)!", 2))
.as_secs(),
)
}
pub fn read_string() -> String { pub fn read_string() -> String {
let mut line = String::new(); let mut line = String::new();
io::stdout() io::stdout()