forked from akanyan/STARTLINER
fix: update button enabling its package
This commit is contained in:
@ -1,3 +1,11 @@
|
|||||||
|
## 0.19.1
|
||||||
|
|
||||||
|
- Fixed the update button enabling the package
|
||||||
|
|
||||||
|
## 0.19.0
|
||||||
|
|
||||||
|
- Added diagnostic exports
|
||||||
|
|
||||||
## 0.18.3
|
## 0.18.3
|
||||||
|
|
||||||
- Updated Rainycolor's domain・真
|
- Updated Rainycolor's domain・真
|
||||||
|
@ -125,12 +125,13 @@ pub async fn kill() -> Result<(), String> {
|
|||||||
pub async fn install_package(
|
pub async fn install_package(
|
||||||
state: State<'_, tokio::sync::Mutex<AppData>>,
|
state: State<'_, tokio::sync::Mutex<AppData>>,
|
||||||
key: PkgKey,
|
key: PkgKey,
|
||||||
force: bool
|
force: bool,
|
||||||
|
enable: bool
|
||||||
) -> Result<InstallResult, String> {
|
) -> Result<InstallResult, String> {
|
||||||
log::debug!("invoke: install_package({})", key);
|
log::debug!("invoke: install_package({})", key);
|
||||||
|
|
||||||
let mut appd = state.lock().await;
|
let mut appd = state.lock().await;
|
||||||
appd.pkgs.install_package(&key, force, true)
|
appd.pkgs.install_package(&key, force, true, enable)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| e.to_string())
|
.map_err(|e| e.to_string())
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,12 @@ pub struct DownloadTick {
|
|||||||
ratio: f32,
|
ratio: f32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Clone, Debug)]
|
||||||
|
pub struct DownloadEndPayload {
|
||||||
|
pub key: PkgKey,
|
||||||
|
pub enable: bool
|
||||||
|
}
|
||||||
|
|
||||||
impl DownloadHandler {
|
impl DownloadHandler {
|
||||||
pub fn new(app: AppHandle) -> DownloadHandler {
|
pub fn new(app: AppHandle) -> DownloadHandler {
|
||||||
DownloadHandler {
|
DownloadHandler {
|
||||||
@ -25,7 +31,7 @@ impl DownloadHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn download_zip(&mut self, zip_path: &PathBuf, pkg: &Package) -> Result<()> {
|
pub fn download_zip(&mut self, zip_path: &PathBuf, pkg: &Package, enable: bool) -> Result<()> {
|
||||||
let rmt = pkg.rmt.as_ref()
|
let rmt = pkg.rmt.as_ref()
|
||||||
.ok_or_else(|| anyhow!("Attempted to download a package without remote data"))?
|
.ok_or_else(|| anyhow!("Attempted to download a package without remote data"))?
|
||||||
.clone();
|
.clone();
|
||||||
@ -34,12 +40,18 @@ impl DownloadHandler {
|
|||||||
} else {
|
} else {
|
||||||
// TODO clear cache button should clear this
|
// TODO clear cache button should clear this
|
||||||
self.paths.insert(zip_path.clone());
|
self.paths.insert(zip_path.clone());
|
||||||
tauri::async_runtime::spawn(Self::download_zip_proc(self.app.clone(), zip_path.clone(), pkg.key(), rmt));
|
tauri::async_runtime::spawn(Self::download_zip_proc(self.app.clone(), zip_path.clone(), pkg.key(), rmt, enable));
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn download_zip_proc(app: AppHandle, zip_path: PathBuf, pkg_key: PkgKey, rmt: Remote) -> Result<()> {
|
async fn download_zip_proc(
|
||||||
|
app: AppHandle,
|
||||||
|
zip_path: PathBuf,
|
||||||
|
pkg_key: PkgKey,
|
||||||
|
rmt: Remote,
|
||||||
|
enable: bool
|
||||||
|
) -> Result<()> {
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
use tokio::io::AsyncWriteExt;
|
use tokio::io::AsyncWriteExt;
|
||||||
|
|
||||||
@ -66,7 +78,10 @@ impl DownloadHandler {
|
|||||||
|
|
||||||
log::debug!("downloaded to {:?}", zip_path);
|
log::debug!("downloaded to {:?}", zip_path);
|
||||||
|
|
||||||
app.emit("download-end", pkg_key)?;
|
app.emit("download-end", DownloadEndPayload {
|
||||||
|
key: pkg_key,
|
||||||
|
enable
|
||||||
|
})?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -102,16 +102,23 @@ pub async fn run(_args: Vec<String>) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
app.listen("download-end", closure!(clone apph, |ev| {
|
app.listen("download-end", closure!(clone apph, |ev| {
|
||||||
let raw = ev.payload();
|
let payload = serde_json::from_str::<download_handler::DownloadEndPayload>(ev.payload());
|
||||||
log::debug!("download-end triggered: {}", raw);
|
match payload {
|
||||||
let key = PkgKey(raw[1..raw.len()-1].to_owned());
|
Ok(payload) => {
|
||||||
let apph = apph.clone();
|
log::debug!("download-end triggered: {:?}", payload);
|
||||||
tauri::async_runtime::spawn(async move {
|
let key = payload.key;
|
||||||
let mutex = apph.state::<Mutex<AppData>>();
|
let apph = apph.clone();
|
||||||
let mut appd = mutex.lock().await;
|
tauri::async_runtime::spawn(async move {
|
||||||
let res = appd.pkgs.install_package(&key, true, false).await;
|
let mutex = apph.state::<Mutex<AppData>>();
|
||||||
log::debug!("download-end install {:?}", res);
|
let mut appd = mutex.lock().await;
|
||||||
});
|
let res = appd.pkgs.install_package(&key, true, false, payload.enable).await;
|
||||||
|
log::debug!("download-end install {:?}", res);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
Err(err) => {
|
||||||
|
log::error!("invalid download payload: {err}");
|
||||||
|
}
|
||||||
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
app.listen("launch-end", closure!(clone apph, |_| {
|
app.listen("launch-end", closure!(clone apph, |_| {
|
||||||
@ -134,11 +141,13 @@ pub async fn run(_args: Vec<String>) {
|
|||||||
tauri::async_runtime::spawn(async move {
|
tauri::async_runtime::spawn(async move {
|
||||||
let mutex = apph.state::<Mutex<AppData>>();
|
let mutex = apph.state::<Mutex<AppData>>();
|
||||||
let mut appd = mutex.lock().await;
|
let mut appd = mutex.lock().await;
|
||||||
let res = appd.toggle_package(payload.pkg.clone(), ToggleAction::EnableSelf);
|
if payload.enable == true {
|
||||||
log::debug!(
|
let res = appd.toggle_package(payload.pkg.clone(), ToggleAction::EnableSelf);
|
||||||
"install-end-prelude toggle {:?}",
|
log::debug!(
|
||||||
res
|
"install-end-prelude toggle {:?}",
|
||||||
);
|
res
|
||||||
|
);
|
||||||
|
}
|
||||||
use tauri::Emitter;
|
use tauri::Emitter;
|
||||||
let res = apph.emit("install-end", payload);
|
let res = apph.emit("install-end", payload);
|
||||||
log::debug!("install-end {:?}", res);
|
log::debug!("install-end {:?}", res);
|
||||||
@ -273,7 +282,7 @@ fn deep_link(app: AppHandle, args: Vec<String>) {
|
|||||||
let mut appd = mutex.lock().await;
|
let mut appd = mutex.lock().await;
|
||||||
if appd.pkgs.is_offline() {
|
if appd.pkgs.is_offline() {
|
||||||
log::warn!("Deep link installation failed: offline");
|
log::warn!("Deep link installation failed: offline");
|
||||||
} else if let Err(e) = appd.pkgs.install_package(&key, true, true).await {
|
} else if let Err(e) = appd.pkgs.install_package(&key, true, true, true).await {
|
||||||
log::warn!("Deep link installation failed: {}", e.to_string());
|
log::warn!("Deep link installation failed: {}", e.to_string());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -23,7 +23,8 @@ pub struct PackageStore {
|
|||||||
|
|
||||||
#[derive(Clone, Serialize, Deserialize, Debug)]
|
#[derive(Clone, Serialize, Deserialize, Debug)]
|
||||||
pub struct Payload {
|
pub struct Payload {
|
||||||
pub pkg: PkgKey
|
pub pkg: PkgKey,
|
||||||
|
pub enable: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, Serialize, Deserialize, Debug)]
|
#[derive(Clone, Copy, Serialize, Deserialize, Debug)]
|
||||||
@ -180,7 +181,13 @@ impl PackageStore {
|
|||||||
self.offline = false;
|
self.offline = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn install_package(&mut self, key: &PkgKey, force: bool, install_deps: bool) -> Result<InstallResult> {
|
pub async fn install_package(
|
||||||
|
&mut self,
|
||||||
|
key: &PkgKey,
|
||||||
|
force: bool,
|
||||||
|
install_deps: bool,
|
||||||
|
enable: bool
|
||||||
|
) -> Result<InstallResult> {
|
||||||
log::info!("installation request: {}/{}/{}", key, force, install_deps);
|
log::info!("installation request: {}/{}/{}", key, force, install_deps);
|
||||||
|
|
||||||
let pkg = self.store.get(key)
|
let pkg = self.store.get(key)
|
||||||
@ -193,7 +200,8 @@ impl PackageStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.app.emit("install-start", Payload {
|
self.app.emit("install-start", Payload {
|
||||||
pkg: key.to_owned()
|
pkg: key.to_owned(),
|
||||||
|
enable
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
let rmt = pkg.rmt.as_ref()
|
let rmt = pkg.rmt.as_ref()
|
||||||
@ -203,7 +211,7 @@ impl PackageStore {
|
|||||||
let mut set = HashSet::new();
|
let mut set = HashSet::new();
|
||||||
self.resolve_deps(rmt.clone(), &mut set)?;
|
self.resolve_deps(rmt.clone(), &mut set)?;
|
||||||
for dep in set {
|
for dep in set {
|
||||||
Box::pin(self.install_package(&dep, false, false)).await?;
|
Box::pin(self.install_package(&dep, false, false, enable)).await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,7 +222,7 @@ impl PackageStore {
|
|||||||
let part_path = zip_path.join(".part");
|
let part_path = zip_path.join(".part");
|
||||||
|
|
||||||
if !zip_path.exists() && !part_path.exists() {
|
if !zip_path.exists() && !part_path.exists() {
|
||||||
self.dlh.download_zip(&zip_path, &pkg)?;
|
self.dlh.download_zip(&zip_path, &pkg, enable)?;
|
||||||
log::debug!("deferring {}", key);
|
log::debug!("deferring {}", key);
|
||||||
return Ok(InstallResult::Deferred);
|
return Ok(InstallResult::Deferred);
|
||||||
}
|
}
|
||||||
@ -230,7 +238,8 @@ impl PackageStore {
|
|||||||
self.reload_package(key.to_owned()).await;
|
self.reload_package(key.to_owned()).await;
|
||||||
|
|
||||||
self.app.emit("install-end-prelude", Payload {
|
self.app.emit("install-end-prelude", Payload {
|
||||||
pkg: key.to_owned()
|
pkg: key.to_owned(),
|
||||||
|
enable
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
log::info!("installed {}", key);
|
log::info!("installed {}", key);
|
||||||
@ -252,7 +261,8 @@ impl PackageStore {
|
|||||||
|
|
||||||
if rv.is_ok() {
|
if rv.is_ok() {
|
||||||
self.app.emit("install-end-prelude", Payload {
|
self.app.emit("install-end-prelude", Payload {
|
||||||
pkg: key.to_owned()
|
pkg: key.to_owned(),
|
||||||
|
enable: false
|
||||||
})?;
|
})?;
|
||||||
log::info!("deleted {}", key);
|
log::info!("deleted {}", key);
|
||||||
}
|
}
|
||||||
|
@ -295,7 +295,7 @@ listen<DownloadingStatus>('download-progress', (event) => {
|
|||||||
pkg.hasAvailableUpdates
|
pkg.hasAvailableUpdates
|
||||||
"
|
"
|
||||||
icon="pi pi-download"
|
icon="pi pi-download"
|
||||||
label="UPDATE ALL"
|
:label="t('updateAll')"
|
||||||
size="small"
|
size="small"
|
||||||
class="mr-4 m-2.5"
|
class="mr-4 m-2.5"
|
||||||
@click="pkg.updateAll()"
|
@click="pkg.updateAll()"
|
||||||
|
@ -53,6 +53,6 @@ const remove = async () => {
|
|||||||
class="self-center ml-4"
|
class="self-center ml-4"
|
||||||
style="width: 2rem; height: 2rem"
|
style="width: 2rem; height: 2rem"
|
||||||
:loading="pkg?.js.downloading"
|
:loading="pkg?.js.downloading"
|
||||||
v-on:click="async () => await pkgs.install(pkg)"
|
v-on:click="async () => await pkgs.install(pkg, true)"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
@ -17,6 +17,7 @@ const install = async () => {
|
|||||||
await invoke('install_package', {
|
await invoke('install_package', {
|
||||||
key: pkgKey(props.pkg),
|
key: pkgKey(props.pkg),
|
||||||
force: true,
|
force: true,
|
||||||
|
enable: false,
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (props.pkg !== undefined) {
|
if (props.pkg !== undefined) {
|
||||||
|
@ -9,6 +9,7 @@ export default {
|
|||||||
skip: 'Skip',
|
skip: 'Skip',
|
||||||
close: 'Close',
|
close: 'Close',
|
||||||
by: 'by {namespace}',
|
by: 'by {namespace}',
|
||||||
|
updateAll: 'UPDATE ALL',
|
||||||
start: {
|
start: {
|
||||||
failed: 'Start check failed',
|
failed: 'Start check failed',
|
||||||
accept: 'Run anyway',
|
accept: 'Run anyway',
|
||||||
|
@ -9,6 +9,7 @@ export default {
|
|||||||
skip: 'Pomiń',
|
skip: 'Pomiń',
|
||||||
close: 'Zamknij',
|
close: 'Zamknij',
|
||||||
by: 'od {namespace}',
|
by: 'od {namespace}',
|
||||||
|
updateAll: 'ZAKTUALIZUJ WSZYSTKO',
|
||||||
start: {
|
start: {
|
||||||
failed: 'Uruchomienie nie powiodło się',
|
failed: 'Uruchomienie nie powiodło się',
|
||||||
accept: 'Uruchom mimo to',
|
accept: 'Uruchom mimo to',
|
||||||
|
@ -189,7 +189,7 @@ export const usePkgStore = defineStore('pkg', {
|
|||||||
await this.reloadAll();
|
await this.reloadAll();
|
||||||
},
|
},
|
||||||
|
|
||||||
async install(pkg: Package | undefined) {
|
async install(pkg: Package | undefined, enable: boolean) {
|
||||||
if (pkg === undefined) {
|
if (pkg === undefined) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -198,6 +198,7 @@ export const usePkgStore = defineStore('pkg', {
|
|||||||
await invoke('install_package', {
|
await invoke('install_package', {
|
||||||
key: pkgKey(pkg),
|
key: pkgKey(pkg),
|
||||||
force: true,
|
force: true,
|
||||||
|
enable,
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (pkg !== undefined) {
|
if (pkg !== undefined) {
|
||||||
@ -211,6 +212,7 @@ export const usePkgStore = defineStore('pkg', {
|
|||||||
await invoke('install_package', {
|
await invoke('install_package', {
|
||||||
key,
|
key,
|
||||||
force: true,
|
force: true,
|
||||||
|
enable: false,
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
@ -221,7 +223,7 @@ export const usePkgStore = defineStore('pkg', {
|
|||||||
const list = [];
|
const list = [];
|
||||||
for (const pkg of this.allLocal) {
|
for (const pkg of this.allLocal) {
|
||||||
if (pkg.rmt && pkg.rmt.version > pkg.loc!.version) {
|
if (pkg.rmt && pkg.rmt.version > pkg.loc!.version) {
|
||||||
list.push(this.install(pkg));
|
list.push(this.install(pkg, false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await Promise.all(list);
|
await Promise.all(list);
|
||||||
|
Reference in New Issue
Block a user