Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
2e17e0ae75 | |||
edef5cc6dc |
@ -1,6 +1,10 @@
|
|||||||
|
## 0.18.3
|
||||||
|
|
||||||
|
- Updated Rainycolor's domain・真
|
||||||
|
|
||||||
## 0.18.2
|
## 0.18.2
|
||||||
|
|
||||||
- Update Rainycolor's domain
|
- Updated Rainycolor's domain
|
||||||
|
|
||||||
## 0.18.1
|
## 0.18.1
|
||||||
|
|
||||||
|
@ -480,13 +480,18 @@ pub async fn create_shortcut(_app: AppHandle, profile_meta: ProfileMeta) -> Resu
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub async fn export_profile(state: State<'_, Mutex<AppData>>, export_keychip: bool, files: Vec<String>) -> Result<(), String> {
|
pub async fn export_profile(
|
||||||
|
state: State<'_, Mutex<AppData>>,
|
||||||
|
is_diagnostic: bool,
|
||||||
|
export_keychip: bool,
|
||||||
|
files: Vec<String>
|
||||||
|
) -> Result<(), String> {
|
||||||
log::debug!("invoke: export_profile({:?}, {:?} files)", export_keychip, files.len());
|
log::debug!("invoke: export_profile({:?}, {:?} files)", export_keychip, files.len());
|
||||||
|
|
||||||
let appd = state.lock().await;
|
let appd = state.lock().await;
|
||||||
match &appd.profile {
|
match &appd.profile {
|
||||||
Some(p) => {
|
Some(p) => {
|
||||||
p.export(export_keychip, files)
|
p.export(export_keychip, files, is_diagnostic)
|
||||||
.map_err(|e| e.to_string())?;
|
.map_err(|e| e.to_string())?;
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
|
@ -29,6 +29,10 @@ impl PatchFileVec {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn find_patches(&self, target: impl AsRef<Path>) -> Result<Vec<Patch>> {
|
pub fn find_patches(&self, target: impl AsRef<Path>) -> Result<Vec<Patch>> {
|
||||||
|
if !target.as_ref().exists() {
|
||||||
|
log::warn!("invalid target path: {:?}", target.as_ref());
|
||||||
|
anyhow::bail!("Unable to open {:?}. Make sure the game path is correct.", target.as_ref());
|
||||||
|
}
|
||||||
let checksum = try_digest(target.as_ref())?;
|
let checksum = try_digest(target.as_ref())?;
|
||||||
|
|
||||||
let mut res_patches = Vec::new();
|
let mut res_patches = Vec::new();
|
||||||
|
@ -109,7 +109,7 @@ impl Package {
|
|||||||
loc: None,
|
loc: None,
|
||||||
rmt: Some(Remote {
|
rmt: Some(Remote {
|
||||||
package_url: p.package_url,
|
package_url: p.package_url,
|
||||||
download_url: v.download_url,
|
download_url: v.download_url.replace("https://rainy.patafour.zip/", "https://www.rainycolor.org/"),
|
||||||
icon: v.icon,
|
icon: v.icon,
|
||||||
deprecated: p.is_deprecated,
|
deprecated: p.is_deprecated,
|
||||||
nsfw: p.has_nsfw_content,
|
nsfw: p.has_nsfw_content,
|
||||||
|
@ -36,7 +36,7 @@ impl Profile {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
pub fn export(&self, export_keychip: bool, extra_files: Vec<String>) -> anyhow::Result<()> {
|
pub fn export(&self, export_keychip: bool, extra_files: Vec<String>, is_diagnostic: bool) -> anyhow::Result<()> {
|
||||||
let mut prf = self.clone();
|
let mut prf = self.clone();
|
||||||
|
|
||||||
let dir = util::config_dir().join("exports");
|
let dir = util::config_dir().join("exports");
|
||||||
@ -45,7 +45,7 @@ impl Profile {
|
|||||||
std::fs::create_dir(&dir)?;
|
std::fs::create_dir(&dir)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let path = dir.join(format!("{}-{}-template.zip", &self.meta.game, &self.meta.name));
|
let path = dir.join(format!("{}-{}-{}.zip", &self.meta.game, &self.meta.name, if is_diagnostic { "diagnostic" } else { "template" } ));
|
||||||
|
|
||||||
{
|
{
|
||||||
let sgt = &mut prf.data.sgt;
|
let sgt = &mut prf.data.sgt;
|
||||||
@ -66,7 +66,7 @@ impl Profile {
|
|||||||
if network.local_path.is_absolute() {
|
if network.local_path.is_absolute() {
|
||||||
network.local_path = PathBuf::new();
|
network.local_path = PathBuf::new();
|
||||||
}
|
}
|
||||||
if !export_keychip {
|
if !export_keychip || is_diagnostic {
|
||||||
network.keychip = String::new();
|
network.keychip = String::new();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -83,6 +83,29 @@ impl Profile {
|
|||||||
zip.write_all(&std::fs::read(self.config_dir().join(file))?)?;
|
zip.write_all(&std::fs::read(self.config_dir().join(file))?)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if is_diagnostic {
|
||||||
|
let name = "mu3.exe.log";
|
||||||
|
let path = self.data_dir().join(name);
|
||||||
|
if path.exists() {
|
||||||
|
zip.start_file(name, options)?;
|
||||||
|
zip.write_all(&std::fs::read(path)?)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
let name = "chusanApp.exe.log";
|
||||||
|
let path = self.data_dir().join(name);
|
||||||
|
if path.exists() {
|
||||||
|
zip.start_file(name, options)?;
|
||||||
|
zip.write_all(&std::fs::read(path)?)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
let name = "amdaemon.exe.log";
|
||||||
|
let path = self.data_dir().join(name);
|
||||||
|
if path.exists() {
|
||||||
|
zip.start_file(name, options)?;
|
||||||
|
zip.write_all(&std::fs::read(path)?)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
zip.finish()?;
|
zip.finish()?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://schema.tauri.app/config/2",
|
"$schema": "https://schema.tauri.app/config/2",
|
||||||
"productName": "STARTLINER",
|
"productName": "STARTLINER",
|
||||||
"version": "0.18.2",
|
"version": "0.19.0",
|
||||||
"identifier": "zip.patafour.startliner",
|
"identifier": "zip.patafour.startliner",
|
||||||
"build": {
|
"build": {
|
||||||
"beforeDevCommand": "bun run dev",
|
"beforeDevCommand": "bun run dev",
|
||||||
|
@ -29,23 +29,34 @@ const files = new Set<string>();
|
|||||||
).includes('chunithm');
|
).includes('chunithm');
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
const fileList = {
|
||||||
|
ongeki: ['aime.txt', 'inohara.cfg', 'mu3.ini', 'segatools-base.ini'],
|
||||||
|
chunithm: ['aime.txt', 'saekawa.toml', 'segatools-base.ini'],
|
||||||
|
};
|
||||||
|
|
||||||
|
const diagnosticList = {
|
||||||
|
ongeki: ['mu3.ini', 'segatools-base.ini'],
|
||||||
|
chunithm: ['segatools-base.ini'],
|
||||||
|
};
|
||||||
|
|
||||||
|
const diagnostic = ref(false);
|
||||||
|
|
||||||
const exportTemplate = async () => {
|
const exportTemplate = async () => {
|
||||||
const fl = [...files.values()];
|
const fl = [...files.values()];
|
||||||
exportVisible.value = false;
|
exportVisible.value = false;
|
||||||
await invoke('export_profile', {
|
await invoke('export_profile', {
|
||||||
exportKeychip: exportKeychip.value,
|
exportKeychip: exportKeychip.value,
|
||||||
files: fl,
|
isDiagnostic: diagnostic.value,
|
||||||
|
files:
|
||||||
|
diagnostic.value === true
|
||||||
|
? diagnosticList[prf.current!.meta.game]
|
||||||
|
: fl,
|
||||||
});
|
});
|
||||||
await invoke('open_file', {
|
await invoke('open_file', {
|
||||||
path: await path.join(await general.configDir, 'exports'),
|
path: await path.join(await general.configDir, 'exports'),
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const fileList = {
|
|
||||||
ongeki: ['aime.txt', 'inohara.cfg', 'mu3.ini', 'segatools-base.ini'],
|
|
||||||
chunithm: ['aime.txt', 'saekawa.toml', 'segatools-base.ini'],
|
|
||||||
};
|
|
||||||
|
|
||||||
const fileListCurrent: Ref<string[]> = ref([]);
|
const fileListCurrent: Ref<string[]> = ref([]);
|
||||||
|
|
||||||
const recalcFileList = async () => {
|
const recalcFileList = async () => {
|
||||||
@ -91,16 +102,36 @@ const importPick = async () => {
|
|||||||
:visible="exportVisible"
|
:visible="exportVisible"
|
||||||
:closable="false /*this shit doesn't work */"
|
:closable="false /*this shit doesn't work */"
|
||||||
:header="`${t('profile.export')} ${prf.current?.meta.name}`"
|
:header="`${t('profile.export')} ${prf.current?.meta.name}`"
|
||||||
:style="{ width: '300px', scale: client.scaleValue }"
|
:style="{ width: '330px', scale: client.scaleValue }"
|
||||||
>
|
>
|
||||||
<div class="flex flex-col gap-4">
|
<div class="flex flex-col gap-4">
|
||||||
|
<div class="flex flex-col items-center">
|
||||||
|
<SelectButton
|
||||||
|
v-model="diagnostic"
|
||||||
|
:options="[
|
||||||
|
{
|
||||||
|
title: t('profile.standardExport'),
|
||||||
|
value: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t('profile.diagnostic'),
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
]"
|
||||||
|
:allow-empty="false"
|
||||||
|
option-label="title"
|
||||||
|
option-value="value"
|
||||||
|
>
|
||||||
|
</SelectButton>
|
||||||
|
</div>
|
||||||
<div class="flex flex-row">
|
<div class="flex flex-row">
|
||||||
<div class="grow">{{ t('profile.export') }} keychip</div>
|
<div class="grow">{{ t('profile.export') }} keychip</div>
|
||||||
<ToggleSwitch v-model="exportKeychip" />
|
<ToggleSwitch :disabled="diagnostic" v-model="exportKeychip" />
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-row" v-for="f in fileListCurrent">
|
<div class="flex flex-row" v-for="f in fileListCurrent">
|
||||||
<div class="grow">{{ t('profile.export') }} {{ f }}</div>
|
<div class="grow">{{ t('profile.export') }} {{ f }}</div>
|
||||||
<ToggleSwitch
|
<ToggleSwitch
|
||||||
|
:disabled="diagnostic"
|
||||||
:model-value="true"
|
:model-value="true"
|
||||||
@update:model-value="
|
@update:model-value="
|
||||||
(v) => {
|
(v) => {
|
||||||
|
@ -44,8 +44,10 @@ export default {
|
|||||||
reallyDelete: 'Are you sure you want to delete {profile}?',
|
reallyDelete: 'Are you sure you want to delete {profile}?',
|
||||||
template: 'STARTLINER template',
|
template: 'STARTLINER template',
|
||||||
importTemplate: 'Import template',
|
importTemplate: 'Import template',
|
||||||
exportTemplate: 'Export template',
|
exportTemplate: 'Export profile',
|
||||||
export: 'Export',
|
export: 'Export',
|
||||||
|
standardExport: 'Template',
|
||||||
|
diagnostic: 'Diagnostic',
|
||||||
},
|
},
|
||||||
creator: {
|
creator: {
|
||||||
header: 'Package creator',
|
header: 'Package creator',
|
||||||
|
@ -44,8 +44,10 @@ export default {
|
|||||||
reallyDelete: 'Czy na pewno chcesz usunąć {profile}?',
|
reallyDelete: 'Czy na pewno chcesz usunąć {profile}?',
|
||||||
template: 'Szablon',
|
template: 'Szablon',
|
||||||
importTemplate: 'Importuj szablon',
|
importTemplate: 'Importuj szablon',
|
||||||
exportTemplate: 'Eksportuj szablon',
|
exportTemplate: 'Eksportuj profil',
|
||||||
export: 'Eksportuj',
|
export: 'Eksportuj',
|
||||||
|
standardExport: 'Szablon',
|
||||||
|
diagnostic: 'Diagnostyka',
|
||||||
},
|
},
|
||||||
creator: {
|
creator: {
|
||||||
header: 'Kreator pakietów',
|
header: 'Kreator pakietów',
|
||||||
|
Reference in New Issue
Block a user