Compare commits

...

1 Commits

Author SHA1 Message Date
isark 46dfcdd35b Tauri v2 migration test
11 months ago

@ -20,7 +20,10 @@
"@angular/material": "^16.1.4",
"@angular/platform-browser": "^16.1.4",
"@angular/platform-browser-dynamic": "^16.1.4",
"@tauri-apps/api": "^1.2.0",
"@tauri-apps/api": "2.0.0-beta.14",
"@tauri-apps/plugin-dialog": "^2.0.0-beta.6",
"@tauri-apps/plugin-global-shortcut": "^2.0.0-beta.6",
"@tauri-apps/plugin-http": "^2.0.0-beta.7",
"@types/markdown-it": "^13.0.0",
"@types/natural-compare": "^1.4.1",
"@types/uuid": "^9.0.8",
@ -48,7 +51,7 @@
"@angular-eslint/template-parser": "17.3.0",
"@angular/cli": "~16.1.4",
"@angular/compiler-cli": "^16.1.4",
"@tauri-apps/cli": "^1.4.0",
"@tauri-apps/cli": "2.0.0-beta.21",
"@types/jasmine": "~4.3.0",
"@typescript-eslint/eslint-plugin": "7.2.0",
"@typescript-eslint/parser": "7.2.0",
@ -61,4 +64,4 @@
"karma-jasmine-html-reporter": "~2.1.0",
"typescript": "~5.1.6"
}
}
}

2394
src-tauri/Cargo.lock generated

File diff suppressed because it is too large Load Diff

