From 663959792f3d9940de0091af251d745bf5cd1c9e Mon Sep 17 00:00:00 2001 From: russellgn Date: Sun, 10 Aug 2025 12:22:15 +0200 Subject: [PATCH 1/7] build: create test build workflow --- .github/workflows/test_build.yaml | 82 +++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 .github/workflows/test_build.yaml diff --git a/.github/workflows/test_build.yaml b/.github/workflows/test_build.yaml new file mode 100644 index 0000000..a7ce62e --- /dev/null +++ b/.github/workflows/test_build.yaml @@ -0,0 +1,82 @@ +name: "Test Build" + +on: + push: + branches: + - testing +env: + CLIENT_ID: ${{ secrets.CLIENT_ID }} + CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }} + PROCEED_TO_AUTH_URI: ${{ secrets.PROCEED_TO_AUTH_URI }} + FINNISH_AUTH_URI: ${{ secrets.FINNISH_AUTH_URI }} + +jobs: + test-tauri: + strategy: + fail-fast: false + matrix: + include: + - platform: "macos-latest" + args: "--target aarch64-apple-darwin" + - platform: "macos-latest" + args: "--target x86_64-apple-darwin" + - platform: "ubuntu-22.04" + args: "" + - platform: "windows-latest" + args: "" + + runs-on: ${{ matrix.platform }} + defaults: + run: + shell: "bash" + steps: + - uses: actions/checkout@v4 + + - name: install dependencies (ubuntu only) + if: matrix.platform == 'ubuntu-22.04' + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf + + - name: install Rust stable + uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }} + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: latest + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: lts/* + cache: "pnpm" + + - name: install frontend dependencies + run: pnpm install + + - name: Cache Rust build + uses: swatinem/rust-cache@v2 + with: + workspaces: "./src-tauri -> target" + + - name: Create .env file for Vite + run: | + echo VITE_CLIENT_ID=${{secrets.CLIENT_ID }} >> .env + echo VITE_CLIENT_SECRET=${{secrets.CLIENT_SECRET }} >> .env + echo VITE_PROCEED_TO_AUTH_URI=${{secrets.PROCEED_TO_AUTH_URI }} >> .env + echo VITE_FINNISH_AUTH_URI=${{secrets.FINNISH_AUTH_URI }} >> .env + + - name: Create .env file for Tauri + run: | + echo CLIENT_ID=${{ secrets.CLIENT_ID }} >> ./src-tauri/.env + echo CLIENT_SECRET=${{ secrets.CLIENT_SECRET }} >> ./src-tauri/.env + + # If tagName and releaseId are omitted tauri-action will only build the app and won't try to upload any assets. + - uses: tauri-apps/tauri-action@v0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + args: ${{ matrix.args }} From 7bf9e2173bca0a77ab802e2ecb42418de7e970ef Mon Sep 17 00:00:00 2001 From: russellgn Date: Sun, 10 Aug 2025 12:25:39 +0200 Subject: [PATCH 2/7] fix: reconfigure splashscreen and previous fixes --- src-tauri/capabilities/default.json | 9 +-------- src-tauri/src/lib.rs | 2 +- src-tauri/tauri.conf.json | 22 +++++++++++----------- 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index 60f5ae7..fca1943 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -3,12 +3,5 @@ "identifier": "default", "description": "Capability for the main window", "windows": ["main"], - "permissions": [ - "core:default", - "opener:default", - "store:default", - "deep-link:default", - "http:default", - "store:allow-load" - ] + "permissions": ["core:default", "opener:default", "store:default", "deep-link:default", "http:default"] } diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index bac5be3..8ae63b5 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -18,7 +18,7 @@ pub type Result = std::result::Result; #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { tauri::Builder::default() - // .plugin(tauri_plugin_single_instance::init(init_tauri_plugin_single_instance)) + .plugin(tauri_plugin_single_instance::init(init_tauri_plugin_single_instance)) .plugin(tauri_plugin_deep_link::init()) .plugin(tauri_plugin_store::Builder::new().build()) .plugin(tauri_plugin_opener::init()) diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 947bdf8..9cedf9a 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -11,16 +11,6 @@ }, "app": { "windows": [ - { - "label": "main", - "visible": false, - "title": "Task Bridge", - "width": 800, - "height": 600, - "center": true, - "maximized": true, - "backgroundColor": "#1c191f" - }, { "label": "splashscreen", "visible": true, @@ -29,9 +19,19 @@ "center": true, "maximized": false, "maximizable": false, - "url": "splashscreen.html", + "url": "/splashscreen", "backgroundColor": "#1c191f", "decorations": false + }, + { + "label": "main", + "visible": false, + "title": "Task Bridge", + "width": 800, + "height": 600, + "center": true, + "maximized": true, + "backgroundColor": "#1c191f" } ], "security": { From d8c467a84ab23e3adbc1cabfaf77962d929e579d Mon Sep 17 00:00:00 2001 From: russellgn Date: Sun, 10 Aug 2025 12:28:28 +0200 Subject: [PATCH 3/7] feat: resize splashscreen for debug --- src-tauri/tauri.conf.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 9cedf9a..4dafce0 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -14,8 +14,8 @@ { "label": "splashscreen", "visible": true, - "width": 350, - "height": 200, + "width": 800, + "height": 600, "center": true, "maximized": false, "maximizable": false, From 5cd289ae2da26fa9659a4a1eeae072c62b896f31 Mon Sep 17 00:00:00 2001 From: russellgn Date: Sun, 10 Aug 2025 12:48:28 +0200 Subject: [PATCH 4/7] fix: remove splashscreen --- splashscreen.html | 27 --------------------------- src-tauri/src/commands.rs | 13 ------------- src-tauri/src/lib.rs | 1 - src-tauri/tauri.conf.json | 13 ------------- src/components/general/Layout.tsx | 2 -- src/hooks/useSetup.ts | 19 ------------------- 6 files changed, 75 deletions(-) delete mode 100644 splashscreen.html delete mode 100644 src/hooks/useSetup.ts diff --git a/splashscreen.html b/splashscreen.html deleted file mode 100644 index c93c3dd..0000000 --- a/splashscreen.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - Task Bridge - - - - task bridge logo -

Task Bridge

- - diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 439aba1..cb270dc 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -15,19 +15,6 @@ use crate::{ utils::{dbg_store, get_store, get_token, IssueExt}, }; -#[tauri::command] -pub async fn hide_splash(app: AppHandle) -> crate::Result { - if let Some(splashscreen) = app.get_webview_window("splashscreen") { - let _ = splashscreen.close(); - } - app.get_webview_window("main") - .expect("could not access main window") - .show() - .expect("could not display main window"); - - Ok(()) -} - #[tauri::command] pub async fn fetch_save_and_return_user(app: AppHandle) -> crate::Result { const F: &str = "[fetch_save_and_return_user]"; diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 8ae63b5..65ed99a 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -25,7 +25,6 @@ pub fn run() { .plugin(tauri_plugin_http::init()) .setup(setup::setup) .invoke_handler(tauri::generate_handler![ - commands::hide_splash, commands::fetch_save_and_return_user, commands::find_users_matching_query, commands::create_project, diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 4dafce0..640f250 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -11,21 +11,8 @@ }, "app": { "windows": [ - { - "label": "splashscreen", - "visible": true, - "width": 800, - "height": 600, - "center": true, - "maximized": false, - "maximizable": false, - "url": "/splashscreen", - "backgroundColor": "#1c191f", - "decorations": false - }, { "label": "main", - "visible": false, "title": "Task Bridge", "width": 800, "height": 600, diff --git a/src/components/general/Layout.tsx b/src/components/general/Layout.tsx index 84798b8..e14dc63 100644 --- a/src/components/general/Layout.tsx +++ b/src/components/general/Layout.tsx @@ -4,11 +4,9 @@ import DevKit from "./DevKit"; import { Toaster } from "@/components/ui/sonner"; import MenuBar from "./MenuBar"; import { AlertTriangle, CheckCircle2 } from "lucide-react"; -import useSetup from "@/hooks/useSetup"; export default function Layout() { useListenForAuthSetupCompleteEvent(); - useSetup(); return (
diff --git a/src/hooks/useSetup.ts b/src/hooks/useSetup.ts deleted file mode 100644 index abed1da..0000000 --- a/src/hooks/useSetup.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { invoke } from "@tauri-apps/api/core"; -import { useEffect, useState } from "react"; -import useGetUser from "./backend-api-hooks/internet-independant/useGetUser"; -import useLocalProjectsList from "./backend-api-hooks/internet-independant/useLocalProjectsList"; - -// ensures user and local projects are loaded, then hides splash screen -export default function useSetup() { - const [isFirstRun, setIsFirstRun] = useState(true); - const { loading } = useGetUser(); - const { isLoading } = useLocalProjectsList(); - - useEffect(() => { - if (isFirstRun && !loading && !isLoading) { - setTimeout(() => { - invoke("hide_splash").then(() => setIsFirstRun(false)); - }, 2000); - } - }, [loading, isLoading, isFirstRun]); -} From 937f885abd0efffd119103fa9e6baf83640299c0 Mon Sep 17 00:00:00 2001 From: russellgn Date: Sun, 10 Aug 2025 14:35:23 +0200 Subject: [PATCH 5/7] feat: restructure logging; implement persistance --- src-tauri/Cargo.lock | 46 ++++++++++---- src-tauri/Cargo.toml | 1 + src-tauri/src/commands.rs | 8 ++- src-tauri/src/lib.rs | 3 + src-tauri/src/logging.rs | 40 +++++++++++++ src-tauri/src/utils.rs | 13 +++- src/components/general/ErrorDisplay.tsx | 3 +- .../settings/ProjectDeletionSettings.tsx | 4 +- .../useAssignDraftTaskNow.ts | 2 +- .../internet-dependant/useAssignTaskNow.ts | 2 +- .../useCreateBacklogTask.ts | 2 +- .../internet-dependant/useCreateProject.ts | 2 +- .../internet-dependant/useCreateTask.ts | 2 +- .../internet-dependant/useDeleteDraftTask.ts | 2 +- .../internet-dependant/useDeleteTask.ts | 2 +- .../internet-dependant/useEditDraftTask.ts | 2 +- .../internet-dependant/useEditTask.ts | 2 +- .../internet-dependant/useSearchUsers.ts | 2 +- .../useSyncProjectWithGitHub.ts | 2 +- .../internet-dependant/useSyncProjectsList.ts | 2 +- .../internet-dependant/useSyncTaskActivity.ts | 2 +- .../useUpdateGeneralProjectMetadata.ts | 3 +- .../useUpdateProjectTeam.ts | 2 +- .../useCreateDraftTask.ts | 2 +- .../useDeleteProjectLocally.ts | 2 +- .../useDeleteProjectPermanently.ts | 2 +- .../internet-independant/useGetUser.ts | 2 +- .../useLocalProjectsList.ts | 2 +- .../internet-independant/useSignout.ts | 2 +- src/hooks/component-hooks/useDevKit.ts | 2 +- .../useKanbanDraftTaskCard.tsx | 3 +- .../component-hooks/useKanbanTaskCard.tsx | 5 +- .../component-hooks/useNewProjectForm.ts | 2 +- src/hooks/component-hooks/useNewTaskForm.tsx | 3 +- src/hooks/component-hooks/useTeamSelector.ts | 2 +- src/hooks/route-hooks/useHome.ts | 3 +- src/hooks/route-hooks/useSignin.ts | 3 +- src/hooks/useAppPreferences.ts | 2 +- src/hooks/useAppVersion.ts | 2 +- src/hooks/useIsOnline.ts | 2 +- .../useListenForAuthSetupCompleteEvent.ts | 3 +- src/hooks/useListenForSyncUpdateMessage.ts | 5 +- src/hooks/useProjectSettings.ts | 2 +- src/hooks/useUpdateProjectSyncSettings.ts | 2 +- src/lib/logging.ts | 60 +++++++++++++++++++ src/lib/utils.ts | 47 +-------------- src/providers/ConnectionStatusProvider.tsx | 2 +- src/providers/SyncedProjectsProvider.tsx | 2 +- 48 files changed, 211 insertions(+), 102 deletions(-) create mode 100644 src-tauri/src/logging.rs create mode 100644 src/lib/logging.ts diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 03d334a..7818571 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -817,7 +817,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -1701,7 +1701,7 @@ dependencies = [ "http-body", "hyper", "pin-project-lite", - "socket2", + "socket2 0.5.8", "tokio", "tower-service", "tracing", @@ -1917,6 +1917,17 @@ dependencies = [ "cfb", ] +[[package]] +name = "io-uring" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" +dependencies = [ + "bitflags 2.9.0", + "cfg-if", + "libc", +] + [[package]] name = "ipnet" version = "2.11.0" @@ -2105,9 +2116,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.171" +version = "0.2.174" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" [[package]] name = "libloading" @@ -3117,7 +3128,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2", + "socket2 0.5.8", "thiserror 2.0.12", "tokio", "tracing", @@ -3153,7 +3164,7 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2", + "socket2 0.5.8", "tracing", "windows-sys 0.59.0", ] @@ -3900,6 +3911,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "softbuffer" version = "0.4.6" @@ -4158,6 +4179,7 @@ dependencies = [ "tauri-plugin-opener", "tauri-plugin-single-instance", "tauri-plugin-store", + "tokio", "urlencoding", "uuid", ] @@ -4639,18 +4661,22 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.44.2" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "bytes", + "io-uring", "libc", "mio", + "parking_lot", "pin-project-lite", - "socket2", + "signal-hook-registry", + "slab", + "socket2 0.6.0", "tokio-macros", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 13cb7c2..e6b58fc 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -32,6 +32,7 @@ futures-util = "0.3.31" colored = "3.0.0" uuid = { version = "1.16.0", features = ["v4"] } urlencoding = "2.1.3" +tokio = { version = "1.47.1", features = ["full"] } [target."cfg(any(target_os = \"macos\", windows, target_os = \"linux\"))".dependencies] tauri-plugin-single-instance = { version = "2.3.0", features = ["deep-link"] } diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index cb270dc..c598dfc 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -7,14 +7,20 @@ use tauri::{AppHandle, Emitter, Manager, Runtime}; use crate::{ log, + logging::Log, new_github_api::GithubAPI, project::{ task::{DraftTask, NewDraftTaskPayload, NewTaskPayload, Task}, Project, ProjectPatchArgs, ProjectPayload, }, - utils::{dbg_store, get_store, get_token, IssueExt}, + utils::{dbg_store, get_logs_store, get_store, get_token, IssueExt}, }; +#[tauri::command] +pub async fn persist_log(app: AppHandle, log: Log) { + log.persist(get_logs_store(app).ok().as_ref()).await +} + #[tauri::command] pub async fn fetch_save_and_return_user(app: AppHandle) -> crate::Result { const F: &str = "[fetch_save_and_return_user]"; diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 65ed99a..b83e105 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -2,6 +2,7 @@ mod auth; mod commands; mod experimental; mod github_api; +mod logging; mod new_github_api; mod project; mod setup; @@ -10,6 +11,7 @@ mod utils; use setup::init_tauri_plugin_single_instance; pub const STORE_PATH: &str = "store.json"; +pub const LOGS_STORE_PATH: &str = "task_bridge_logs.json"; pub const ENV_STR: &'static str = include_str!("../.env"); pub const TEAM_LOGINS_SEPERATOR: &str = "-;;-"; @@ -45,6 +47,7 @@ pub fn run() { commands::update_project_team, commands::update_general_project_metadata, commands::sync_projects_with_github_v2, + commands::persist_log, experimental::clear_store, ]) .run(tauri::generate_context!()) diff --git a/src-tauri/src/logging.rs b/src-tauri/src/logging.rs new file mode 100644 index 0000000..534d0db --- /dev/null +++ b/src-tauri/src/logging.rs @@ -0,0 +1,40 @@ +use std::sync::Arc; + +use serde::{Deserialize, Serialize}; +use tauri::Runtime; +use tauri_plugin_store::Store; + +use crate::utils::new_id; + +#[derive(Deserialize, Serialize)] +pub struct Log { + log_type: String, + title: String, + body: Option, + context: Option, +} + +impl Log { + pub async fn persist(self, logs_store: Option<&Arc>>) { + if let Some(logs_store) = logs_store { + self.persist_to_logs_store(logs_store) + } + } + + fn generate_id(&self) -> String { + format!( + "{}__{}__{}", + chrono::Utc::now().timestamp_micros(), + self.log_type, + new_id() + ) + } + + fn persist_to_logs_store(self, logs_store: &Arc>) { + let id = self.generate_id(); + + if let Ok(val) = serde_json::to_value(self) { + logs_store.set(id, val); + } + } +} diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index c33e928..bb47357 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -5,7 +5,7 @@ use tauri::{AppHandle, Runtime}; use tauri_plugin_store::{Store, StoreExt}; use uuid::Uuid; -use crate::{auth::AccessToken, ENV_STR, STORE_PATH}; +use crate::{auth::AccessToken, ENV_STR, LOGS_STORE_PATH, STORE_PATH}; #[macro_export] macro_rules! log { @@ -81,6 +81,17 @@ pub fn get_store(app: AppHandle) -> crate::Result>> Ok(store) } +pub fn get_logs_store(app: AppHandle) -> crate::Result>> { + const F: &str = "[get_logs_store]"; + + log!("{F} getting logs store"); + let logs_store = app + .store(LOGS_STORE_PATH) + .map_err(|e| format!("{F} {}", e.to_string()))?; + + Ok(logs_store) +} + pub fn get_token(store: &Arc>) -> crate::Result { const F: &str = "[get_token]"; diff --git a/src/components/general/ErrorDisplay.tsx b/src/components/general/ErrorDisplay.tsx index 48b6fe2..42322b6 100644 --- a/src/components/general/ErrorDisplay.tsx +++ b/src/components/general/ErrorDisplay.tsx @@ -1,5 +1,6 @@ import { MAX_ERR_LENGTH } from "@/lib/constants"; -import { cn, trimFunctionNameFromLog, truncateStr } from "@/lib/utils"; +import { cn, truncateStr } from "@/lib/utils"; +import { trimFunctionNameFromLog } from "@/lib/logging"; import { AlertTriangle } from "lucide-react"; type ErrorDisplayProps = { diff --git a/src/components/screens/settings/ProjectDeletionSettings.tsx b/src/components/screens/settings/ProjectDeletionSettings.tsx index e76895e..290b385 100644 --- a/src/components/screens/settings/ProjectDeletionSettings.tsx +++ b/src/components/screens/settings/ProjectDeletionSettings.tsx @@ -1,9 +1,7 @@ import SettingSkeleton from "./SettingSkeleton"; -import { SettingsTabElementProps } from "@/types/types"; import { Input } from "@/components/ui/input"; -export default function ProjectDeletionSettings({ project }: SettingsTabElementProps) { - console.log("delete options", project?.name); +export default function ProjectDeletionSettings() { return (
diff --git a/src/hooks/backend-api-hooks/internet-dependant/useAssignDraftTaskNow.ts b/src/hooks/backend-api-hooks/internet-dependant/useAssignDraftTaskNow.ts index 8debcf4..0d7a5ac 100644 --- a/src/hooks/backend-api-hooks/internet-dependant/useAssignDraftTaskNow.ts +++ b/src/hooks/backend-api-hooks/internet-dependant/useAssignDraftTaskNow.ts @@ -1,5 +1,5 @@ import { DraftTaskAssignmentResponse, Project } from "@/types/interfaces"; -import { alertError, alertSuccess, dbg } from "@/lib/utils"; +import { alertError, alertSuccess, dbg } from "@/lib/logging"; import { useClient } from "@/providers/ReactQueryProvider"; import { useMutation } from "@tanstack/react-query"; import { invoke } from "@tauri-apps/api/core"; diff --git a/src/hooks/backend-api-hooks/internet-dependant/useAssignTaskNow.ts b/src/hooks/backend-api-hooks/internet-dependant/useAssignTaskNow.ts index 2bc3f23..115aaa3 100644 --- a/src/hooks/backend-api-hooks/internet-dependant/useAssignTaskNow.ts +++ b/src/hooks/backend-api-hooks/internet-dependant/useAssignTaskNow.ts @@ -1,5 +1,5 @@ import { Project, Task } from "@/types/interfaces"; -import { alertError, alertSuccess, dbg } from "@/lib/utils"; +import { alertError, alertSuccess, dbg } from "@/lib/logging"; import { useClient } from "@/providers/ReactQueryProvider"; import { useMutation } from "@tanstack/react-query"; import { invoke } from "@tauri-apps/api/core"; diff --git a/src/hooks/backend-api-hooks/internet-dependant/useCreateBacklogTask.ts b/src/hooks/backend-api-hooks/internet-dependant/useCreateBacklogTask.ts index 7ab2f33..756264e 100644 --- a/src/hooks/backend-api-hooks/internet-dependant/useCreateBacklogTask.ts +++ b/src/hooks/backend-api-hooks/internet-dependant/useCreateBacklogTask.ts @@ -1,5 +1,5 @@ import { NewTaskPayload, Project, Task } from "@/types/interfaces"; -import { alertError, alertSuccess, dbg } from "@/lib/utils"; +import { alertError, alertSuccess, dbg } from "@/lib/logging"; import { useClient } from "@/providers/ReactQueryProvider"; import { useMutation } from "@tanstack/react-query"; import { invoke } from "@tauri-apps/api/core"; diff --git a/src/hooks/backend-api-hooks/internet-dependant/useCreateProject.ts b/src/hooks/backend-api-hooks/internet-dependant/useCreateProject.ts index d24ab30..e81d04a 100644 --- a/src/hooks/backend-api-hooks/internet-dependant/useCreateProject.ts +++ b/src/hooks/backend-api-hooks/internet-dependant/useCreateProject.ts @@ -1,5 +1,5 @@ import { NewProjectPayload, Project } from "@/types/interfaces"; -import { alertError, alertSuccess, dbg } from "@/lib/utils"; +import { alertError, alertSuccess, dbg } from "@/lib/logging"; import { useClient } from "@/providers/ReactQueryProvider"; import { useMutation } from "@tanstack/react-query"; import { invoke } from "@tauri-apps/api/core"; diff --git a/src/hooks/backend-api-hooks/internet-dependant/useCreateTask.ts b/src/hooks/backend-api-hooks/internet-dependant/useCreateTask.ts index f46b6ef..be90117 100644 --- a/src/hooks/backend-api-hooks/internet-dependant/useCreateTask.ts +++ b/src/hooks/backend-api-hooks/internet-dependant/useCreateTask.ts @@ -1,5 +1,5 @@ import { NewTaskPayload, Project, Task } from "@/types/interfaces"; -import { alertError, alertSuccess, dbg } from "@/lib/utils"; +import { alertError, alertSuccess, dbg } from "@/lib/logging"; import { useClient } from "@/providers/ReactQueryProvider"; import { useMutation } from "@tanstack/react-query"; import { invoke } from "@tauri-apps/api/core"; diff --git a/src/hooks/backend-api-hooks/internet-dependant/useDeleteDraftTask.ts b/src/hooks/backend-api-hooks/internet-dependant/useDeleteDraftTask.ts index 58a1d31..d45c21d 100644 --- a/src/hooks/backend-api-hooks/internet-dependant/useDeleteDraftTask.ts +++ b/src/hooks/backend-api-hooks/internet-dependant/useDeleteDraftTask.ts @@ -1,5 +1,5 @@ import { Project } from "@/types/interfaces"; -import { alertError, alertSuccess, dbg } from "@/lib/utils"; +import { alertError, alertSuccess, dbg } from "@/lib/logging"; import { useClient } from "@/providers/ReactQueryProvider"; import { useMutation } from "@tanstack/react-query"; import { invoke } from "@tauri-apps/api/core"; diff --git a/src/hooks/backend-api-hooks/internet-dependant/useDeleteTask.ts b/src/hooks/backend-api-hooks/internet-dependant/useDeleteTask.ts index 81d7877..e8ae1ae 100644 --- a/src/hooks/backend-api-hooks/internet-dependant/useDeleteTask.ts +++ b/src/hooks/backend-api-hooks/internet-dependant/useDeleteTask.ts @@ -1,5 +1,5 @@ import { Project } from "@/types/interfaces"; -import { alertError, alertSuccess, dbg } from "@/lib/utils"; +import { alertError, alertSuccess, dbg } from "@/lib/logging"; import { useClient } from "@/providers/ReactQueryProvider"; import { useMutation } from "@tanstack/react-query"; import { invoke } from "@tauri-apps/api/core"; diff --git a/src/hooks/backend-api-hooks/internet-dependant/useEditDraftTask.ts b/src/hooks/backend-api-hooks/internet-dependant/useEditDraftTask.ts index fe6a84c..a6657f0 100644 --- a/src/hooks/backend-api-hooks/internet-dependant/useEditDraftTask.ts +++ b/src/hooks/backend-api-hooks/internet-dependant/useEditDraftTask.ts @@ -1,5 +1,5 @@ import { DraftTask, NewDraftTaskPayload, Project } from "@/types/interfaces"; -import { alertError, alertSuccess, dbg } from "@/lib/utils"; +import { alertError, alertSuccess, dbg } from "@/lib/logging"; import { useClient } from "@/providers/ReactQueryProvider"; import { useMutation } from "@tanstack/react-query"; import { invoke } from "@tauri-apps/api/core"; diff --git a/src/hooks/backend-api-hooks/internet-dependant/useEditTask.ts b/src/hooks/backend-api-hooks/internet-dependant/useEditTask.ts index b2a1ffb..5545265 100644 --- a/src/hooks/backend-api-hooks/internet-dependant/useEditTask.ts +++ b/src/hooks/backend-api-hooks/internet-dependant/useEditTask.ts @@ -1,5 +1,5 @@ import { NewTaskPayload, Project, Task } from "@/types/interfaces"; -import { alertError, alertSuccess, dbg } from "@/lib/utils"; +import { alertError, alertSuccess, dbg } from "@/lib/logging"; import { useClient } from "@/providers/ReactQueryProvider"; import { useMutation } from "@tanstack/react-query"; import { invoke } from "@tauri-apps/api/core"; diff --git a/src/hooks/backend-api-hooks/internet-dependant/useSearchUsers.ts b/src/hooks/backend-api-hooks/internet-dependant/useSearchUsers.ts index 5900eba..d80c7e5 100644 --- a/src/hooks/backend-api-hooks/internet-dependant/useSearchUsers.ts +++ b/src/hooks/backend-api-hooks/internet-dependant/useSearchUsers.ts @@ -1,5 +1,5 @@ import { Author } from "@/types/interfaces"; -import { alertError, logInfo } from "@/lib/utils"; +import { alertError, logInfo } from "@/lib/logging"; import { useQuery } from "@tanstack/react-query"; import { invoke } from "@tauri-apps/api/core"; import { useState } from "react"; diff --git a/src/hooks/backend-api-hooks/internet-dependant/useSyncProjectWithGitHub.ts b/src/hooks/backend-api-hooks/internet-dependant/useSyncProjectWithGitHub.ts index 081ff16..9274231 100644 --- a/src/hooks/backend-api-hooks/internet-dependant/useSyncProjectWithGitHub.ts +++ b/src/hooks/backend-api-hooks/internet-dependant/useSyncProjectWithGitHub.ts @@ -1,6 +1,6 @@ import useSettings from "@/hooks/route-hooks/useSettings"; import { DEFAULT_PROJECT_SYNC_INTERVAL_MINS } from "@/lib/constants"; -import { alertError, alertInfo, alertSuccess, dbg } from "@/lib/utils"; +import { alertError, alertInfo, alertSuccess, dbg } from "@/lib/logging"; import { useConnectionStatus } from "@/providers/ConnectionStatusProvider"; import { useClient } from "@/providers/ReactQueryProvider"; import { useSyncedProjects } from "@/providers/SyncedProjectsProvider"; diff --git a/src/hooks/backend-api-hooks/internet-dependant/useSyncProjectsList.ts b/src/hooks/backend-api-hooks/internet-dependant/useSyncProjectsList.ts index 7f49a41..5ad911f 100644 --- a/src/hooks/backend-api-hooks/internet-dependant/useSyncProjectsList.ts +++ b/src/hooks/backend-api-hooks/internet-dependant/useSyncProjectsList.ts @@ -1,4 +1,4 @@ -import { alertError, alertInfo, dbg } from "@/lib/utils"; +import { alertError, alertInfo, dbg } from "@/lib/logging"; import { useConnectionStatus } from "@/providers/ConnectionStatusProvider"; import { useClient } from "@/providers/ReactQueryProvider"; import { useMutation } from "@tanstack/react-query"; diff --git a/src/hooks/backend-api-hooks/internet-dependant/useSyncTaskActivity.ts b/src/hooks/backend-api-hooks/internet-dependant/useSyncTaskActivity.ts index 7902d07..85beb42 100644 --- a/src/hooks/backend-api-hooks/internet-dependant/useSyncTaskActivity.ts +++ b/src/hooks/backend-api-hooks/internet-dependant/useSyncTaskActivity.ts @@ -1,4 +1,4 @@ -import { alertSuccess, dbg } from "@/lib/utils"; +import { alertSuccess, dbg } from "@/lib/logging"; import { useConnectionStatus } from "@/providers/ConnectionStatusProvider"; import { useClient } from "@/providers/ReactQueryProvider"; import { ActivitySyncResponse, Project } from "@/types/interfaces"; diff --git a/src/hooks/backend-api-hooks/internet-dependant/useUpdateGeneralProjectMetadata.ts b/src/hooks/backend-api-hooks/internet-dependant/useUpdateGeneralProjectMetadata.ts index 202f33d..ac1183f 100644 --- a/src/hooks/backend-api-hooks/internet-dependant/useUpdateGeneralProjectMetadata.ts +++ b/src/hooks/backend-api-hooks/internet-dependant/useUpdateGeneralProjectMetadata.ts @@ -1,4 +1,5 @@ -import { alertError, alertSuccess, dbg, stringifyAndRemoveQuotes } from "@/lib/utils"; +import { alertError, alertSuccess, dbg } from "@/lib/logging"; +import { stringifyAndRemoveQuotes } from "@/lib/utils"; import { useConnectionStatus } from "@/providers/ConnectionStatusProvider"; import { Project, ProjectPatchArgs } from "@/types/interfaces"; import { useMutation } from "@tanstack/react-query"; diff --git a/src/hooks/backend-api-hooks/internet-dependant/useUpdateProjectTeam.ts b/src/hooks/backend-api-hooks/internet-dependant/useUpdateProjectTeam.ts index 1d0db0b..5d4abe7 100644 --- a/src/hooks/backend-api-hooks/internet-dependant/useUpdateProjectTeam.ts +++ b/src/hooks/backend-api-hooks/internet-dependant/useUpdateProjectTeam.ts @@ -1,4 +1,4 @@ -import { alertError, alertSuccess, dbg } from "@/lib/utils"; +import { alertError, alertSuccess, dbg } from "@/lib/logging"; import { useConnectionStatus } from "@/providers/ConnectionStatusProvider"; import { ProjectPatchArgs } from "@/types/interfaces"; import { useMutation } from "@tanstack/react-query"; diff --git a/src/hooks/backend-api-hooks/internet-independant/useCreateDraftTask.ts b/src/hooks/backend-api-hooks/internet-independant/useCreateDraftTask.ts index 0dcf81e..1b27387 100644 --- a/src/hooks/backend-api-hooks/internet-independant/useCreateDraftTask.ts +++ b/src/hooks/backend-api-hooks/internet-independant/useCreateDraftTask.ts @@ -1,5 +1,5 @@ import { DraftTask, NewDraftTaskPayload, Project } from "@/types/interfaces"; -import { alertError, alertSuccess, dbg } from "@/lib/utils"; +import { alertError, alertSuccess, dbg } from "@/lib/logging"; import { useClient } from "@/providers/ReactQueryProvider"; import { useMutation } from "@tanstack/react-query"; import { invoke } from "@tauri-apps/api/core"; diff --git a/src/hooks/backend-api-hooks/internet-independant/useDeleteProjectLocally.ts b/src/hooks/backend-api-hooks/internet-independant/useDeleteProjectLocally.ts index 7812ca7..c0ed3cb 100644 --- a/src/hooks/backend-api-hooks/internet-independant/useDeleteProjectLocally.ts +++ b/src/hooks/backend-api-hooks/internet-independant/useDeleteProjectLocally.ts @@ -3,7 +3,7 @@ import { Project } from "@/types/interfaces"; import { useClient } from "@/providers/ReactQueryProvider"; import { useMutation } from "@tanstack/react-query"; import { useNavigate } from "react-router"; -import { alertError, alertSuccess, dbg } from "@/lib/utils"; +import { alertError, alertSuccess, dbg } from "@/lib/logging"; export default function useDeleteProjectLocally(projectId: string | undefined) { const client = useClient(); diff --git a/src/hooks/backend-api-hooks/internet-independant/useDeleteProjectPermanently.ts b/src/hooks/backend-api-hooks/internet-independant/useDeleteProjectPermanently.ts index e9812f3..89c5372 100644 --- a/src/hooks/backend-api-hooks/internet-independant/useDeleteProjectPermanently.ts +++ b/src/hooks/backend-api-hooks/internet-independant/useDeleteProjectPermanently.ts @@ -4,7 +4,7 @@ import { useClient } from "@/providers/ReactQueryProvider"; import { useMutation } from "@tanstack/react-query"; import { useNavigate } from "react-router"; import { useConnectionStatus } from "@/providers/ConnectionStatusProvider"; -import { alertError, alertSuccess, dbg } from "@/lib/utils"; +import { alertError, alertSuccess, dbg } from "@/lib/logging"; export default function useDeleteProjectPermanently(projectId: string | undefined) { const client = useClient(); diff --git a/src/hooks/backend-api-hooks/internet-independant/useGetUser.ts b/src/hooks/backend-api-hooks/internet-independant/useGetUser.ts index f74745e..6c94682 100644 --- a/src/hooks/backend-api-hooks/internet-independant/useGetUser.ts +++ b/src/hooks/backend-api-hooks/internet-independant/useGetUser.ts @@ -1,6 +1,6 @@ import { STORE_PATH } from "@/lib/constants"; import { Author } from "@/types/interfaces"; -import { logInfo } from "@/lib/utils"; +import { logInfo } from "@/lib/logging"; import { useQuery } from "@tanstack/react-query"; import { invoke } from "@tauri-apps/api/core"; import { load } from "@tauri-apps/plugin-store"; diff --git a/src/hooks/backend-api-hooks/internet-independant/useLocalProjectsList.ts b/src/hooks/backend-api-hooks/internet-independant/useLocalProjectsList.ts index 90b6729..3614aad 100644 --- a/src/hooks/backend-api-hooks/internet-independant/useLocalProjectsList.ts +++ b/src/hooks/backend-api-hooks/internet-independant/useLocalProjectsList.ts @@ -3,7 +3,7 @@ import { Project } from "@/types/interfaces"; import { useQuery } from "@tanstack/react-query"; import { load } from "@tauri-apps/plugin-store"; import useSyncProjectsList from "../internet-dependant/useSyncProjectsList"; -import { alertError, dbg } from "@/lib/utils"; +import { alertError, dbg } from "@/lib/logging"; import React from "react"; import { toast } from "sonner"; diff --git a/src/hooks/backend-api-hooks/internet-independant/useSignout.ts b/src/hooks/backend-api-hooks/internet-independant/useSignout.ts index 670248b..714f9d5 100644 --- a/src/hooks/backend-api-hooks/internet-independant/useSignout.ts +++ b/src/hooks/backend-api-hooks/internet-independant/useSignout.ts @@ -2,7 +2,7 @@ import { load } from "@tauri-apps/plugin-store"; import { STORE_PATH } from "@/lib/constants"; import { useMutation } from "@tanstack/react-query"; import { useNavigate } from "react-router"; -import { alertError, alertSuccess, logInfo } from "@/lib/utils"; +import { alertError, alertSuccess, logInfo } from "@/lib/logging"; import { useClient } from "@/providers/ReactQueryProvider"; export default function useSignout() { diff --git a/src/hooks/component-hooks/useDevKit.ts b/src/hooks/component-hooks/useDevKit.ts index 507b8c3..2258bbf 100644 --- a/src/hooks/component-hooks/useDevKit.ts +++ b/src/hooks/component-hooks/useDevKit.ts @@ -1,5 +1,5 @@ import { STORE_PATH } from "@/lib/constants"; -import { alertError, alertInfo, logInfo } from "@/lib/utils"; +import { alertError, alertInfo, logInfo } from "@/lib/logging"; import { invoke } from "@tauri-apps/api/core"; import { load } from "@tauri-apps/plugin-store"; import { useState } from "react"; diff --git a/src/hooks/component-hooks/useKanbanDraftTaskCard.tsx b/src/hooks/component-hooks/useKanbanDraftTaskCard.tsx index b35026a..b8f83aa 100644 --- a/src/hooks/component-hooks/useKanbanDraftTaskCard.tsx +++ b/src/hooks/component-hooks/useKanbanDraftTaskCard.tsx @@ -2,7 +2,8 @@ import { DraftTask, Project } from "@/types/interfaces"; import { useState } from "react"; import { useSearchParams } from "react-router"; import useDeleteDraftTask from "../backend-api-hooks/internet-dependant/useDeleteDraftTask"; -import { alertInfo, wait } from "@/lib/utils"; +import { wait } from "@/lib/utils"; +import { alertInfo } from "@/lib/logging"; import useAssignDraftTaskNow from "../backend-api-hooks/internet-dependant/useAssignDraftTaskNow"; export default function useKanbanDraftTaskCard(draft: DraftTask, project: Project) { diff --git a/src/hooks/component-hooks/useKanbanTaskCard.tsx b/src/hooks/component-hooks/useKanbanTaskCard.tsx index 57dcb5d..26b8da3 100644 --- a/src/hooks/component-hooks/useKanbanTaskCard.tsx +++ b/src/hooks/component-hooks/useKanbanTaskCard.tsx @@ -2,9 +2,10 @@ import { Project, Task } from "@/types/interfaces"; import { useState } from "react"; import { useSearchParams } from "react-router"; import useAssignTaskNow from "../backend-api-hooks/internet-dependant/useAssignTaskNow"; -import { alertInfo } from "@/lib/utils"; +import { alertInfo } from "@/lib/logging"; import useDeleteTask from "../backend-api-hooks/internet-dependant/useDeleteTask"; import useSyncTaskActivity from "../backend-api-hooks/internet-dependant/useSyncTaskActivity"; +import { dbg } from "@/lib/logging"; export default function useKanbanTaskCard(task: Task, project: Project) { const [open, setOpen] = useState(false); @@ -15,7 +16,7 @@ export default function useKanbanTaskCard(task: Task, project: Project) { const { isPending: isActivitySyncing, syncTaskActivity } = useSyncTaskActivity(project); function editTask() { - console.log("Editing task", task.inner_issue.id); + dbg("Editing task", task.inner_issue.id); setSearchParams((prev) => { prev.set("edit_task", task.inner_issue.id.toString()); return prev; diff --git a/src/hooks/component-hooks/useNewProjectForm.ts b/src/hooks/component-hooks/useNewProjectForm.ts index d6582c7..2c09dba 100644 --- a/src/hooks/component-hooks/useNewProjectForm.ts +++ b/src/hooks/component-hooks/useNewProjectForm.ts @@ -1,7 +1,7 @@ import useCreateProject from "../backend-api-hooks/internet-dependant/useCreateProject"; import { NewProjectPayload } from "@/types/interfaces"; import { FormEvent } from "react"; -import { dbg } from "@/lib/utils"; +import { dbg } from "@/lib/logging"; export default function useNewProjectForm() { const { errorMessage: projectCreationErr, isPending, createProject } = useCreateProject(); diff --git a/src/hooks/component-hooks/useNewTaskForm.tsx b/src/hooks/component-hooks/useNewTaskForm.tsx index f39e286..30b7007 100644 --- a/src/hooks/component-hooks/useNewTaskForm.tsx +++ b/src/hooks/component-hooks/useNewTaskForm.tsx @@ -8,6 +8,7 @@ import { DEFAULT_NONE_SELECT_VALUE } from "@/lib/constants"; import useCreateBacklogTask from "../backend-api-hooks/internet-dependant/useCreateBacklogTask"; import useEditTask from "../backend-api-hooks/internet-dependant/useEditTask"; import useEditDraftTask from "../backend-api-hooks/internet-dependant/useEditDraftTask"; +import { dbg } from "@/lib/logging"; export default function useNewTaskForm(project: Project) { const [open, setOpen] = React.useState(false); @@ -57,7 +58,7 @@ export default function useNewTaskForm(project: Project) { }; payload.assignee_login = payload.assignee_login === DEFAULT_NONE_SELECT_VALUE ? undefined : payload.assignee_login; - console.log(data, payload); + dbg(data, payload); const drafting = isDraftFinal || payload?.assignee_login === DEFAULT_NONE_SELECT_VALUE; diff --git a/src/hooks/component-hooks/useTeamSelector.ts b/src/hooks/component-hooks/useTeamSelector.ts index f901344..7c3ba14 100644 --- a/src/hooks/component-hooks/useTeamSelector.ts +++ b/src/hooks/component-hooks/useTeamSelector.ts @@ -1,5 +1,5 @@ import { useEffect, useState } from "react"; -import { alertError, logInfo } from "@/lib/utils"; +import { alertError, logInfo } from "@/lib/logging"; import { PossiblyPendingAuthor } from "@/types/interfaces"; import { TEAM_LOGINS_SEPERATOR } from "@/lib/constants"; import useSearchUsers from "../backend-api-hooks/internet-dependant/useSearchUsers"; diff --git a/src/hooks/route-hooks/useHome.ts b/src/hooks/route-hooks/useHome.ts index c77417b..d96a642 100644 --- a/src/hooks/route-hooks/useHome.ts +++ b/src/hooks/route-hooks/useHome.ts @@ -1,5 +1,6 @@ import { useEffect } from "react"; -import { alertError, checkAuth } from "@/lib/utils"; +import { checkAuth } from "@/lib/utils"; +import { alertError } from "@/lib/logging"; import { useNavigate, useSearchParams } from "react-router"; import useGetUser from "../backend-api-hooks/internet-independant/useGetUser"; diff --git a/src/hooks/route-hooks/useSignin.ts b/src/hooks/route-hooks/useSignin.ts index 6924ba7..5bf56cf 100644 --- a/src/hooks/route-hooks/useSignin.ts +++ b/src/hooks/route-hooks/useSignin.ts @@ -1,5 +1,6 @@ import { useEffect, useState } from "react"; -import { checkAuth, logError, logInfo } from "@/lib/utils"; +import { logError, logInfo } from "@/lib/logging"; +import { checkAuth } from "@/lib/utils"; import { useNavigate } from "react-router"; export default function useSignin() { diff --git a/src/hooks/useAppPreferences.ts b/src/hooks/useAppPreferences.ts index 4df957e..4d57089 100644 --- a/src/hooks/useAppPreferences.ts +++ b/src/hooks/useAppPreferences.ts @@ -1,5 +1,5 @@ import { STORE_PATH } from "@/lib/constants"; -import { alertError, alertSuccess, dbg } from "@/lib/utils"; +import { alertError, alertSuccess, dbg } from "@/lib/logging"; import { useClient } from "@/providers/ReactQueryProvider"; import { AppPreferences } from "@/types/interfaces"; import { useMutation, useQuery } from "@tanstack/react-query"; diff --git a/src/hooks/useAppVersion.ts b/src/hooks/useAppVersion.ts index b7e6553..ef81f82 100644 --- a/src/hooks/useAppVersion.ts +++ b/src/hooks/useAppVersion.ts @@ -1,4 +1,4 @@ -import { logError } from "@/lib/utils"; +import { logError } from "@/lib/logging"; import { useEffect, useState } from "react"; import { getVersion } from "@tauri-apps/api/app"; diff --git a/src/hooks/useIsOnline.ts b/src/hooks/useIsOnline.ts index b630fd6..e98fca6 100644 --- a/src/hooks/useIsOnline.ts +++ b/src/hooks/useIsOnline.ts @@ -1,4 +1,4 @@ -import { alertError, alertSuccess } from "@/lib/utils"; +import { alertError, alertSuccess } from "@/lib/logging"; import React from "react"; export default function useIsOnline() { diff --git a/src/hooks/useListenForAuthSetupCompleteEvent.ts b/src/hooks/useListenForAuthSetupCompleteEvent.ts index d209cd3..eea5c5d 100644 --- a/src/hooks/useListenForAuthSetupCompleteEvent.ts +++ b/src/hooks/useListenForAuthSetupCompleteEvent.ts @@ -1,6 +1,7 @@ import { useEffect } from "react"; import { useNavigate } from "react-router"; -import { alertSuccess, checkAuth, logError, logInfo } from "@/lib/utils"; +import { alertSuccess, logError, logInfo } from "@/lib/logging"; +import { checkAuth } from "@/lib/utils"; import { once } from "@tauri-apps/api/event"; export default function useListenForAuthSetupCompleteEvent() { diff --git a/src/hooks/useListenForSyncUpdateMessage.ts b/src/hooks/useListenForSyncUpdateMessage.ts index 9967bc4..8c82398 100644 --- a/src/hooks/useListenForSyncUpdateMessage.ts +++ b/src/hooks/useListenForSyncUpdateMessage.ts @@ -1,11 +1,12 @@ -import { alertError, alertSuccess, dbg, stringifyAndRemoveQuotes } from "@/lib/utils"; +import { stringifyAndRemoveQuotes } from "@/lib/utils"; +import { alertError, alertSuccess, dbg } from "@/lib/logging"; import { ProjectSyncResult } from "@/types/interfaces"; import { useEffect } from "react"; import { listen } from "@tauri-apps/api/event"; export default function useListenForSyncUpdateMessage() { useEffect(() => { - let unlisten = () => console.log("project sync result listener - unlisten func was not set"); + let unlisten = () => dbg("project sync result listener - unlisten func was not set"); dbg("[useListenForSyncUpdateMessage] registering project sync result listener"); listen("project_sync_result", (e) => { diff --git a/src/hooks/useProjectSettings.ts b/src/hooks/useProjectSettings.ts index 366a6e6..dd65294 100644 --- a/src/hooks/useProjectSettings.ts +++ b/src/hooks/useProjectSettings.ts @@ -1,5 +1,5 @@ import { useParams } from "react-router"; -import { alertError, dbg } from "@/lib/utils"; +import { alertError, dbg } from "@/lib/logging"; import { ProjectPatchArgs, ProjectSettingsPatchPayload } from "@/types/interfaces"; import useDeleteProjectPermanently from "./backend-api-hooks/internet-independant/useDeleteProjectPermanently"; import useUpdateProjectSyncSettings from "./useUpdateProjectSyncSettings"; diff --git a/src/hooks/useUpdateProjectSyncSettings.ts b/src/hooks/useUpdateProjectSyncSettings.ts index 56a4f00..6f41ceb 100644 --- a/src/hooks/useUpdateProjectSyncSettings.ts +++ b/src/hooks/useUpdateProjectSyncSettings.ts @@ -1,5 +1,5 @@ import { STORE_PATH } from "@/lib/constants"; -import { alertError, alertSuccess } from "@/lib/utils"; +import { alertError, alertSuccess } from "@/lib/logging"; import { useClient } from "@/providers/ReactQueryProvider"; import { Project, ProjectPatchArgs } from "@/types/interfaces"; import { useMutation } from "@tanstack/react-query"; diff --git a/src/lib/logging.ts b/src/lib/logging.ts new file mode 100644 index 0000000..176abb8 --- /dev/null +++ b/src/lib/logging.ts @@ -0,0 +1,60 @@ +import { DEFAULT_TOAST_OPTIONS } from "@/lib/constants"; +import { toast } from "sonner"; +import { invoke } from "@tauri-apps/api/core"; +import { truncateStr } from "./utils"; + +export function alertError(e: T, description?: string) { + let errorMsg = e instanceof Error && e.message ? e.message : String(e); + errorMsg = trimFunctionNameFromLog(errorMsg); + toast.error(truncateStr(errorMsg, 200), { + ...DEFAULT_TOAST_OPTIONS, + description: truncateStr(description || "", 400), + }); + persistOrConsoleLog("ERROR", errorMsg, description); +} + +export function alertInfo(info: T, description?: string) { + let infoMsg = String(info); + infoMsg = infoMsg.replace(/\[.*?\]/g, "").trim(); // remove [] + toast(infoMsg, { ...DEFAULT_TOAST_OPTIONS, description }); + persistOrConsoleLog("INFO", infoMsg, description); +} + +export function alertSuccess(title: T, description?: string) { + let successMsg = String(title); + successMsg = successMsg.replace(/\[.*?\]/g, "").trim(); // remove [] + toast.success(successMsg, { ...DEFAULT_TOAST_OPTIONS, description }); + persistOrConsoleLog("SUCCESS", successMsg, description); +} + +export function dbg(...args: unknown[]) { + persistOrConsoleLog("INFO", "debug", undefined, args); +} + +export function logError(...args: unknown[]) { + persistOrConsoleLog("ERROR", "error", undefined, args); +} + +export function logInfo(...args: unknown[]) { + persistOrConsoleLog("INFO", "info", undefined, args); +} + +export function trimFunctionNameFromLog(log: string) { + log = log + .trim() + .replace(/\[.*?\]/g, "") + .trim(); // remove [] + return log; +} + +function persistOrConsoleLog(log_type: "INFO" | "ERROR" | "SUCCESS", title: string, body?: string, context?: unknown) { + const log = { + log_type, + title, + body, + context: JSON.stringify(context), + }; + + if (import.meta.env.PROD) invoke("persist_log", { log }); + else console.log(log); +} diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 9905442..1543084 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,8 +1,7 @@ -import { DEFAULT_TOAST_OPTIONS, STORE_PATH } from "@/lib/constants"; +import { STORE_PATH } from "@/lib/constants"; import { load } from "@tauri-apps/plugin-store"; import { clsx, type ClassValue } from "clsx"; import { twMerge } from "tailwind-merge"; -import { toast } from "sonner"; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); @@ -16,50 +15,6 @@ export function truncateStr(str: string, length: number) { return str.length > length ? str.substring(0, length - 1) : str; } -export function trimFunctionNameFromLog(log: string) { - log = log - .trim() - .replace(/\[.*?\]/g, "") - .trim(); // remove [] - return log; -} - -export function alertError(e: T, description?: string) { - logError(e); - let errorMsg = e instanceof Error && e.message ? e.message : String(e); - errorMsg = trimFunctionNameFromLog(errorMsg); - toast.error(truncateStr(errorMsg, 200), { - ...DEFAULT_TOAST_OPTIONS, - description: truncateStr(description || "", 400), - }); -} - -export function alertInfo(info: T, description?: string) { - logInfo(info); - let infoMsg = String(info); - infoMsg = infoMsg.replace(/\[.*?\]/g, "").trim(); // remove [] - toast(infoMsg, { ...DEFAULT_TOAST_OPTIONS, description }); -} - -export function alertSuccess(info: T, description?: string) { - logInfo(info); - let infoMsg = String(info); - infoMsg = infoMsg.replace(/\[.*?\]/g, "").trim(); // remove [] - toast.success(infoMsg, { ...DEFAULT_TOAST_OPTIONS, description }); -} - -export function dbg(...args: unknown[]) { - console.log(...args); -} - -export function logError(...args: unknown[]) { - console.error(...args); -} - -export function logInfo(...args: unknown[]) { - console.log(...args); -} - export function wait(seconds: number) { return new Promise((resolve) => setTimeout(resolve, seconds * 1000)); } diff --git a/src/providers/ConnectionStatusProvider.tsx b/src/providers/ConnectionStatusProvider.tsx index b74a6eb..bebc6da 100644 --- a/src/providers/ConnectionStatusProvider.tsx +++ b/src/providers/ConnectionStatusProvider.tsx @@ -1,5 +1,5 @@ import useIsOnline from "@/hooks/useIsOnline"; -import { alertError } from "@/lib/utils"; +import { alertError } from "@/lib/logging"; import React, { PropsWithChildren, useContext } from "react"; const connectivityContext = React.createContext(true); diff --git a/src/providers/SyncedProjectsProvider.tsx b/src/providers/SyncedProjectsProvider.tsx index 59a3fcb..51e8434 100644 --- a/src/providers/SyncedProjectsProvider.tsx +++ b/src/providers/SyncedProjectsProvider.tsx @@ -1,4 +1,4 @@ -import { dbg } from "@/lib/utils"; +import { dbg } from "@/lib/logging"; import React from "react"; const syncedProjectsContext = React.createContext<{ From f186ef32ca7ef71c8962a53df0988e25a266b460 Mon Sep 17 00:00:00 2001 From: russellgn Date: Sun, 10 Aug 2025 14:35:59 +0200 Subject: [PATCH 6/7] doc: update todos --- TODO-UI.md | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 TODO-UI.md diff --git a/TODO-UI.md b/TODO-UI.md deleted file mode 100644 index 8dc4dc5..0000000 --- a/TODO-UI.md +++ /dev/null @@ -1,4 +0,0 @@ -# UI - -1. progress feedback for everything -2. debug dump export From 5955bcb82d8801965c95259af95fbc1078840be7 Mon Sep 17 00:00:00 2001 From: russellgn Date: Sun, 10 Aug 2025 14:51:37 +0200 Subject: [PATCH 7/7] build: add artifact upload step for build outputs --- .github/workflows/test_build.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/test_build.yaml b/.github/workflows/test_build.yaml index a7ce62e..8592521 100644 --- a/.github/workflows/test_build.yaml +++ b/.github/workflows/test_build.yaml @@ -80,3 +80,10 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: ${{ matrix.args }} + + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + with: + name: build-${{ matrix.platform }} + path: | + src-tauri/target/release/**