mirror of
https://github.com/yuzu-emu/liftinstall.git
synced 2024-12-22 19:15:34 +00:00
Implement migration system to move from canary/nightly
This commit is contained in:
parent
68109894f1
commit
bdbab4dc4d
12
Cargo.toml
12
Cargo.toml
|
@ -56,3 +56,15 @@ slug = "0.1.4"
|
|||
[target.'cfg(windows)'.build-dependencies]
|
||||
winres = "0.1"
|
||||
cc = "1.0"
|
||||
|
||||
[profile.release]
|
||||
#panic = "abort"
|
||||
lto = true
|
||||
opt-level = "z"
|
||||
codegen-units = 1
|
||||
incremental = false
|
||||
|
||||
#[profile.release.overrides."*"] # +
|
||||
#opt-level = "z"
|
||||
#codegen-units = 1
|
||||
#incremental = false
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
name = "yuzu"
|
||||
target_url = "https://raw.githubusercontent.com/yuzu-emu/liftinstall/master/config.windows.v7.toml"
|
||||
target_url = "https://raw.githubusercontent.com/yuzu-emu/liftinstall/master/config.windows.v8.toml"
|
||||
|
|
16
config.windows.v8.toml
Normal file
16
config.windows.v8.toml
Normal file
|
@ -0,0 +1,16 @@
|
|||
installing_message = "Reminder: yuzu is an <b>experimental</b> emulator. Stuff will break!"
|
||||
hide_advanced = true
|
||||
|
||||
[[packages]]
|
||||
name = "yuzu"
|
||||
description = "Includes frequent updates to yuzu with all the latest reviewed and tested features."
|
||||
default = true
|
||||
[packages.source]
|
||||
name = "github"
|
||||
match = "^yuzu-windows-msvc-[0-9]*-[0-9a-f]*.zip$"
|
||||
[packages.source.config]
|
||||
repo = "yuzu-emu/yuzu-mainline"
|
||||
[[packages.shortcuts]]
|
||||
name = "yuzu"
|
||||
relative_path = "yuzu-windows-msvc/yuzu.exe"
|
||||
description = "Launch yuzu"
|
|
@ -42,7 +42,9 @@ pub fn file_from_string(file_path: &str) -> Option<(String, &'static [u8])> {
|
|||
"/fonts/roboto-v18-latin-regular.woff",
|
||||
"/fonts/roboto-v18-latin-regular.woff2",
|
||||
"/js/chunk-vendors.js",
|
||||
"/js/app.js"
|
||||
"/js/chunk-vendors.js.map",
|
||||
"/js/app.js",
|
||||
"/js/app.js.map"
|
||||
)?;
|
||||
|
||||
Some((string_mime, contents))
|
||||
|
|
|
@ -47,13 +47,6 @@ impl Task for InstallTask {
|
|||
}),
|
||||
));
|
||||
|
||||
for item in &self.items {
|
||||
elements.push(TaskDependency::build(
|
||||
TaskOrdering::Pre,
|
||||
Box::new(InstallPackageTask { name: item.clone() }),
|
||||
));
|
||||
}
|
||||
|
||||
for item in &self.uninstall_items {
|
||||
elements.push(TaskDependency::build(
|
||||
TaskOrdering::Pre,
|
||||
|
@ -64,6 +57,13 @@ impl Task for InstallTask {
|
|||
));
|
||||
}
|
||||
|
||||
for item in &self.items {
|
||||
elements.push(TaskDependency::build(
|
||||
TaskOrdering::Pre,
|
||||
Box::new(InstallPackageTask { name: item.clone() }),
|
||||
));
|
||||
}
|
||||
|
||||
if self.fresh_install {
|
||||
elements.push(TaskDependency::build(
|
||||
TaskOrdering::Pre,
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 105 KiB |
Binary file not shown.
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 32 KiB |
|
@ -1,6 +1,7 @@
|
|||
import Vue from 'vue'
|
||||
import Router from 'vue-router'
|
||||
import DownloadConfig from './views/DownloadConfig.vue'
|
||||
import MigrateView from './views/MigrateView.vue'
|
||||
import SelectPackages from './views/SelectPackages.vue'
|
||||
import ErrorView from './views/ErrorView.vue'
|
||||
import InstallPackages from './views/InstallPackages.vue'
|
||||
|
@ -16,6 +17,11 @@ export default new Router({
|
|||
name: 'config',
|
||||
component: DownloadConfig
|
||||
},
|
||||
{
|
||||
path: '/migrate',
|
||||
name: 'migrate',
|
||||
component: MigrateView
|
||||
},
|
||||
{
|
||||
path: '/packages',
|
||||
name: 'packages',
|
||||
|
@ -32,7 +38,7 @@ export default new Router({
|
|||
component: ErrorView
|
||||
},
|
||||
{
|
||||
path: '/complete/:uninstall/:update/:packages_installed',
|
||||
path: '/complete/:uninstall/:update/:migrate/:packages_installed',
|
||||
name: 'complete',
|
||||
component: CompleteView
|
||||
},
|
||||
|
|
|
@ -1,6 +1,13 @@
|
|||
<template>
|
||||
<div class="column has-padding">
|
||||
<div v-if="was_update">
|
||||
<div v-if="was_migrate">
|
||||
<h4 class="subtitle">You have been moved to the new, single version of {{ $root.$data.attrs.name }}.</h4>
|
||||
|
||||
<p>You can find your installed applications in your start menu - if you were in the middle of something, just reattempt.</p>
|
||||
|
||||
<img src="../assets/how-to-open.png" alt="Where yuzu is installed"/>
|
||||
</div>
|
||||
<div v-else-if="was_update">
|
||||
<div v-if="has_installed">
|
||||
<h4 class="subtitle">{{ $root.$data.attrs.name }} has been updated.</h4>
|
||||
|
||||
|
@ -38,6 +45,7 @@ export default {
|
|||
return {
|
||||
was_install: !this.$route.params.uninstall,
|
||||
was_update: this.$route.params.update,
|
||||
was_migrate: this.$route.params.migrate,
|
||||
has_installed: this.$route.params.packages_installed > 0
|
||||
}
|
||||
},
|
||||
|
|
|
@ -71,11 +71,8 @@ export default {
|
|||
}
|
||||
}
|
||||
|
||||
if (app.metadata.is_launcher) {
|
||||
this.$router.replace('/install/regular')
|
||||
} else {
|
||||
this.$router.replace('/modify')
|
||||
}
|
||||
this.$router.replace({ name: 'migrate',
|
||||
params: { next: app.metadata.is_launcher ? '/install/regular' : '/modify' } })
|
||||
} else {
|
||||
for (var x = 0; x < app.config.packages.length; x++) {
|
||||
app.config.packages[x].installed = false
|
||||
|
@ -89,7 +86,8 @@ export default {
|
|||
}
|
||||
})
|
||||
|
||||
this.$router.replace('/packages')
|
||||
this.$router.replace({ name: 'migrate',
|
||||
params: { next: '/packages' } })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -98,6 +98,7 @@ export default {
|
|||
params: {
|
||||
uninstall: true,
|
||||
update: that.is_update,
|
||||
migrate: false,
|
||||
installed: that.packages_installed
|
||||
} })
|
||||
} else {
|
||||
|
@ -105,6 +106,7 @@ export default {
|
|||
params: {
|
||||
uninstall: false,
|
||||
update: that.is_update,
|
||||
migrate: false,
|
||||
installed: that.packages_installed
|
||||
} })
|
||||
}
|
||||
|
|
105
ui/src/views/MigrateView.vue
Normal file
105
ui/src/views/MigrateView.vue
Normal file
|
@ -0,0 +1,105 @@
|
|||
<template>
|
||||
<div class="column has-padding">
|
||||
<h4 class="subtitle">Performing migrations...</h4>
|
||||
<div v-html="$root.$data.config.installing_message"></div>
|
||||
<br />
|
||||
|
||||
<div v-html="progress_message"></div>
|
||||
<progress class="progress is-info is-medium" v-bind:value="progress" max="100">
|
||||
{{ progress }}%
|
||||
</progress>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'MigrateView',
|
||||
data: function () {
|
||||
return {
|
||||
progress: 0.0,
|
||||
progress_message: 'Please wait...',
|
||||
failed_with_error: false,
|
||||
packages_installed: 0,
|
||||
next_stop: this.$route.params.next
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
// See if we need to migrate yuzu to mainline
|
||||
var need_migrate = false;
|
||||
for (var package_id in this.$root.metadata.database.packages) {
|
||||
var name = this.$root.metadata.database.packages[package_id].name
|
||||
if ((name.indexOf("Nightly") !== -1 || name.indexOf("Canary") !== -1)) {
|
||||
console.log("Migration needed (found \"" + name + "\", move to mainline)")
|
||||
|
||||
// Migration step: deactivate this package
|
||||
if ( this.$root.config.packages[package_id] !== undefined) {
|
||||
this.$root.config.packages[package_id].default = false;
|
||||
}
|
||||
|
||||
// Migration step: enable mainline
|
||||
for (var sub_package_id in this.$root.config.packages) {
|
||||
var name = this.$root.config.packages[sub_package_id].name
|
||||
if (name === "yuzu") {
|
||||
this.$root.config.packages[sub_package_id].default = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
need_migrate = true;
|
||||
}
|
||||
}
|
||||
|
||||
console.log("Next stop: " + JSON.stringify(this.next_stop));
|
||||
if (need_migrate) {
|
||||
this.next_stop = "/complete/false/true/true/[]"
|
||||
this.install()
|
||||
} else {
|
||||
this.$router.replace(this.next_stop)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
install: function () {
|
||||
var that = this
|
||||
var app = this.$root
|
||||
|
||||
var results = {}
|
||||
|
||||
for (var package_index = 0; package_index < app.config.packages.length; package_index++) {
|
||||
var current_package = app.config.packages[package_index]
|
||||
if (current_package.default != null) {
|
||||
results[current_package.name] = current_package.default
|
||||
}
|
||||
}
|
||||
|
||||
console.log("Install results: " + JSON.stringify(results));
|
||||
|
||||
results['path'] = app.install_location
|
||||
|
||||
var targetUrl = '/api/start-install'
|
||||
|
||||
this.$root.stream_ajax(targetUrl, function (line) {
|
||||
// On progress line received from server
|
||||
|
||||
if (line.hasOwnProperty('Status')) {
|
||||
that.progress_message = line.Status[0]
|
||||
that.progress = line.Status[1] * 100
|
||||
}
|
||||
|
||||
if (line.hasOwnProperty('PackageInstalled')) {
|
||||
that.packages_installed += 1
|
||||
}
|
||||
|
||||
if (line.hasOwnProperty('Error')) {
|
||||
that.failed_with_error = true
|
||||
that.$router.replace({ name: 'showerr', params: { msg: line.Error } })
|
||||
}
|
||||
}, function (e) {
|
||||
// On request completed
|
||||
if (!that.failed_with_error) {
|
||||
that.$router.replace(that.next_stop)
|
||||
}
|
||||
}, undefined, results)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
Loading…
Reference in a new issue