fix(ui): handle being logged out gracefully (#2052)

* fix(ui): handle being logged out gracefully

* use settings.logged_in
This commit is contained in:
Ellie Huxtable 2024-05-28 16:28:09 +01:00 committed by GitHub
parent 1bb63d0f5a
commit b49c73de3e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 34 additions and 22 deletions

8
ui/backend/Cargo.lock generated
View File

@ -5249,9 +5249,9 @@ dependencies = [
[[package]] [[package]]
name = "time" name = "time"
version = "0.3.34" version = "0.3.36"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
dependencies = [ dependencies = [
"deranged", "deranged",
"itoa 1.0.11", "itoa 1.0.11",
@ -5272,9 +5272,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
[[package]] [[package]]
name = "time-macros" name = "time-macros"
version = "0.2.17" version = "0.2.18"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
dependencies = [ dependencies = [
"num-conv", "num-conv",
"time-core", "time-core",

View File

@ -19,10 +19,10 @@ use dotfiles::aliases::aliases;
#[derive(Debug, serde::Serialize)] #[derive(Debug, serde::Serialize)]
struct HomeInfo { struct HomeInfo {
pub username: String,
pub record_count: u64, pub record_count: u64,
pub history_count: u64, pub history_count: u64,
pub last_sync: String, pub username: Option<String>,
pub last_sync: Option<String>,
} }
#[tauri::command] #[tauri::command]
@ -88,6 +88,27 @@ async fn home_info() -> Result<HomeInfo, String> {
.await .await
.map_err(|e| e.to_string())?; .map_err(|e| e.to_string())?;
let session_path = settings.session_path.as_str();
let last_sync = Settings::last_sync()
.map_err(|e| e.to_string())?
.format(&Rfc3339)
.map_err(|e| e.to_string())?;
let record_count = sqlite_store.len_all().await.map_err(|e| e.to_string())?;
let history_count = sqlite_store
.len_tag(HISTORY_TAG)
.await
.map_err(|e| e.to_string())?;
let info = if settings.logged_in() {
HomeInfo {
username: None,
last_sync: None,
record_count,
history_count,
}
} else {
let client = atuin_client::api_client::Client::new( let client = atuin_client::api_client::Client::new(
&settings.sync_address, &settings.sync_address,
settings.session_token().map_err(|e|e.to_string())?.as_str(), settings.session_token().map_err(|e|e.to_string())?.as_str(),
@ -96,30 +117,11 @@ async fn home_info() -> Result<HomeInfo, String> {
) )
.map_err(|e| e.to_string())?; .map_err(|e| e.to_string())?;
let session_path = settings.session_path.as_str();
let last_sync = Settings::last_sync()
.map_err(|e| e.to_string())?
.format(&Rfc3339)
.map_err(|e| e.to_string())?;
let record_count = sqlite_store.len_all().await.map_err(|e| e.to_string())?;
let history_count = sqlite_store
.len_tag(HISTORY_TAG)
.await
.map_err(|e| e.to_string())?;
let info = if !PathBuf::from(session_path).exists() {
HomeInfo {
username: String::from(""),
last_sync: last_sync.to_string(),
record_count,
history_count,
}
} else {
let me = client.me().await.map_err(|e| e.to_string())?; let me = client.me().await.map_err(|e| e.to_string())?;
HomeInfo { HomeInfo {
username: me.username, username: Some(me.username),
last_sync: last_sync.to_string(), last_sync: Some(last_sync.to_string()),
record_count, record_count,
history_count, history_count,
} }

View File

@ -68,7 +68,10 @@ export default function Home() {
stats={[ stats={[
{ {
name: "Last Sync", name: "Last Sync",
stat: formatRelative(homeInfo.lastSyncTime, new Date()), stat:
(homeInfo.lastSyncTime &&
formatRelative(homeInfo.lastSyncTime, new Date())) ||
"Never",
}, },
{ {
name: "Total history records", name: "Total history records",

View File

@ -11,7 +11,7 @@ export const DefaultUser: User = {
export interface HomeInfo { export interface HomeInfo {
historyCount: number; historyCount: number;
recordCount: number; recordCount: number;
lastSyncTime: Date; lastSyncTime: Date | null;
} }
export const DefaultHomeInfo: HomeInfo = { export const DefaultHomeInfo: HomeInfo = {

View File

@ -77,7 +77,7 @@ export const useStore = create<AtuinState>()((set, get) => ({
homeInfo: { homeInfo: {
historyCount: res.history_count, historyCount: res.history_count,
recordCount: res.record_count, recordCount: res.record_count,
lastSyncTime: parseISO(res.last_sync), lastSyncTime: (res.last_sync && parseISO(res.last_sync)) || null,
}, },
}); });
}) })
@ -88,7 +88,14 @@ export const useStore = create<AtuinState>()((set, get) => ({
refreshUser: async () => { refreshUser: async () => {
let config = await settings(); let config = await settings();
let session = await sessionToken(); let session;
try {
session = await sessionToken();
} catch (e) {
console.log("Not logged in, so not refreshing user");
return;
}
let url = config.sync_address + "/api/v0/me"; let url = config.sync_address + "/api/v0/me";
let res = await fetch(url, { let res = await fetch(url, {