update to tauri v2-rc, update rust version, frontend now uses tauri_plugin_log

This commit is contained in:
Tanner Sommers 2024-08-02 15:35:45 -05:00
parent af7afe9a54
commit c6afae6cb6
17 changed files with 7624 additions and 958 deletions

152
package-lock.json generated
View File

@ -8,14 +8,20 @@
"name": "fanslysync-desktop",
"version": "0.0.1",
"dependencies": {
"@tauri-apps/api": "^1.6.0"
"@tauri-apps/api": "^2.0.0-rc.0",
"@tauri-apps/plugin-clipboard-manager": "^2.0.0-rc.0",
"@tauri-apps/plugin-dialog": "^2.0.0-rc.0",
"@tauri-apps/plugin-log": "^2.0.0-rc.0",
"@tauri-apps/plugin-notification": "^2.0.0-rc.0",
"@tauri-apps/plugin-os": "^2.0.0-rc.0",
"@tauri-apps/plugin-updater": "^2.0.0-rc.0"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.0.0",
"@sveltejs/adapter-static": "^3.0.2",
"@sveltejs/kit": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^3.0.0",
"@tauri-apps/cli": "^1.6.0",
"@tauri-apps/cli": "^2.0.0-rc.0",
"@types/eslint": "^8.56.7",
"autoprefixer": "^10.4.19",
"eslint": "^9.0.0",
@ -1000,11 +1006,11 @@
}
},
"node_modules/@tauri-apps/api": {
"version": "1.6.0",
"resolved": "https://npm.hep.gg/@tauri-apps/api/-/api-1.6.0.tgz",
"integrity": "sha512-rqI++FWClU5I2UBp4HXFvl+sBWkdigBkxnpJDQUWttNyG7IZP4FwQGhTNL5EOw0vI8i6eSAJ5frLqO7n7jbJdg==",
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/api/-/api-2.0.0-rc.0.tgz",
"integrity": "sha512-v454Qs3REHc3Za59U+/eSmBsdmF+3NE5+76+lFDaitVqN4ZglDHENDaMARYKGJVZuxiSkzyqG0SeG7lLQjVkPA==",
"engines": {
"node": ">= 14.6.0",
"node": ">= 18.18",
"npm": ">= 6.6.0",
"yarn": ">= 1.19.1"
},
@ -1014,9 +1020,9 @@
}
},
"node_modules/@tauri-apps/cli": {
"version": "1.6.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli/-/cli-1.6.0.tgz",
"integrity": "sha512-DBBpBl6GhTzm8ImMbKkfaZ4fDTykWrC7Q5OXP4XqD91recmDEn2LExuvuiiS3HYe7uP8Eb5B9NPHhqJb+Zo7qQ==",
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli/-/cli-2.0.0-rc.0.tgz",
"integrity": "sha512-X9N/R7e3zeTpU0HgQi2kaNYncMFoSTzXstnUyGOcKrJcCkR4ebbA2nYqhGvIPfglLKHNFRTZwfPNhixx2Ftxxg==",
"dev": true,
"bin": {
"tauri": "tauri.js"
@ -1029,22 +1035,22 @@
"url": "https://opencollective.com/tauri"
},
"optionalDependencies": {
"@tauri-apps/cli-darwin-arm64": "1.6.0",
"@tauri-apps/cli-darwin-x64": "1.6.0",
"@tauri-apps/cli-linux-arm-gnueabihf": "1.6.0",
"@tauri-apps/cli-linux-arm64-gnu": "1.6.0",
"@tauri-apps/cli-linux-arm64-musl": "1.6.0",
"@tauri-apps/cli-linux-x64-gnu": "1.6.0",
"@tauri-apps/cli-linux-x64-musl": "1.6.0",
"@tauri-apps/cli-win32-arm64-msvc": "1.6.0",
"@tauri-apps/cli-win32-ia32-msvc": "1.6.0",
"@tauri-apps/cli-win32-x64-msvc": "1.6.0"
"@tauri-apps/cli-darwin-arm64": "2.0.0-rc.0",
"@tauri-apps/cli-darwin-x64": "2.0.0-rc.0",
"@tauri-apps/cli-linux-arm-gnueabihf": "2.0.0-rc.0",
"@tauri-apps/cli-linux-arm64-gnu": "2.0.0-rc.0",
"@tauri-apps/cli-linux-arm64-musl": "2.0.0-rc.0",
"@tauri-apps/cli-linux-x64-gnu": "2.0.0-rc.0",
"@tauri-apps/cli-linux-x64-musl": "2.0.0-rc.0",
"@tauri-apps/cli-win32-arm64-msvc": "2.0.0-rc.0",
"@tauri-apps/cli-win32-ia32-msvc": "2.0.0-rc.0",
"@tauri-apps/cli-win32-x64-msvc": "2.0.0-rc.0"
}
},
"node_modules/@tauri-apps/cli-darwin-arm64": {
"version": "1.6.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-1.6.0.tgz",
"integrity": "sha512-SNRwUD9nqGxY47mbY1CGTt/jqyQOU7Ps7Mx/mpgahL0FVUDiCEY/5L9QfEPPhEgccgcelEVn7i6aQHIkHyUtCA==",
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-rc.0.tgz",
"integrity": "sha512-jpQc++6ESFUuBpoXvJNPTRtrmToMIByOynZ4K5SAwI9RkKUikSaDmlRZV0GisOVPT7TT08khk7MPtAQeFyjqwA==",
"cpu": [
"arm64"
],
@ -1058,9 +1064,9 @@
}
},
"node_modules/@tauri-apps/cli-darwin-x64": {
"version": "1.6.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-1.6.0.tgz",
"integrity": "sha512-g2/uDR/eeH2arvuawA4WwaEOqv/7jDO/ZLNI3JlBjP5Pk8GGb3Kdy0ro1xQzF94mtk2mOnOXa4dMgAet4sUJ1A==",
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-rc.0.tgz",
"integrity": "sha512-EnqsgcNUwH29YjQ4JdBID5kILQQdIJgZ36VQgtju/BBvnd1lr+6Bswdk1/4y41hhAVz9WyHeMCnTH33CSKvNxw==",
"cpu": [
"x64"
],
@ -1074,9 +1080,9 @@
}
},
"node_modules/@tauri-apps/cli-linux-arm-gnueabihf": {
"version": "1.6.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-1.6.0.tgz",
"integrity": "sha512-EVwf4oRkQyG8BpSrk0gqO7oA0sDM2MdNDtJpMfleYFEgCxLIOGZKNqaOW3M7U+0Y4qikmG3TtRK+ngc8Ymtrjg==",
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-rc.0.tgz",
"integrity": "sha512-YKg/qThAmQYRToiV8lx/DvMf0VaUJAutIfv8ALq9Or4zdg7mZlAlKvF+7lZQQRmKhQ62+0gnoJS2HyN8feaagw==",
"cpu": [
"arm"
],
@ -1090,9 +1096,9 @@
}
},
"node_modules/@tauri-apps/cli-linux-arm64-gnu": {
"version": "1.6.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-1.6.0.tgz",
"integrity": "sha512-YdpY17cAySrhK9dX4BUVEmhAxE2o+6skIEFg8iN/xrDwRxhaNPI9I80YXPatUTX54Kx55T5++25VJG9+3iw83A==",
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-rc.0.tgz",
"integrity": "sha512-UnflWuNhH/u41GSmG1jm6qhWUM4o1AB463QCaf2fAjLo5GWiI78U6rJOOXZvOOmWIQuzsmAUZjNDORWW13+osA==",
"cpu": [
"arm64"
],
@ -1106,9 +1112,9 @@
}
},
"node_modules/@tauri-apps/cli-linux-arm64-musl": {
"version": "1.6.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.6.0.tgz",
"integrity": "sha512-4U628tuf2U8pMr4tIBJhEkrFwt+46dwhXrDlpdyWSZtnop5RJAVKHODm0KbWns4xGKfTW1F3r6sSv+2ZxLcISA==",
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-rc.0.tgz",
"integrity": "sha512-sWRaDyb332gtHWHr0KvoLzkzvXqRpZ0vpQYxKF2/mIZtaUuMtU56GmRwFVX4VjQYgWb3yWmzTr+tEKjCjXbjng==",
"cpu": [
"arm64"
],
@ -1122,9 +1128,9 @@
}
},
"node_modules/@tauri-apps/cli-linux-x64-gnu": {
"version": "1.6.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-1.6.0.tgz",
"integrity": "sha512-AKRzp76fVUaJyXj5KRJT9bJyhwZyUnRQU0RqIRqOtZCT5yr6qGP8rjtQ7YhCIzWrseBlOllc3Qvbgw3Yl0VQcA==",
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-rc.0.tgz",
"integrity": "sha512-1dokW+9ZfhwzwYz42jYR5A0/VnGoEGVW7HyN1N6KvHeL1FpSbh0LoTsDODjVjZSjXd62+Aac/stbJqBZChQWbA==",
"cpu": [
"x64"
],
@ -1138,9 +1144,9 @@
}
},
"node_modules/@tauri-apps/cli-linux-x64-musl": {
"version": "1.6.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-1.6.0.tgz",
"integrity": "sha512-0edIdq6aMBTaRMIXddHfyAFL361JqulLLd2Wi2aoOie7DkQ2MYh6gv3hA7NB9gqFwNIGE+xtJ4BkXIP2tSGPlg==",
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-rc.0.tgz",
"integrity": "sha512-7tb34p3vLEGS4pGRpmxcz7eq37yD7DVe4XFfgj8ZO0KsaRBVivzNK2snNDLnd0dVZcx/lJjZc8Cf0B5W1/x/Jw==",
"cpu": [
"x64"
],
@ -1154,9 +1160,9 @@
}
},
"node_modules/@tauri-apps/cli-win32-arm64-msvc": {
"version": "1.6.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-1.6.0.tgz",
"integrity": "sha512-QwWpWk4ubcwJ1rljsRAmINgB2AwkyzZhpYbalA+MmzyYMREcdXWGkyixWbRZgqc6fEWEBmq5UG73qz5eBJiIKg==",
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-rc.0.tgz",
"integrity": "sha512-Ilw3Gro8ZBew9yfBXcaET9lLj0g4jehWDMH6j2Wdje1rnvBbQShMaSn3WNMfJypyet5nqM88nGA3YipzmVcIBA==",
"cpu": [
"arm64"
],
@ -1170,9 +1176,9 @@
}
},
"node_modules/@tauri-apps/cli-win32-ia32-msvc": {
"version": "1.6.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-1.6.0.tgz",
"integrity": "sha512-Vtw0yxO9+aEFuhuxQ57ALG43tjECopRimRuKGbtZYDCriB/ty5TrT3QWMdy0dxBkpDTu3Rqsz30sbDzw6tlP3Q==",
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-rc.0.tgz",
"integrity": "sha512-AWzgDlvv0BssWH3aNsDXLRkKbGynWdm5X6DenSQKtZm5dmDBZsNlZRMgkyPb8WSHK/7ARznKs2OdnkuHWuh9ww==",
"cpu": [
"ia32"
],
@ -1186,9 +1192,9 @@
}
},
"node_modules/@tauri-apps/cli-win32-x64-msvc": {
"version": "1.6.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-1.6.0.tgz",
"integrity": "sha512-h54FHOvGi7+LIfRchzgZYSCHB1HDlP599vWXQQJ/XnwJY+6Rwr2E5bOe/EhqoG8rbGkfK0xX3KPAvXPbUlmggg==",
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-rc.0.tgz",
"integrity": "sha512-zmXDUkBmzZ6lk6jT6AoOAE2w+kmkLX5uf/vaJHHzE6WsrZ6UymH0HTLwbRXhaplvpnzXGVyLuSlv3/BK6Q69aQ==",
"cpu": [
"x64"
],
@ -1201,6 +1207,54 @@
"node": ">= 10"
}
},
"node_modules/@tauri-apps/plugin-clipboard-manager": {
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/plugin-clipboard-manager/-/plugin-clipboard-manager-2.0.0-rc.0.tgz",
"integrity": "sha512-2fS3wbRQEtorkk3Np2msJUeKCXRqLQ9sSo2FzlFdUPYNzThsu43uWCF55McGLAfltNOvXQIcQLUBf05jbBL/5w==",
"dependencies": {
"@tauri-apps/api": "^2.0.0-rc.0"
}
},
"node_modules/@tauri-apps/plugin-dialog": {
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/plugin-dialog/-/plugin-dialog-2.0.0-rc.0.tgz",
"integrity": "sha512-DPOXYe8SQ6Radk/67EOdaomlxL7oF99JO/ZUaPp1IBEs3Wro7lhlz63CfdKIBfKIZTLJLzP1R7/EiPL/GTA3Bg==",
"dependencies": {
"@tauri-apps/api": "^2.0.0-rc.0"
}
},
"node_modules/@tauri-apps/plugin-log": {
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/plugin-log/-/plugin-log-2.0.0-rc.0.tgz",
"integrity": "sha512-ztKfzUcq03dtr08vBu+xcwIEPusP6mCpuLAt6kpXEwG+HvYsC8e1/KFFokn3xvfwD+oBJ3UTL1h4kdM30GAqGw==",
"dependencies": {
"@tauri-apps/api": "^2.0.0-rc.0"
}
},
"node_modules/@tauri-apps/plugin-notification": {
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/plugin-notification/-/plugin-notification-2.0.0-rc.0.tgz",
"integrity": "sha512-0qsT/kvxQ6Ky4g6eQ4SUiHXzM4szTVc6thjz9vnGPYaApLoZrCJ9GdG+vEqeB+cT2dvE+wmxUFETh3ZXYVw8UA==",
"dependencies": {
"@tauri-apps/api": "^2.0.0-rc.0"
}
},
"node_modules/@tauri-apps/plugin-os": {
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/plugin-os/-/plugin-os-2.0.0-rc.0.tgz",
"integrity": "sha512-OWAl8mooKnGykSD4iog8WRqcnOSx0gGmTJBlEExHdFeIuOHg0Ezvd+WiVLhT9LBg7go3ibNWRWpe/ZG7YEp4Vw==",
"dependencies": {
"@tauri-apps/api": "^2.0.0-rc.0"
}
},
"node_modules/@tauri-apps/plugin-updater": {
"version": "2.0.0-rc.0",
"resolved": "https://npm.hep.gg/@tauri-apps/plugin-updater/-/plugin-updater-2.0.0-rc.0.tgz",
"integrity": "sha512-EKajf/sBpFif0cwXhTo3BmNvTZ2t2DDLRyhA8FFKugZNoOeqU97bHhPT5DIqMUPRE1tyDk9o7sXm8dKf7oz+EA==",
"dependencies": {
"@tauri-apps/api": "^2.0.0-rc.0"
}
},
"node_modules/@types/cookie": {
"version": "0.6.0",
"resolved": "https://npm.hep.gg/@types/cookie/-/cookie-0.6.0.tgz",

View File

@ -17,7 +17,7 @@
"@sveltejs/adapter-static": "^3.0.2",
"@sveltejs/kit": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^3.0.0",
"@tauri-apps/cli": "^1.6.0",
"@tauri-apps/cli": "^2.0.0-rc.0",
"@types/eslint": "^8.56.7",
"autoprefixer": "^10.4.19",
"eslint": "^9.0.0",
@ -37,6 +37,12 @@
},
"type": "module",
"dependencies": {
"@tauri-apps/api": "^1.6.0"
"@tauri-apps/api": "^2.0.0-rc.0",
"@tauri-apps/plugin-clipboard-manager": "^2.0.0-rc.0",
"@tauri-apps/plugin-dialog": "^2.0.0-rc.0",
"@tauri-apps/plugin-log": "^2.0.0-rc.0",
"@tauri-apps/plugin-notification": "^2.0.0-rc.0",
"@tauri-apps/plugin-os": "^2.0.0-rc.0",
"@tauri-apps/plugin-updater": "^2.0.0-rc.0"
}
}