@ -14,13 +14,13 @@ build = "src/build.rs"
poe_data = { path = "poe_data" }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
tauri-build = { version = "1.2", features = [] }
tauri-build = { version = "2.0.0-beta", features = [] }
ts-rs = "6.2.1"
[dependencies]
steamlocate = "1.2.1"
tauri = { version = "1.2", features = [ "dialog-message", "http-request", "dialog-open", "global-shortcut-all", "dialog-save", "updater", "system-tray"] }
tauri = { version = "2.0.0-beta", features = ["tray-icon"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
Underlayer = { git = "https://git.isark.me/isark/Underlay.git" }
@ -40,9 +40,15 @@ regex = "1.9.3"
lazy_static = "1.4.0"
uuid = { version = "1.6.1", features = ["v4", "serde"] }
serde_with = "3.7.0"
tauri-plugin-dialog = "2.0.0-beta.10"
tauri-plugin-http = "2.0.0-beta.11"
tauri-plugin-global-shortcut = "2.0.0-beta.7"
[features]
# this feature is used for production builds or when `devPath` points to the filesystem
# DO NOT REMOVE!!
custom-protocol = ["tauri/custom-protocol"]
[target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies]
tauri-plugin-global-shortcut = "2.0.0-beta.7"

@ -0,0 +1,41 @@
{
"identifier": "migrated",
"description": "permissions that were migrated from v1",
"local": true,
"windows": [
"main",
"Overlay",
"Normal"
],
"permissions": [
"path:default",
"event:default",
"window:default",
"app:default",
"resources:default",
"menu:default",
"tray:default",
"dialog:allow-open",
"dialog:allow-save",
"dialog:allow-message",
{
"identifier": "http:default",
"allow": [
{
"url": "https://*/"
},
{
"url": "http://*/"
}
]
},
"global-shortcut:allow-is-registered",
"global-shortcut:allow-register",
"global-shortcut:allow-register-all",
"global-shortcut:allow-unregister",
"global-shortcut:allow-unregister-all",
"global-shortcut:default",
"dialog:default",
"http:default"
]
}

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
{"migrated":{"identifier":"migrated","description":"permissions that were migrated from v1","local":true,"windows":["main","Overlay","Normal"],"permissions":["path:default","event:default","window:default","app:default","resources:default","menu:default","tray:default","dialog:allow-open","dialog:allow-save","dialog:allow-message",{"identifier":"http:default","allow":[{"url":"https://*/"},{"url":"http://*/"}]},"global-shortcut:allow-is-registered","global-shortcut:allow-register","global-shortcut:allow-register-all","global-shortcut:allow-unregister","global-shortcut:allow-unregister-all","global-shortcut:default","dialog:default","http:default"]}}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,22 +1,26 @@
use ts_rs::TS;
mod config;
fn main() {
tauri_build::build();
tauri_build::build();
const OUT_PROCESSED: &'static str = "../data/processed_world_areas.json";
const OUT_PROCESSED_FULL: &'static str = "../data/processed_world_areas_full.json";
println!("cargo:rerun-if-changed=../data/WorldAreas.json");
poe_data::world_area::repack(&include_str!("../../data/WorldAreas.json"), OUT_PROCESSED);
poe_data::world_area::repack_full(
&include_str!("../../data/WorldAreas.json"),
OUT_PROCESSED_FULL,
);
//Let's go with uppercase names, allows automatic import to work...
config::Rect::export_to("../src/app/_models/generated/Rect.ts")
.expect("Could not generate config struct");
config::Config::export_to("../src/app/_models/generated/Config.ts")
.expect("Could not generate config struct");
println!("cargo:rerun-if-changed=src/config.rs");
println!("cargo:rerun-if-changed=../src/app/_models/generated/Rect.ts");
println!("cargo:rerun-if-changed=../src/app/_models/generated/Config.ts");
const OUT_PROCESSED: &'static str = "../data/processed_world_areas.json";
const OUT_PROCESSED_FULL: &'static str = "../data/processed_world_areas_full.json";
println!("cargo:rerun-if-changed=../data/WorldAreas.json");
poe_data::world_area::repack(&include_str!("../../data/WorldAreas.json"), OUT_PROCESSED);
poe_data::world_area::repack_full(&include_str!("../../data/WorldAreas.json"), OUT_PROCESSED_FULL);
//Let's go with uppercase names, allows automatic import to work...
config::Rect::export_to("../src/app/_models/generated/Rect.ts").expect("Could not generate config struct");
config::Config::export_to("../src/app/_models/generated/Config.ts").expect("Could not generate config struct");
println!("cargo:rerun-if-changed=src/config.rs");
println!("cargo:rerun-if-changed=../src/app/_models/generated/Rect.ts");
println!("cargo:rerun-if-changed=../src/app/_models/generated/Config.ts");
println!("cargo:rustc-cfg=build_only");
println!("cargo:rustc-cfg=build_only");
}

@ -59,7 +59,7 @@ pub struct Config {
pub run_compare_history: Option<String>,
#[serde(default = "Config::default_detach_notes")]
detach_notes: bool,
#[serde(default = "Config::default_show_livesplit")]
show_livesplit: bool,
#[serde(default = "Config::default_show_live_aggregate")]
@ -156,7 +156,7 @@ impl Config {
fn default_enable_stopwatch() -> bool {
false
}
fn default_run_compare_history() -> Option<String> {
None
}

@ -16,13 +16,12 @@ use poe_reader::filter_func;
use poe_reader::{blocking_area_filtered_rx, poe_client_log_receiver};
use simple_logger::SimpleLogger;
use storage::Storage;
use tauri::CustomMenuItem;
use tauri::menu::{MenuBuilder, MenuEvent, MenuItemBuilder};
use tauri::tray::TrayIconBuilder;
use tauri::WebviewWindow;
use tauri::Manager;
use tauri::SystemTray;
use tauri::SystemTrayEvent;
use tauri::SystemTrayMenu;
use tauri::SystemTrayMenuItem;
use tauri::Window;
use lazy_static::lazy_static;
@ -68,7 +67,6 @@ fn load_full_world_areas() -> WorldAreasMap {
FULL_WORLD_AREAS_MAP.clone()
}
#[tauri::command]
fn load_config(state: tauri::State<Mutex<Storage>>) -> Option<Config> {
Some(state.lock().ok()?.config.clone())
@ -151,38 +149,57 @@ fn main() {
.init()
.expect("Could not init logger");
let settings = CustomMenuItem::new("settings".to_string(), "Settings");
let editor = CustomMenuItem::new("editor".to_string(), "Plan Editor");
let runstats = CustomMenuItem::new("runstats".to_string(), "Run stats");
let force_show = CustomMenuItem::new("force_show".to_string(), "Force show");
let exit = CustomMenuItem::new("exit".to_string(), "Exit");
let tray_menu = SystemTrayMenu::new()
.add_item(settings)
.add_item(editor)
.add_item(runstats)
.add_item(force_show)
.add_native_item(SystemTrayMenuItem::Separator)
.add_item(exit);
let system_tray = SystemTray::new().with_menu(tray_menu);
tauri::Builder::default()
.plugin(tauri_plugin_http::init())
.plugin(tauri_plugin_dialog::init())
.plugin(tauri_plugin_global_shortcut::Builder::new().build())
.setup(|app| {
let tx = Overlay::initialize(
app.get_window("Overlay")
app.get_webview_window("Overlay")
.expect("Could not get main overlay window"),
"Path of Exile",
);
app.manage(tx);
app.manage(Mutex::new(Storage::default()));
let settings = MenuItemBuilder::with_id("settings", "Settings").build(app)?;
let editor = MenuItemBuilder::with_id("editor", "Plan Editor").build(app)?;
let runstats = MenuItemBuilder::with_id("runstats", "Run stats").build(app)?;
let force_show = MenuItemBuilder::with_id("force_show", "Force show").build(app)?;
let exit = MenuItemBuilder::with_id("exit", "Exit").build(app)?;
let menu = MenuBuilder::new(app)
.items(&[&settings, &editor, &runstats, &force_show])
.separator()
.item(&exit)
.build()?;
let _tray = TrayIconBuilder::new().menu(&menu).on_menu_event(move |app, event| match event.id().as_ref() {
"exit" => {
std::process::exit(0);
}
"editor" | "settings" | "runstats" => {
if let Some(window) = app.get_webview_window("Normal") {
window.show().ok();
window.emit_to("Normal", "loadTab", event.id().as_ref()).ok();
}
}
"force_show" => {
app.state::<Sender<Event>>()
.send(overlay::State::Interactable {}.into())
.ok();
}
_ => {}
}).build(app)?;
if let Ok(storage) = app.state::<Mutex<Storage>>().lock() {
listen_for_zone_changes(
storage.config.poe_client_log_path.clone(),
app.get_window("Overlay")
app.get_webview_window("Overlay")
.expect("Could not get main overlay window"),
);
}
// app.get_window("Overlay")
// .expect("Could not get main overlay window")
// .open_devtools();
@ -204,30 +221,9 @@ fn main() {
load_history_at_uuid,
load_cache,
])
.system_tray(system_tray)
.on_system_tray_event(|app, event| match event {
SystemTrayEvent::MenuItemClick { id, .. } => match id.as_str() {
"exit" => {
std::process::exit(0);
}
"editor" | "settings" | "runstats" => {
if let Some(window) = app.get_window("Normal") {
window.show().ok();
window.emit_to("Normal", "loadTab", id).ok();
}
}
"force_show" => {
app.state::<Sender<Event>>()
.send(overlay::State::Interactable {}.into())
.ok();
}
_ => {}
},
_ => {}
})
.on_window_event(|event| match event.event() {
.on_window_event(|window, event| match event {
tauri::WindowEvent::CloseRequested { api, .. } => {
event.window().hide().ok();
window.hide().ok();
api.prevent_close();
}
_ => {}
@ -236,14 +232,14 @@ fn main() {
.expect("error while running tauri application");
}
fn listen_for_zone_changes(poe_client_log_path: Option<PathBuf>, window: Window) {
fn listen_for_zone_changes(poe_client_log_path: Option<PathBuf>, window: WebviewWindow) {
std::thread::spawn(move || {
// need _watcher
if let Some((enter_area_receiver, _watcher)) = receiver_from_path(&poe_client_log_path) {
for area in blocking_area_filtered_rx(&enter_area_receiver) {
if let Some(area) = filter_func(area) {
// if let Some(entered) = world_areas.get(&area) {
window.emit_to("Overlay", "entered", &area).ok();
window.emit_to("Overlay", "entered", &area).ok();
// }
}
}

@ -5,7 +5,7 @@ use crossbeam::{
use serde::Serialize;
use statig::prelude::*;
use std::sync::{mpsc::Receiver as MpscReceiver, Mutex};
use tauri::{Manager, PhysicalPosition, PhysicalSize, Window};
use tauri::{Manager, PhysicalPosition, PhysicalSize, WebviewWindow, Window};
use underlayer::{Bounds, UnderlayEvent};
use crate::storage::Storage;
@ -32,7 +32,7 @@ pub enum Event {
#[derive(Clone)]
pub struct Overlay {
bounds: Bounds,
window: Window,
window: WebviewWindow,
previous: State,
}
@ -51,7 +51,7 @@ fn wrap_underlay_rx(rx: MpscReceiver<UnderlayEvent>) -> Receiver<UnderlayEvent>
}
impl Overlay {
pub fn initialize(window: Window, target_title: &str) -> Sender<Event> {
pub fn initialize(window: WebviewWindow, target_title: &str) -> Sender<Event> {
let overlay: Overlay = Self {
window: window.clone(),
bounds: Bounds::default(),

@ -6,7 +6,7 @@ use std::{
time::Duration,
};
use notify::{Config, PollWatcher, RecursiveMode, Watcher, Event};
use notify::{Config, Event, PollWatcher, RecursiveMode, Watcher};
use regex::Regex;
#[cfg(target_os = "windows")]
@ -88,10 +88,12 @@ pub fn poe_client_log_receiver(path: PathBuf) -> (Receiver<String>, PollWatcher)
let (tx, rx) = channel();
let mut lfr = LogFileReader::new(&path, tx).unwrap();
(rx, watch_file_for_writes(path, Box::new(move || lfr.on_write_handler())))
(
rx,
watch_file_for_writes(path, Box::new(move || lfr.on_write_handler())),
)
}
const POE_STEAM_APP_ID: u32 = 238960;
pub fn get_poe_path() -> Option<PathBuf> {
if let Some(mut steam_dir) = steamlocate::SteamDir::locate() {
@ -133,7 +135,7 @@ pub fn area_filtered_rx<'a>(rx: &'a Receiver<String>) -> impl Iterator<Item = St
})
}
pub fn filter_func(str : String) -> Option<String> {
pub fn filter_func(str: String) -> Option<String> {
let reg = Regex::new("Generating level ([0-9]+) area \"(.+)\"").unwrap();
let area_id_location = 2;
@ -145,31 +147,27 @@ pub fn filter_func(str : String) -> Option<String> {
}
}
pub fn blocking_area_filtered_rx<'a>(rx: &'a Receiver<String>) -> impl Iterator<Item = String> + 'a {
pub fn blocking_area_filtered_rx<'a>(
rx: &'a Receiver<String>,
) -> impl Iterator<Item = String> + 'a {
// Generating level 68 area "1_SideArea5_6" with seed 4103532853
rx.iter()
}
fn watch_file_for_writes(path: PathBuf, mut on_write_handler: Box<dyn FnMut() + Send>) -> PollWatcher
{
fn watch_file_for_writes(
path: PathBuf,
mut on_write_handler: Box<dyn FnMut() + Send>,
) -> PollWatcher {
// Create a watcher object, delivering debounced events.
// The notification back-end is selected based on the platform.
let config = Config::default().with_poll_interval(Duration::from_millis(150));
let mut watcher = PollWatcher::new(
move |e: Result<Event, _>| match e {
Ok(e2) => {
match e2.kind {
notify::EventKind::Modify(_) => {
on_write_handler()
},
Ok(e2) => match e2.kind {
notify::EventKind::Modify(_) => on_write_handler(),
_ => (),
}
},
},
e => log::error!("Error watching for file something something: {e:?}"),
},

@ -103,7 +103,8 @@ impl Storage {
}
pub fn load_plan_at_path(path: PathBuf, save_local: bool) -> Option<Plan> {
let mut plan: Plan = match serde_json::from_str(&std::fs::read_to_string(&path).ok()?).ok() {
let mut plan: Plan = match serde_json::from_str(&std::fs::read_to_string(&path).ok()?).ok()
{
Some(plan) => plan,
None => convert_old(path.clone())?,
};
@ -161,10 +162,12 @@ impl Storage {
};
let mut read_dir: Vec<DirEntry> = match plan_dir.read_dir() {
Ok(read_dir) => read_dir.filter_map(|v| {
log::trace!("Read dir: {:?}", v);
v.ok()
}).collect(),
Ok(read_dir) => read_dir
.filter_map(|v| {
log::trace!("Read dir: {:?}", v);
v.ok()
})
.collect(),
Err(_) => return vec![],
};
@ -204,14 +207,14 @@ impl Storage {
}
fn load_metadata_at_path(path: PathBuf) -> Option<PlanMetadata> {
let mut plan: PlanMetadata = match serde_json::from_str(&std::fs::read_to_string(&path).ok()?) {
Ok(plan) => plan,
Err(e) => {
log::error!("Could not load metadata at path: {path:?} : {e}");
return None;
}
};
let mut plan: PlanMetadata =
match serde_json::from_str(&std::fs::read_to_string(&path).ok()?) {
Ok(plan) => plan,
Err(e) => {
log::error!("Could not load metadata at path: {path:?} : {e}");
return None;
}
};
plan.set_stored_path(Some(path));
Some(plan)
}
@ -228,7 +231,10 @@ impl Storage {
pub fn load_cache() -> Option<HashMap<String, RunHistoryMetadata>> {
let path = match Self::history_cache_file() {
Some(path) => path,
None => { log::error!("Could not get path for history cache"); return None; },
None => {
log::error!("Could not get path for history cache");
return None;
}
};
serde_json::from_str(&std::fs::read_to_string(path).ok()?).ok()
@ -246,18 +252,21 @@ impl Storage {
fn store_history_at_path(history: &RunHistory) {
let path = match Self::history_uuid_to_path(history.uuid()) {
Some(path) => path,
None => { log::error!("Could not get path for history"); return; },
None => {
log::error!("Could not get path for history");
return;
}
};
let serialization_result = match serde_json::to_string(&history) {
Ok(serialization_result) => serialization_result,
Err(e) => { log::error!("Could not serialize history: {}", e); return;},
Err(e) => {
log::error!("Could not serialize history: {}", e);
return;
}
};
std::fs::write(
path,
serialization_result,
).ok();
std::fs::write(path, serialization_result).ok();
}
fn store_history_at_cache(history: RunHistory) {
@ -270,12 +279,18 @@ impl Storage {
let path = match Self::history_cache_file() {
Some(path) => path,
None => { log::error!("Could not get path for history cache"); return; },
None => {
log::error!("Could not get path for history cache");
return;
}
};
let serialization = match serde_json::to_string(&cache) {
Ok(serialization) => serialization,
Err(e) => { log::error!("Could not serialize history cache: {}", e); return; },
Err(e) => {
log::error!("Could not serialize history cache: {}", e);
return;
}
};
std::fs::write(path, serialization).ok();

@ -27,7 +27,7 @@ pub enum EntryType {
PlanForceNext,
PlanForcePrev,
ZoneEnter,
CheckpointReached
CheckpointReached,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
@ -48,5 +48,8 @@ pub struct RunHistoryMetadata {
}
fn default_last_updated_date_now() -> u64 {
SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_millis() as u64
}
SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_millis() as u64
}

@ -2,66 +2,40 @@
"build": {
"beforeDevCommand": "yarn start --port 1420",
"beforeBuildCommand": "yarn build",
"devPath": "http://localhost:1420",
"distDir": "../dist/Nothing",
"withGlobalTauri": false
"frontendDist": "../dist/Nothing",
"devUrl": "http://localhost:1420"
},
"package": {
"productName": "Nothing",
"version": "1.8.9"
},
"tauri": {
"systemTray": {
"iconPath": "icons/NothingIcon.png",
"iconAsTemplate": false
},
"allowlist": {
"dialog": {
"open": true,
"save": true,
"message": true
},
"globalShortcut": {
"all": true
},
"http": {
"all": false,
"request": true,
"scope": [
"https://*",
"http://*"
]
"bundle": {
"active": true,
"icon": [
"icons/32x32.png",
"icons/NothingIcon.png",
"icons/icon.ico"
],
"resources": [],
"targets": [
"nsis",
"appimage"
],
"windows": {
"wix": {
"language": "en-US"
}
},
"bundle": {
"active": true,
"icon": [
"icons/32x32.png",
"icons/NothingIcon.png",
"icons/icon.ico"
],
"identifier": "me.isark.poe.Nothing",
"targets": ["nsis", "appimage", "updater"],
"windows": {
"wix": {
"language": "en-US"
}
},
"resources" : [
]
},
"security": {
"csp": null
},
"createUpdaterArtifacts": "v1Compatible"
},
"productName": "Nothing",
"version": "1.8.9-beta",
"identifier": "me.isark.poe.Nothing",
"plugins": {
"updater": {
"active": true,
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDY5NDE4QTQwQUVGOUYzM0IKUldRNzgvbXVRSXBCYVhwRmswTnpOWW9PRURlMFRkQUVoOVNhSmJsLzlNSEJrZWVEOVhWYjlHcy8K",
"endpoints": [
"https://isark.me/releases/nothing/version.json?target={{target}}"
],
"dialog": true,
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDY5NDE4QTQwQUVGOUYzM0IKUldRNzgvbXVRSXBCYVhwRmswTnpOWW9PRURlMFRkQUVoOVNhSmJsLzlNSEJrZWVEOVhWYjlHcy8K"
},
]
}
},
"app": {
"windows": [
{
"label": "Overlay",
@ -82,6 +56,14 @@
"resizable": true,
"focus": false
}
]
],
"withGlobalTauri": false,
"trayIcon": {
"iconPath": "icons/NothingIcon.png",
"iconAsTemplate": false
},
"security": {
"csp": null
}
}
}
}

@ -1,4 +1,4 @@
import { invoke } from "@tauri-apps/api/tauri";
import { invoke } from "@tauri-apps/api/core";
import { Subject, debounceTime, from } from "rxjs";
export interface PlanInterface {

@ -1,9 +1,10 @@
import { Injectable } from '@angular/core';
import { Config } from '../_models/generated/Config';
import { app, invoke } from '@tauri-apps/api';
import { app, webviewWindow as appWindow} from '@tauri-apps/api';
import { Subject, debounceTime, from } from 'rxjs';
import { EventsService } from './events.service';
import { appWindow, WebviewWindow } from '@tauri-apps/api/window'
// import { appWindow, WebviewWindow } from 'webviewWindow'
import { invoke } from '@tauri-apps/api/core';
@Injectable({
providedIn: 'root'
@ -49,11 +50,11 @@ export class ConfigService {
sync() {
let target = "Normal"
if (appWindow.label == "Normal") {
if (appWindow.getCurrent().label == "Normal") {
target = "Overlay";
}
const targetWindow = WebviewWindow.getByLabel(target);
const targetWindow = appWindow.WebviewWindow.getByLabel(target);
if (targetWindow) {
from(targetWindow.isVisible()).subscribe(visible => {
if (visible) {

@ -2,10 +2,11 @@ import { Injectable, NgZone } from '@angular/core';
import { ShortcutService } from './shortcut.service';
import { EventsService } from './events.service';
import { Event } from "@tauri-apps/api/event";
import { invoke } from '@tauri-apps/api';
import { ConfigService } from './config.service';
import { appWindow } from '@tauri-apps/api/window';
import { webviewWindow as appWindow } from '@tauri-apps/api';
import { Subscription } from 'rxjs';
import { invoke } from '@tauri-apps/api/core';
export class StateEvent {
Visible?: any;
@ -23,13 +24,13 @@ export class OverlayService {
isOverlay: boolean;
constructor(private shortcuts: ShortcutService, private events: EventsService, private configService: ConfigService) {
if (appWindow.label == "Overlay") {
if (appWindow.getCurrent().label == "Overlay") {
this.registerInitialBinds();
this.events.listen<StateEvent>("OverlayStateChange").subscribe(this.onOverlayStateChange.bind(this));
}
this.isOverlay = appWindow.label === "Overlay";
this.isOverlay = appWindow.getCurrent().label === "Overlay";
}
registerInitialBinds(retry: boolean = true) {
@ -43,10 +44,17 @@ export class OverlayService {
}
});
}
onOverlayStateChange(event: Event<StateEvent>) {
console.log("overlay state change: ", event);
this.interactable = event.payload.Interactable != null;
if (event.payload.Hidden) { this.visible = false } else { this.visible = true };
if (event.payload.Hidden) {
this.visible = false;
console.log("visible: ", this.visible);
} else {
this.visible = true;
console.log("visible: ", this.visible);
};
}
setInteractable() {
@ -59,7 +67,7 @@ export class OverlayService {
} else {
this.interactable = true;
}
console.log("Set interactable: ", this.interactable);
invoke("set_interactable", { interactable: this.interactable }).then();
}
}

@ -1,11 +1,10 @@
import { Injectable } from '@angular/core';
import { invoke } from '@tauri-apps/api';
import { EMPTY, Observable, ReplaySubject, Subject, from, map, switchMap, tap } from 'rxjs';
import { EMPTY, Observable, ReplaySubject, Subject, from, map, mergeMap, switchMap, tap } from 'rxjs';
import { Plan, PlanInterface, PlanMetadata } from '../_models/plan';
import { MatDialog } from '@angular/material/dialog';
import { UrlDialog } from '../plan-display/url-dialog.component';
import { fetch } from '@tauri-apps/api/http';
import { Response } from '@tauri-apps/api/http';
import { fetch } from '@tauri-apps/plugin-http';
import { invoke } from '@tauri-apps/api/core';
export class UrlError extends Error {
status: number;
@ -91,11 +90,11 @@ export class PlanService {
plan.update_url,
{
method: 'HEAD',
timeout: 10
connectTimeout: 10 * 1000
})).pipe(switchMap(response => {
this.validateResponse(response);
if (response.headers['etag'] === plan.latest_server_etag) {
if (response.headers.get('etag') === plan.latest_server_etag) {
return EMPTY;
}
@ -115,12 +114,18 @@ export class PlanService {
url,
{
method: 'GET',
timeout: 10
})).pipe(map(response => {
this.validateResponse(response);
const plan = new Plan(response.data as PlanInterface);
const etag = response.headers['etag'];
connectTimeout: 10 * 1000
}))
.pipe(tap(response => { this.validateResponse(response); }))
.pipe(
mergeMap(response => from(response.json())
.pipe(map(data => {
return {data, response};
})))
).pipe(map(({data, response}) => {
const plan = new Plan(data);
const etag = response.headers.get('etag');
if (etag) {
plan.latest_server_etag = etag;
console.log("got etag: ", etag);
@ -139,9 +144,9 @@ export class PlanService {
}));
}
private validateResponse(response: Response<unknown>) {
private validateResponse(response: Response) {
if (!response.ok) {
throw new UrlError(response.status, "Error fetching plan from URL, status " + response.status + ", URL: " + response.url + " with body:" + response.data);
throw new UrlError(response.status, "Error fetching plan from URL, status " + response.status + ", URL: " + response.url);
}
}

@ -1,5 +1,5 @@
import { Injectable, NgZone } from '@angular/core';
import { ShortcutHandler, register, unregister } from '@tauri-apps/api/globalShortcut';
import { ShortcutHandler, register, unregister } from '@tauri-apps/plugin-global-shortcut';
import { Observable, Subscriber, from } from 'rxjs';
@Injectable({
@ -13,7 +13,11 @@ export class ShortcutService {
register(shortcut: string) {
return new Observable<string>((subscriber) => {
let originalHandler: ShortcutHandler = (s) => this.zone.run(() => subscriber.next(s));
let originalHandler: ShortcutHandler = (s) => this.zone.run(() => {
if (s.state == 'Pressed') {
subscriber.next(s.shortcut);
}
});
const teardown = () => {
unregister(shortcut);
@ -26,7 +30,7 @@ export class ShortcutService {
return teardown;
});
}
rebind_from_to(previousShortcut: string, nextShortcut: string) {
let [oldHandler, subscriber, teardown] = this.internalHandlers.get(previousShortcut)!;

@ -5,8 +5,9 @@ import { Plan } from '../_models/plan';
import { MatDialog } from '@angular/material/dialog';
import { Resume, ResumeDialog } from '../plan-display/resume-dialog.component';
import { v4 as uuidv4 } from 'uuid';
import { invoke } from '@tauri-apps/api';
import { appWindow } from '@tauri-apps/api/window';
import { webviewWindow as appWindow} from '@tauri-apps/api';
import { invoke } from '@tauri-apps/api/core';
export enum EntryType {
@ -90,7 +91,7 @@ export class TimeTrackerService {
constructor(private configService: ConfigService, public dialog: MatDialog, private zone: NgZone) {
this.loadCache();
appWindow.listen("entered", (entered) => {
appWindow.getCurrent().listen("entered", (entered) => {
if (entered.payload && typeof entered.payload === 'string')
this.onZoneEnter(entered.payload);
});

@ -1,9 +1,9 @@
import { Injectable, NgZone } from '@angular/core';
import { WorldArea } from '../_models/world-area';
import { invoke } from '@tauri-apps/api';
import { Observable, ReplaySubject, Subject, filter, from, map } from 'rxjs';
import naturalCompare from 'natural-compare';
import { Fuzzr } from '../fuzzr/fuzzr';
import { invoke } from '@tauri-apps/api/core';
@Injectable({
providedIn: 'root'

@ -1,5 +1,4 @@
import { Component, NgZone, OnDestroy, OnInit } from "@angular/core";
import { invoke } from "@tauri-apps/api/tauri";
import { ShortcutService } from "./_services/shortcut.service";
import { EventsService } from "./_services/events.service";
import { WorldAreaService } from "./_services/world-area.service";
@ -8,7 +7,8 @@ import { OverlayService } from "./_services/overlay.service";
import { ConfigService } from "./_services/config.service";
import { PlanService } from "./_services/plan.service";
import { from } from "rxjs";
import { appWindow } from "@tauri-apps/api/window"
import { webviewWindow as appWindow} from '@tauri-apps/api';
import { FormControl } from "@angular/forms";
@Component({

@ -15,11 +15,11 @@ import { WorldAreaService } from '../_services/world-area.service';
import { FormsModule } from '@angular/forms';
import { Fuzzr } from '../fuzzr/fuzzr';
import { BehaviorSubject, first, from, skip } from 'rxjs';
import { save } from '@tauri-apps/api/dialog';
import { save } from '@tauri-apps/plugin-dialog';
import { PlanService } from '../_services/plan.service';
import { MatDialog, MatDialogModule } from '@angular/material/dialog';
import { EditNotesComponentDialog } from './notes/notes.component';
import { open } from '@tauri-apps/api/dialog';
import { open } from '@tauri-apps/plugin-dialog';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { MatSelectModule } from '@angular/material/select';
@ -317,7 +317,7 @@ export class EditorComponent implements OnInit {
})).subscribe(file => {
if (file) {
// We disallow multiple but interface still says it can be multiple, thus the cast.
this.planService.loadPlanFromPath(file as string, false).subscribe(plan => {
this.planService.loadPlanFromPath(file.path as string, false).subscribe(plan => {
while (this.original.length > 0) {
this.original.pop();
}

@ -8,7 +8,8 @@ import { WorldAreaService } from '../_services/world-area.service';
import { WorldArea } from '../_models/world-area';
import { Subscription, from } from 'rxjs';
import { OverlayService, StateEvent } from '../_services/overlay.service';
import { appWindow } from '@tauri-apps/api/window';
import { webviewWindow as appWindow} from '@tauri-apps/api';
// import { appWindow } from 'webviewWindow';
import { EventsService } from '../_services/events.service';
import { Event } from '@tauri-apps/api/event';
import { MatDialog } from '@angular/material/dialog';
@ -83,7 +84,7 @@ export class PlanDisplayComponent implements OnInit {
registerOnZoneEnter() {
appWindow.listen("entered", (entered) => {
appWindow.getCurrent().listen("entered", (entered) => {
if (this.currentPlan && typeof entered.payload == "string") {
if (this.currentPlan.isNext(entered.payload)) {
this.zone.run(() => this.next());

@ -1,7 +1,7 @@
import { Component } from '@angular/core';
import { Plan, PlanMetadata } from 'src/app/_models/plan';
import { PlanService, UrlError } from 'src/app/_services/plan.service';
import { open } from '@tauri-apps/api/dialog';
import { open } from '@tauri-apps/plugin-dialog';
import { from } from 'rxjs';
import { CommonModule } from '@angular/common';
import { MatButtonModule } from '@angular/material/button';
@ -44,7 +44,7 @@ export class PlanSelectionComponent {
]
})).subscribe(file => {
if (file) {
this.planService.loadPlanFromPath(file as string).subscribe(plan => {
this.planService.loadPlanFromPath(file.path as string).subscribe(plan => {
if (plan) {
this.planService.setCurrentPlan(plan);
}

@ -2560,76 +2560,97 @@
resolved "https://registry.yarnpkg.com/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz#03ecc29279e3c0c832f6185a5bfa3497858ac8ca"
integrity sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw==
"@tauri-apps/api@^1.2.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-1.4.0.tgz#b4013ca3d17b853f7df29fe14079ebb4d52dbffa"
integrity sha512-Jd6HPoTM1PZSFIzq7FB8VmMu3qSSyo/3lSwLpoapW+lQ41CL5Dow2KryLg+gyazA/58DRWI9vu/XpEeHK4uMdw==
"@tauri-apps/cli-darwin-arm64@1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-1.4.0.tgz#e76bb8515ae31f03f2cbd440c1a09b237a79b3ac"
integrity sha512-nA/ml0SfUt6/CYLVbHmT500Y+ijqsuv5+s9EBnVXYSLVg9kbPUZJJHluEYK+xKuOj6xzyuT/+rZFMRapmJD3jQ==
"@tauri-apps/cli-darwin-x64@1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-1.4.0.tgz#dd1472460550d0aa0ec6e699b073be2d77e5b962"
integrity sha512-ov/F6Zr+dg9B0PtRu65stFo2G0ow2TUlneqYYrkj+vA3n+moWDHfVty0raDjMLQbQt3rv3uayFMXGPMgble9OA==
"@tauri-apps/cli-linux-arm-gnueabihf@1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-1.4.0.tgz#325e90e47d260ba71a499850ce769b5a6bdfd48d"
integrity sha512-zwjbiMncycXDV7doovymyKD7sCg53ouAmfgpUqEBOTY3vgBi9TwijyPhJOqoG5vUVWhouNBC08akGmE4dja15g==
"@tauri-apps/cli-linux-arm64-gnu@1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-1.4.0.tgz#b5d8f5cba3f8f7c7d44d071681f0ab0a37f2c46e"
integrity sha512-5MCBcziqXC72mMXnkZU68mutXIR6zavDxopArE2gQtK841IlE06bIgtLi0kUUhlFJk2nhPRgiDgdLbrPlyt7fw==
"@tauri-apps/cli-linux-arm64-musl@1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.4.0.tgz#f805ab2ee415875900f4b456f17dc4900d2a7911"
integrity sha512-7J3pRB6n6uNYgIfCeKt2Oz8J7oSaz2s8GGFRRH2HPxuTHrBNCinzVYm68UhVpJrL3bnGkU0ziVZLsW/iaOGfUg==
"@tauri-apps/cli-linux-x64-gnu@1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-1.4.0.tgz#d3f5e69c22420c7ac9e4021b7a94bce2e48cb45d"
integrity sha512-Zh5gfAJxOv5AVWxcwuueaQ2vIAhlg0d6nZui6nMyfIJ8dbf3aZQ5ZzP38sYow5h/fbvgL+3GSQxZRBIa3c2E1w==
"@tauri-apps/cli-linux-x64-musl@1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-1.4.0.tgz#2e7f718272ffdd9ace80f57a35023ba0c74767ad"
integrity sha512-OLAYoICU3FaYiTdBsI+lQTKnDHeMmFMXIApN0M+xGiOkoIOQcV9CConMPjgmJQ867+NHRNgUGlvBEAh9CiJodQ==
"@tauri-apps/cli-win32-arm64-msvc@1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-1.4.0.tgz#85cdb52a06feb92da785def4d02512099464525e"
integrity sha512-gZ05GENFbI6CB5MlOUsLlU0kZ9UtHn9riYtSXKT6MYs8HSPRffPHaHSL0WxsJweWh9nR5Hgh/TUU8uW3sYCzCg==
"@tauri-apps/cli-win32-ia32-msvc@1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-1.4.0.tgz#0b7c921204058215aec9a5a00f735e73909bd330"
integrity sha512-JsetT/lTx/Zq98eo8T5CiRyF1nKeX04RO8JlJrI3ZOYsZpp/A5RJvMd/szQ17iOzwiHdge+tx7k2jHysR6oBlQ==
"@tauri-apps/cli-win32-x64-msvc@1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-1.4.0.tgz#23abe3f08c0df89111c29602f91c21a23577b908"
integrity sha512-z8Olcnwp5aYhzqUAarFjqF+oELCjuYWnB2HAJHlfsYNfDCAORY5kct3Fklz8PSsubC3U2EugWn8n42DwnThurg==
"@tauri-apps/cli@^1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-1.4.0.tgz#72732ae61e6b7d097e44a8a2ef5f211b2d01d98b"
integrity sha512-VXYr2i2iVFl98etQSQsqLzXgX96bnWiNZd1YADgatqwy/qecbd6Kl5ZAPB5R4ynsgE8A1gU7Fbzh7dCEQYFfmA==
"@tauri-apps/api@2.0.0-beta.14":
version "2.0.0-beta.14"
resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-beta.14.tgz#8c1c65c07559cd29c5103a99e0abe5331cc2246f"
integrity sha512-YLYgHqdwWswr4Y70+hRzaLD6kLIUgHhE3shLXNquPiTaQ9+cX3Q2dB0AFfqsua6NXYFNe7LfkmMzaqEzqv3yQg==
"@tauri-apps/cli-darwin-arm64@2.0.0-beta.21":
version "2.0.0-beta.21"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-beta.21.tgz#9dc6f306b14d58b0b4fbf218ffbb31831e28cf4d"
integrity sha512-okI7PRSC6RO4JfrOTqu4oWf0IfBPbkGHisyDOTay6K5uhz4zzry5fFJVa8S/DTrKtdjau4vcik/EDCxiGRun9Q==
"@tauri-apps/cli-darwin-x64@2.0.0-beta.21":
version "2.0.0-beta.21"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-beta.21.tgz#77a0bdd820301f120acbb93c57b6c8acb9ae4f82"
integrity sha512-mXoJDXB6CBoqUnFb4TCsSVC6FJRZsN1DHRZAyn6iNLIhOrObcM4L2xz8rzt3WirANwJ/ayrNv95fEt8Fq1jmgA==
"@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-beta.21":
version "2.0.0-beta.21"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-beta.21.tgz#bc9214feff536d917d55bddeadb724555f9ac698"
integrity sha512-LYPOx3LE2eZ0g8Zh/HYaNg6B1pZzH4BPMcma7wGZ0XPu+4fKLLGgav13xP2lknLnxiRP9jJCaTIBKXgcQEtLyg==
"@tauri-apps/cli-linux-arm64-gnu@2.0.0-beta.21":
version "2.0.0-beta.21"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-beta.21.tgz#69167099a4756944eb5d3d15905cbf4d903307ad"
integrity sha512-VP2L729tgY889OZj5U436EntjwkI8MyVB+GrvBv8k2mj1nWB651KiVIpcUmsUgjXZ2r01bifN9J0l+3EFEXUAQ==
"@tauri-apps/cli-linux-arm64-musl@2.0.0-beta.21":
version "2.0.0-beta.21"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-beta.21.tgz#d66796e672c2606d2e08a232def55919a5fa9542"
integrity sha512-s1rV01RIdowlPHfw7hTBnCEm2C3mZbynF+xpyRSv9vSczu4dpfwILMRwxB4nzMzdJ7RPHsf/R+5Ww86e8QM4Gw==
"@tauri-apps/cli-linux-x64-gnu@2.0.0-beta.21":
version "2.0.0-beta.21"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-beta.21.tgz#ed02923c94b71f2377ef5c4cc72bf1de12487296"
integrity sha512-yGh7ktUycHT3mAnKxC7cx/vjcbjJzoxQCxnjWpmIayVwq+iXLD1mK7nRXRdJpL/rnBFTqqD29CKuypCEFiq3/A==
"@tauri-apps/cli-linux-x64-musl@2.0.0-beta.21":
version "2.0.0-beta.21"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-beta.21.tgz#511293e6508a5d41e758d6f0bf98e834b22c63cb"
integrity sha512-+79b8O3tsjbGR47pJtcSKGmtqj4rsSxB5AfMb4UCkmoNkbaOzB0YS/ZieUGAb+SHXZ/MMs7mcl96N9SqYOL7hw==
"@tauri-apps/cli-win32-arm64-msvc@2.0.0-beta.21":
version "2.0.0-beta.21"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-beta.21.tgz#736c5dba48385bfebf030f4ad641592f0db14258"
integrity sha512-rKlpcjx6t1ECZciMmHT5xkXKjC+O+TVxRKmA21tEq/Ezt7XdnufGko1hduwQmVJWkHxKg6ab7uf98ImMpDC5UA==
"@tauri-apps/cli-win32-ia32-msvc@2.0.0-beta.21":
version "2.0.0-beta.21"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-beta.21.tgz#bf0a8dbfc1d5b724fd9f1ed2db14817821bd9b43"
integrity sha512-ExdhvRfgAoZi4/7re6OkmfqsHvTJQgWouTNphHWRilUEqBM7TEQV1UxYtwWfgyOKelyx4cxUYDFAJxootTb2Nw==
"@tauri-apps/cli-win32-x64-msvc@2.0.0-beta.21":
version "2.0.0-beta.21"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-beta.21.tgz#56842ab8088a794276cbf74bf0edcda6e96ee8ee"
integrity sha512-JtNTwNXIOfE04Cs3ieTvkdcMyJM9Sujw5MM9zNmusJKE03s/OLqbNK/2ISlcb/puwYGGPhhyYtL5hCmYXIrHHQ==
"@tauri-apps/cli@2.0.0-beta.21":
version "2.0.0-beta.21"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-2.0.0-beta.21.tgz#aef1b9f5d80da38265820ff3ab8558724e3309eb"
integrity sha512-lqV4pD0iTs8ASd19slH0eRoVAjbxtD0cCsZFVD7kG4sYkeZ0IkvtxbvnHAOUbALfvnHZr1dVXFDVxQUqJK2OXw==
optionalDependencies:
"@tauri-apps/cli-darwin-arm64" "1.4.0"
"@tauri-apps/cli-darwin-x64" "1.4.0"
"@tauri-apps/cli-linux-arm-gnueabihf" "1.4.0"
"@tauri-apps/cli-linux-arm64-gnu" "1.4.0"
"@tauri-apps/cli-linux-arm64-musl" "1.4.0"
"@tauri-apps/cli-linux-x64-gnu" "1.4.0"
"@tauri-apps/cli-linux-x64-musl" "1.4.0"
"@tauri-apps/cli-win32-arm64-msvc" "1.4.0"
"@tauri-apps/cli-win32-ia32-msvc" "1.4.0"
"@tauri-apps/cli-win32-x64-msvc" "1.4.0"
"@tauri-apps/cli-darwin-arm64" "2.0.0-beta.21"
"@tauri-apps/cli-darwin-x64" "2.0.0-beta.21"
"@tauri-apps/cli-linux-arm-gnueabihf" "2.0.0-beta.21"
"@tauri-apps/cli-linux-arm64-gnu" "2.0.0-beta.21"
"@tauri-apps/cli-linux-arm64-musl" "2.0.0-beta.21"
"@tauri-apps/cli-linux-x64-gnu" "2.0.0-beta.21"
"@tauri-apps/cli-linux-x64-musl" "2.0.0-beta.21"
"@tauri-apps/cli-win32-arm64-msvc" "2.0.0-beta.21"
"@tauri-apps/cli-win32-ia32-msvc" "2.0.0-beta.21"
"@tauri-apps/cli-win32-x64-msvc" "2.0.0-beta.21"
"@tauri-apps/plugin-dialog@^2.0.0-beta.6":
version "2.0.0-beta.6"
resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-dialog/-/plugin-dialog-2.0.0-beta.6.tgz#e42b80278d914318992cfc0534bc3c6977ed52ac"
integrity sha512-Rw8C8t/0y3QExEinp+cAOZi/BDt0c9jifv0bS3WDCwQt9ANdmfCWKamsIhqwemt3MjepkU2RV8bvphzoWlbOGw==
dependencies:
"@tauri-apps/api" "2.0.0-beta.14"
"@tauri-apps/plugin-global-shortcut@^2.0.0-beta.6":
version "2.0.0-beta.6"
resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-global-shortcut/-/plugin-global-shortcut-2.0.0-beta.6.tgz#508144c00f25444b6d1065388875e75d97291ef7"
integrity sha512-hEW36RnbkjcQYQH88W8PHUSEnbZ8J2L+kAEfSyhb+NWOPzskiE6lDkjh9XurNZkqDR959Lgtm1MAinRCUYnUjA==
dependencies:
"@tauri-apps/api" "2.0.0-beta.14"
"@tauri-apps/plugin-http@^2.0.0-beta.7":
version "2.0.0-beta.7"
resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-http/-/plugin-http-2.0.0-beta.7.tgz#0472b6b71c9df5d889c8a81e136ce3dd824aeeb6"
integrity sha512-mxdhcpPPT2oHm0FWe6HS2UbQW2LFTbAv2vExrTYAPJSuXOp2kisgOjazZtswYqpmftpcSZ4dFpmzNlQp188e/g==
dependencies:
"@tauri-apps/api" "2.0.0-beta.14"
"@tootallnate/once@2":
version "2.0.0"
@ -7562,7 +7583,16 @@ streamroller@^3.1.5:
debug "^4.3.4"
fs-extra "^8.1.0"
"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
"string-width-cjs@npm:string-width@^4.2.0":
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
dependencies:
emoji-regex "^8.0.0"
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@ -7594,7 +7624,14 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
dependencies:
ansi-regex "^5.0.1"
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@ -8177,7 +8214,16 @@ wildcard@^2.0.0:
resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
dependencies:
ansi-styles "^4.0.0"
string-width "^4.1.0"
strip-ansi "^6.0.0"
wrap-ansi@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==

Loading…
Cancel
Save