update to tauri v2-rc, update rust version, frontend now uses tauri_plugin_log
This commit is contained in:
@ -1,23 +1,33 @@
|
||||
<script lang="ts">
|
||||
let status = 'Initializing...';
|
||||
import { invoke } from '@tauri-apps/api/tauri';
|
||||
import { dialog, clipboard } from '@tauri-apps/api';
|
||||
import { info, error } from '@tauri-apps/plugin-log';
|
||||
import { invoke } from '@tauri-apps/api/core';
|
||||
import { writeText } from '@tauri-apps/plugin-clipboard-manager';
|
||||
import { message } from '@tauri-apps/plugin-dialog';
|
||||
import { awaiter } from '$lib/utils';
|
||||
import { onMount } from 'svelte';
|
||||
import type { Config } from '$lib/types';
|
||||
import { isPermissionGranted, requestPermission } from '@tauri-apps/api/notification';
|
||||
import { isPermissionGranted, requestPermission } from '@tauri-apps/plugin-notification';
|
||||
|
||||
let status = 'Initializing...';
|
||||
info(
|
||||
`[FanslySync::init] Marking beginning of initialization and logfile session. Current time: ${new Date().toISOString()}`
|
||||
);
|
||||
|
||||
onMount(async () => {
|
||||
info(`[FanslySync::init] onMount() called. Starting initialization...`);
|
||||
info(`[FanslySync::init] Initializing configuration...`);
|
||||
const [_, configInitError] = await awaiter(invoke('init_config'));
|
||||
|
||||
if (configInitError) {
|
||||
error(`[FanslySync::init] Failed to initialize configuration. Error: ${configInitError}`);
|
||||
error(`[FanslySync::init] Initialization failed due to configuration error. Exiting...`);
|
||||
status = 'Failed to initialize configuration';
|
||||
await dialog.message(
|
||||
await message(
|
||||
`Something went wrong while initializing the configuration. We've copied the error to your clipboard. Please contact us.\n\nError: ${configInitError}\n\nThe application will now close.`,
|
||||
{ title: 'FanslySync | Initialization Error', type: 'error' }
|
||||
{ title: 'FanslySync | Initialization Error', kind: 'error' }
|
||||
);
|
||||
|
||||
await clipboard.writeText(configInitError);
|
||||
await writeText(configInitError);
|
||||
invoke('quit', { code: 1 });
|
||||
return;
|
||||
}
|
||||
@ -25,25 +35,39 @@
|
||||
const [config, configError] = await awaiter(invoke('get_config') as Promise<Config>);
|
||||
|
||||
if (configError || !config || config === null) {
|
||||
error(
|
||||
`[FanslySync::init] Failed to get configuration. Error: ${configError ?? 'Config was null'}`
|
||||
);
|
||||
status = 'Failed to get configuration';
|
||||
await dialog.message(
|
||||
await message(
|
||||
`Something went wrong while getting the configuration. We've copied the error to your clipboard. Please contact us.\n\nError: ${configError ?? 'Config was null'}\n\nThe application will now close.`,
|
||||
{ title: 'FanslySync | Configuration Error', type: 'error' }
|
||||
{ title: 'FanslySync | Configuration Error', kind: 'error' }
|
||||
);
|
||||
|
||||
await clipboard.writeText(configError);
|
||||
await writeText(configError);
|
||||
invoke('quit', { code: 1 });
|
||||
return;
|
||||
}
|
||||
|
||||
info(
|
||||
`[FanslySync::init] Configuration initialized successfully. Checking notification permissions...`
|
||||
);
|
||||
|
||||
const permissionGranted = await isPermissionGranted();
|
||||
if (!permissionGranted) {
|
||||
info(`[FanslySync::init] Notification permissions not granted. Requesting permission...`);
|
||||
let result = await requestPermission();
|
||||
if (result !== 'granted') {
|
||||
error(
|
||||
`[FanslySync::init] Notification permission denied but we require it to function properly.`
|
||||
);
|
||||
error(
|
||||
`[FanslySync::init] Initialization failed due to notification permission error. Exiting...`
|
||||
);
|
||||
status = 'Notification permission denied';
|
||||
await dialog.message(
|
||||
await message(
|
||||
`FanslySync requires notification permissions to function properly. Please enable notifications and restart the application.`,
|
||||
{ title: 'FanslySync | Notification Permission Error', type: 'error' }
|
||||
{ title: 'FanslySync | Notification Permission Error', kind: 'error' }
|
||||
);
|
||||
|
||||
invoke('quit', { code: 1 });
|
||||
@ -51,14 +75,19 @@
|
||||
}
|
||||
}
|
||||
|
||||
info(`[FanslySync::init] Notification permissions granted. Checking if first run...`);
|
||||
status = 'Initialization complete!';
|
||||
|
||||
if (config.is_first_run) {
|
||||
info(`[FanslySync::init] First run detected. Redirecting to /setup...`);
|
||||
// Navigate to /setup
|
||||
window.location.href = '/setup';
|
||||
} else {
|
||||
// todo: set jwt for future requests
|
||||
info(`[FanslySync::init] Not first run. Setting Fansly token...`);
|
||||
await invoke('fansly_set_token', { token: config.fansly_token });
|
||||
info(`[FanslySync::init] Fansly token set.`);
|
||||
info(`[FanslySync::init] Initialization complete. Redirecting to /home...`);
|
||||
window.location.href = '/home';
|
||||
}
|
||||
});
|
||||
|
@ -1,19 +1,20 @@
|
||||
<script lang="ts">
|
||||
import { invoke } from '@tauri-apps/api/tauri';
|
||||
import { info, error } from '@tauri-apps/plugin-log';
|
||||
import { awaiter } from '$lib/utils';
|
||||
import { onMount } from 'svelte';
|
||||
import type { Config, SyncData } from '$lib/types';
|
||||
import { clipboard, dialog } from '@tauri-apps/api';
|
||||
import { slide } from 'svelte/transition';
|
||||
import { sendNotification } from '@tauri-apps/api/notification';
|
||||
import { platform } from '@tauri-apps/api/os';
|
||||
import { checkUpdate, installUpdate, type UpdateManifest } from '@tauri-apps/api/updater';
|
||||
import { sendNotification } from '@tauri-apps/plugin-notification';
|
||||
import { platform } from '@tauri-apps/plugin-os';
|
||||
import { check, Update } from '@tauri-apps/plugin-updater';
|
||||
import { getVersion, getTauriVersion } from '@tauri-apps/api/app';
|
||||
import { ask } from '@tauri-apps/api/dialog';
|
||||
import { invoke } from '@tauri-apps/api/core';
|
||||
import { ask, message } from '@tauri-apps/plugin-dialog';
|
||||
import { writeText } from '@tauri-apps/plugin-clipboard-manager';
|
||||
|
||||
let loadingSync = true;
|
||||
let upToDate: boolean | null = null;
|
||||
let updateMeta: UpdateManifest | null = null;
|
||||
let updateData: Update | null = null;
|
||||
let versionData = {
|
||||
appVersion: 'Loading...',
|
||||
tauriVersion: 'Loading...'
|
||||
@ -30,34 +31,53 @@
|
||||
let config: Config | null = null;
|
||||
|
||||
onMount(async () => {
|
||||
info(`[FanslySync::page_init:home] onMount() called. Starting page initialization...`);
|
||||
const [configData, configError] = await awaiter(invoke('get_config') as Promise<Config>);
|
||||
|
||||
if (configError || !configData) {
|
||||
await dialog.message(
|
||||
error(
|
||||
`[FanslySync::page_init:home] Failed to get configuration. Error: ${configError ?? 'Config was null'}`
|
||||
);
|
||||
info(
|
||||
`[FanslySync::page_init:home] Page Initialization failed due to configuration error. Exiting...`
|
||||
);
|
||||
await message(
|
||||
`Something went wrong while getting the configuration. We've copied the error to your clipboard. Please report this issue on GitHub.\n\nError: ${configError ?? 'Config was null'}\n\nThe application will now close.`,
|
||||
{ title: 'FanslySync | Configuration Error', type: 'error' }
|
||||
{ title: 'FanslySync | Configuration Error', kind: 'error' }
|
||||
);
|
||||
|
||||
await clipboard.writeText(configError);
|
||||
await writeText(configError);
|
||||
invoke('quit', { code: 1 });
|
||||
return;
|
||||
}
|
||||
|
||||
info(
|
||||
`[FanslySync::page_init:home] Configuration initialized successfully. Checking for updates...`
|
||||
);
|
||||
config = configData;
|
||||
loadingSync = false;
|
||||
|
||||
const updateStatus = await checkUpdate();
|
||||
upToDate = !updateStatus.shouldUpdate;
|
||||
updateMeta = updateStatus.manifest || null;
|
||||
console.log('[updateStatus]', updateStatus);
|
||||
console.log('[upToDate]', upToDate);
|
||||
console.log('[updateMeta]', updateMeta);
|
||||
const updateStatus = await check();
|
||||
upToDate = !updateStatus?.available ?? false;
|
||||
updateData = updateStatus;
|
||||
info(
|
||||
`[FanslySync::page_init:home] Update check completed. Up to date: ${upToDate}, Update data: ${updateData}`
|
||||
);
|
||||
info(`[FanslySync::page_init:home] Getting app and Tauri versions...`);
|
||||
|
||||
versionData.appVersion = await getVersion();
|
||||
versionData.tauriVersion = await getTauriVersion();
|
||||
|
||||
info(
|
||||
`[FanslySync::page_init:home] App and Tauri versions fetched. We are running App version: ${versionData.appVersion}, atop Tauri version: ${versionData.tauriVersion}`
|
||||
);
|
||||
|
||||
info(`[FanslySync::page_init:home] Page initialization completed successfully.`);
|
||||
});
|
||||
|
||||
async function syncNow() {
|
||||
info(`[FanslySync::syncNow] Starting manual sync...`);
|
||||
|
||||
syncState.error = false;
|
||||
syncState.success = false;
|
||||
syncState.syncing = true;
|
||||
@ -67,6 +87,9 @@
|
||||
console.log(syncData, syncError);
|
||||
|
||||
if (syncError || syncData === null) {
|
||||
error(
|
||||
`[FanslySync::syncNow] Failed to sync data. Error: ${syncError ?? 'Sync data was null'}`
|
||||
);
|
||||
syncState.syncing = false;
|
||||
syncState.error = true;
|
||||
syncState.message = syncError ?? 'Sync data was null';
|
||||
@ -83,6 +106,7 @@
|
||||
invoke('save_config', { config }) as Promise<boolean>
|
||||
);
|
||||
if (saveConfigError) {
|
||||
error(`[FanslySync::syncNow] Failed to save config data. Error: ${saveConfigError}`);
|
||||
syncState.syncing = false;
|
||||
syncState.error = true;
|
||||
syncState.message = saveConfigError ?? 'Save config data was null';
|
||||
@ -92,12 +116,12 @@
|
||||
syncState.syncing = false;
|
||||
syncState.success = true;
|
||||
|
||||
const platformName = await platform();
|
||||
const platformName = platform();
|
||||
let soundName;
|
||||
|
||||
if (platformName === 'win32') {
|
||||
if (platformName === 'windows') {
|
||||
soundName = 'ms-winsoundevent:Notification.Default';
|
||||
} else if (platformName === 'darwin') {
|
||||
} else if (platformName === 'macos') {
|
||||
soundName = 'Ping';
|
||||
} else {
|
||||
soundName = 'completion-sucess';
|
||||
@ -108,21 +132,32 @@
|
||||
body: 'Data synced successfully. Please look at the app for more details.',
|
||||
sound: soundName
|
||||
});
|
||||
|
||||
info(`[FanslySync::syncNow] Manual sync completed successfully.`);
|
||||
}
|
||||
|
||||
async function doUpdate() {
|
||||
if (!updateData || !updateData.available) {
|
||||
message('You are up to date! Current version: ' + versionData.appVersion, {
|
||||
title: 'FanslySync | Update',
|
||||
kind: 'info'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
const confirm = await ask(
|
||||
`An update is available for FanslySync. Would you like to update now?\n\nCurrent version: ${versionData.appVersion}\nNew (remote) version: ${updateMeta?.version ?? 'Unknown'}`,
|
||||
`An update is available for FanslySync. Would you like to update now?\n\nCurrent version: ${versionData.appVersion}\nNew (remote) version: ${updateData?.version ?? 'Unknown'}\n\nThe application will close after the update completes.`,
|
||||
{
|
||||
title: 'Update Available',
|
||||
okLabel: 'Yes',
|
||||
cancelLabel: 'No',
|
||||
type: 'info'
|
||||
kind: 'info'
|
||||
}
|
||||
);
|
||||
|
||||
if (confirm) {
|
||||
await installUpdate();
|
||||
await updateData.downloadAndInstall();
|
||||
await invoke('quit', { code: 0 });
|
||||
} else {
|
||||
console.log('User declined update');
|
||||
}
|
||||
@ -312,7 +347,7 @@
|
||||
<button
|
||||
class="bg-white text-blue-600 px-2 py-1 rounded-lg"
|
||||
on:click={() => {
|
||||
clipboard.writeText(syncState.url);
|
||||
writeText(syncState.url);
|
||||
}}
|
||||
>
|
||||
Copy
|
||||
|
@ -9,23 +9,23 @@
|
||||
fanslyToken: ''
|
||||
};
|
||||
|
||||
import { invoke } from '@tauri-apps/api/tauri';
|
||||
import { dialog, clipboard } from '@tauri-apps/api';
|
||||
import { invoke } from '@tauri-apps/api/core';
|
||||
import { writeText } from '@tauri-apps/plugin-clipboard-manager';
|
||||
import { message } from '@tauri-apps/plugin-dialog';
|
||||
import { awaiter } from '$lib/utils';
|
||||
import { onMount } from 'svelte';
|
||||
import type { AccountInfo, Config } from '$lib/types';
|
||||
import NoWorkResult from 'postcss/lib/no-work-result';
|
||||
|
||||
onMount(async () => {
|
||||
const [config, configError] = await awaiter(invoke('get_config'));
|
||||
|
||||
if (configError) {
|
||||
await dialog.message(
|
||||
await message(
|
||||
`Something went wrong while getting the configuration. We've copied the error to your clipboard. Please report this issue on GitHub.\n\nError: ${configError}\n\nThe application will now close.`,
|
||||
{ title: 'BambuConnect | Configuration Error', type: 'error' }
|
||||
{ title: 'BambuConnect | Configuration Error', kind: 'error' }
|
||||
);
|
||||
|
||||
await clipboard.writeText(configError);
|
||||
await writeText(configError);
|
||||
invoke('quit', { code: 1 });
|
||||
return;
|
||||
}
|
||||
@ -37,12 +37,12 @@
|
||||
const [config, configError] = (await awaiter(invoke('get_config'))) as [Config, any | null];
|
||||
|
||||
if (configError) {
|
||||
await dialog.message(
|
||||
await message(
|
||||
`Something went wrong while getting the configuration. We've copied the error to your clipboard. Please report this issue on GitHub.\n\nError: ${configError}\n\nThe application will now close.`,
|
||||
{ title: 'BambuConnect | Configuration Error', type: 'error' }
|
||||
{ title: 'BambuConnect | Configuration Error', kind: 'error' }
|
||||
);
|
||||
|
||||
await clipboard.writeText(configError);
|
||||
await writeText(configError);
|
||||
invoke('quit', { code: 1 });
|
||||
return;
|
||||
}
|
||||
|
Reference in New Issue
Block a user