2390
src-tauri/Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -7,22 +7,28 @@ license = ""
repository = ""
default-run = "app"
edition = "2021"
rust-version = "1.60"
rust-version = "1.80"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[build-dependencies]
tauri-build = { version = "1.5.3", features = [] }
tauri-build = { version = "2.0.0-rc", features = [] }
[dependencies]
serde_json = "1.0"
serde = { version = "1.0", features = ["derive"] }
tauri = { version = "1.7.0", features = [ "app-all", "updater", "os-all", "notification-all", "dialog-confirm", "clipboard-all", "dialog-message", "dialog-ask"] }
tauri = { version = "2.0.0-rc", features = [] }
dirs = "5.0.1"
reqwest = { version = "0.11.18", features = ["json"] }
lazy_static = "1.5.0"
tokio = { version = "1.29.1", features = ["full"] }
tokio-macros = "2.3.0"
tauri-plugin-os = "2.0.0-alpha.2"
tauri-plugin-dialog = "2.0.0-alpha.2"
tauri-plugin-clipboard-manager = "2.0.0-alpha.2"
tauri-plugin-notification = "2.0.0-alpha.3"
tauri-plugin-updater = "2.0.0-alpha.3"
tauri-plugin-log = "2.0.0-rc.0"
[features]
# this feature is used for production builds or when `devPath` points to the filesystem and the built-in dev server is disabled.

