desktop: armazenar dados em pasta 'data' ao lado do executável (fallback AppData) e remover NSIS v2 inválido

- main.tsx: resolveDataDir usa executableDir/data quando possível; se falhar, cai para appLocalDataDir
- tauri.conf.json: remove bloco windows.nsis inválido no schema v2 para build passar

Objetivo: instalar dados fora do AppData (ex.: C:\Raven\data) quando o diretório de instalação permitir escrita.
This commit is contained in:
Esdras Renan 2025-10-14 15:49:41 -03:00
parent 0b39bcb56c
commit 7bc8a1d945
2 changed files with 16 additions and 11 deletions

View file

@ -44,14 +44,6 @@
"icons/icon.icns", "icons/icon.icns",
"icons/icon.png", "icons/icon.png",
"icons/Raven.png" "icons/Raven.png"
], ]
"windows": {
"nsis": {
"installMode": "perMachine",
"allowToChangeInstallDirectory": true,
"installDirName": "Raven",
"createDesktopShortcut": true
}
}
} }
} }

View file

@ -3,7 +3,8 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react"
import { createRoot } from "react-dom/client" import { createRoot } from "react-dom/client"
import { invoke } from "@tauri-apps/api/core" import { invoke } from "@tauri-apps/api/core"
import { Store } from "@tauri-apps/plugin-store" import { Store } from "@tauri-apps/plugin-store"
import { appLocalDataDir } from "@tauri-apps/api/path" import { appLocalDataDir, executableDir, join } from "@tauri-apps/api/path"
import { createDir, exists } from "@tauri-apps/api/fs"
import { ExternalLink, Eye, EyeOff, GalleryVerticalEnd, Loader2, RefreshCw } from "lucide-react" import { ExternalLink, Eye, EyeOff, GalleryVerticalEnd, Loader2, RefreshCw } from "lucide-react"
import { Tabs, TabsContent, TabsList, TabsTrigger } from "./components/ui/tabs" import { Tabs, TabsContent, TabsList, TabsTrigger } from "./components/ui/tabs"
import { cn } from "./lib/utils" import { cn } from "./lib/utils"
@ -103,8 +104,20 @@ function normalizeUrl(value?: string | null, fallback = DEFAULT_APP_URL) {
const appUrl = normalizeUrl(import.meta.env.VITE_APP_URL, DEFAULT_APP_URL) const appUrl = normalizeUrl(import.meta.env.VITE_APP_URL, DEFAULT_APP_URL)
const apiBaseUrl = normalizeUrl(import.meta.env.VITE_API_BASE_URL, appUrl) const apiBaseUrl = normalizeUrl(import.meta.env.VITE_API_BASE_URL, appUrl)
async function resolveDataDir(): Promise<string> {
try {
const exe = await executableDir()
const dir = await join(exe, "data")
const ok = await exists(dir).catch(() => false)
if (!ok) await createDir(dir, { recursive: true })
return dir
} catch {
return await appLocalDataDir()
}
}
async function loadStore(): Promise<Store> { async function loadStore(): Promise<Store> {
const dir = await appLocalDataDir() const dir = await resolveDataDir()
return await Store.load(STORE_FILENAME, { dir }) return await Store.load(STORE_FILENAME, { dir })
} }