View File

@ -1,3 +1,3 @@
fn main() {
tauri_build::build()
tauri_build::build()
}

View File

@ -0,0 +1,33 @@
{
"identifier": "migrated",
"description": "permissions that were migrated from v1",
"local": true,
"windows": [
"main"
],
"permissions": [
"core:default",
"dialog:allow-message",
"dialog:allow-ask",
"dialog:allow-confirm",
"notification:default",
"os:allow-platform",
"os:allow-version",
"os:allow-os-type",
"os:allow-family",
"os:allow-arch",
"os:allow-exe-extension",
"os:allow-locale",
"os:allow-hostname",
"clipboard-manager:allow-read-text",
"clipboard-manager:allow-write-text",
"core:app:allow-app-show",
"core:app:allow-app-hide",
"os:default",
"dialog:default",
"clipboard-manager:default",
"notification:default",
"updater:default",
"log:default"
]
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"migrated":{"identifier":"migrated","description":"permissions that were migrated from v1","local":true,"windows":["main"],"permissions":["core:default","dialog:allow-message","dialog:allow-ask","dialog:allow-confirm","notification:default","os:allow-platform","os:allow-version","os:allow-os-type","os:allow-family","os:allow-arch","os:allow-exe-extension","os:allow-locale","os:allow-hostname","clipboard-manager:allow-read-text","clipboard-manager:allow-write-text","core:app:allow-app-show","core:app:allow-app-hide","os:default","dialog:default","clipboard-manager:default","notification:default","updater:default","log:default"]}}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -99,7 +99,9 @@ impl Fansly {
);
headers.insert(
reqwest::header::USER_AGENT,
"FanslySync/1.0.0 (tanner@teamhydra.dev)".parse().unwrap(),
"FanslySync/1.0.0 (tanner@fanslycreatorbot.com)"
.parse()
.unwrap(),
);
headers.insert(
@ -137,7 +139,9 @@ impl Fansly {
);
headers.insert(
reqwest::header::USER_AGENT,
"FanslySync/1.0.0 (sticks@teamhydra.dev)".parse().unwrap(),
"FanslySync/1.0.0 (tanner@fanslycreatorbot.com)"
.parse()
.unwrap(),
);
headers.insert(
reqwest::header::CONTENT_TYPE,

View File

@ -1,2 +1,2 @@
pub mod config;
pub mod fansly;
pub mod fansly;

View File

@ -5,13 +5,49 @@ mod commands;
mod handlers;
mod structs;
use std::fs;
use std::io;
use commands::config::{get_config, init_config, save_config};
use commands::fansly::{fansly_get_me, fansly_set_token, fansly_sync};
use commands::utils::quit;
use tauri_plugin_log::{Target, TargetKind};
fn get_log_path() -> io::Result<String> {
let mut config_dir = dirs::config_dir().ok_or_else(|| {
io::Error::new(
io::ErrorKind::NotFound,
"Could not determine user's config directory",
)
})?;
config_dir.push("FanslySync");
fs::create_dir_all(&config_dir)?;
config_dir.push("runtime");
// Return the path as a string
Ok(config_dir.to_string_lossy().to_string())
}
#[tokio::main]
async fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_log::Builder::new().build())
.plugin(tauri_plugin_notification::init())
.plugin(tauri_plugin_clipboard_manager::init())
.plugin(tauri_plugin_dialog::init())
.plugin(tauri_plugin_os::init())
.plugin(tauri_plugin_updater::Builder::new().build())
.plugin(
tauri_plugin_log::Builder::new()
.targets([
Target::new(TargetKind::Stdout),
Target::new(TargetKind::LogDir {
file_name: Some(get_log_path().unwrap()),
}),
Target::new(TargetKind::Webview),
])
.build(),
)
.invoke_handler(tauri::generate_handler![
init_config,
get_config,

View File

@ -1,92 +1,69 @@
{
"$schema": "../node_modules/@tauri-apps/cli/schema.json",
"build": {
"beforeBuildCommand": "npm run build",
"beforeDevCommand": "npm run dev",
"devPath": "http://localhost:5173",
"distDir": "../build"
},
"package": {
"productName": "FanslySync",
"version": "0.1.2"
},
"tauri": {
"allowlist": {
"clipboard": {
"all": true,
"readText": false,
"writeText": false
},
"dialog": {
"all": false,
"ask": true,
"confirm": true,
"message": true,
"open": false,
"save": false
},
"notification": {
"all": true
},
"os": {
"all": true
},
"app": {
"all": true
}
},
"bundle": {
"active": true,
"category": "DeveloperTool",
"copyright": "",
"deb": {
"depends": []
},
"externalBin": [],
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/128x128@2x.png",
"icons/icon.icns",
"icons/icon.ico"
],
"identifier": "com.fanslycreatorbot.fanslysync",
"longDescription": "",
"macOS": {
"entitlements": null,
"exceptionDomain": "",
"frameworks": [],
"providerShortName": null,
"signingIdentity": null
},
"resources": [],
"shortDescription": "",
"targets": "all",
"windows": {
"certificateThumbprint": null,
"digestAlgorithm": "sha256",
"timestampUrl": ""
}
},
"security": {
"csp": null
},
"updater": {
"active": true,
"endpoints": [
"https://cdn.crabnebula.app/update/fansly-creator-bot/fansly-sync/{{target}}-{{arch}}/{{current_version}}"
],
"dialog": true,
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDJFODZGRDI4NjBFMDQ1RUMKUldUc1JlQmdLUDJHTGdRdSt6dWFISXE0MThsa0tvUDA2RWdMSStjQ0J6NVBhdmU4ajRMMms4a1cK"
},
"windows": [
{
"fullscreen": false,
"height": 650,
"resizable": false,
"title": "FanslySync",
"width": 600
}
]
}
}
"$schema": "../node_modules/@tauri-apps/cli/schema.json",
"build": {
"beforeBuildCommand": "npm run build",
"beforeDevCommand": "npm run dev",
"frontendDist": "../build",
"devUrl": "http://localhost:5173"
},
"bundle": {
"active": true,
"category": "DeveloperTool",
"copyright": "",
"targets": "all",
"externalBin": [],
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/128x128@2x.png",
"icons/icon.icns",
"icons/icon.ico"
],
"windows": {
"certificateThumbprint": null,
"digestAlgorithm": "sha256",
"timestampUrl": ""
},
"longDescription": "",
"macOS": {
"entitlements": null,
"exceptionDomain": "",
"frameworks": [],
"providerShortName": null,
"signingIdentity": null
},
"resources": [],
"shortDescription": "",
"linux": {
"deb": {
"depends": []
}
},
"createUpdaterArtifacts": "v1Compatible"
},
"productName": "FanslySync",
"version": "0.1.3",
"identifier": "com.fanslycreatorbot.fanslysync",
"plugins": {
"updater": {
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDJFODZGRDI4NjBFMDQ1RUMKUldUc1JlQmdLUDJHTGdRdSt6dWFISXE0MThsa0tvUDA2RWdMSStjQ0J6NVBhdmU4ajRMMms4a1cK",
"endpoints": [
"https://cdn.crabnebula.app/update/fansly-creator-bot/fansly-sync/{{target}}-{{arch}}/{{current_version}}"
]
}
},
"app": {
"windows": [
{
"fullscreen": false,
"height": 650,
"resizable": false,
"title": "FanslySync",
"width": 600
}
],
"security": {
"csp": null
}
}
}

View File

@ -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';
}
});

View File

@ -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

View File

@ -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;
}