Reconstruct resource structure.

This commit is contained in:
2022-11-18 00:11:49 +08:00
parent 79240fdfe8
commit 15e9217f93
3 changed files with 77 additions and 25 deletions

View File

@@ -62,7 +62,7 @@ namespace Cryville.Crtr.Browsing {
var meta = new ChartMeta();
string name = item.Name;
string desc = "(Unknown)";
var metaFile = new FileInfo(item.FullName + "/meta.json");
var metaFile = new FileInfo(item.FullName + "/.umgc");
if (metaFile.Exists) {
using (var reader = new StreamReader(metaFile.FullName)) {
meta = JsonConvert.DeserializeObject<ChartMeta>(reader.ReadToEnd());
@@ -91,7 +91,7 @@ namespace Cryville.Crtr.Browsing {
public ChartDetail GetItemDetail(int id) {
var item = items[id];
var meta = new ChartMeta();
var metaFile = new FileInfo(item.FullName + "/meta.json");
var metaFile = new FileInfo(item.FullName + "/.umgc");
if (metaFile.Exists) {
using (var reader = new StreamReader(metaFile.FullName)) {
meta = JsonConvert.DeserializeObject<ChartMeta>(reader.ReadToEnd());
@@ -114,7 +114,13 @@ namespace Cryville.Crtr.Browsing {
}
public string GetItemPath(int id) {
return items[id].Name + "/.umgc";
var item = items[id];
var meta = new ChartMeta();
var metaFile = new FileInfo(item.FullName + "/.umgc");
using (var reader = new StreamReader(metaFile.FullName)) {
meta = JsonConvert.DeserializeObject<ChartMeta>(reader.ReadToEnd());
}
return string.Format("{0}/{1}.json", items[id].Name, meta.data);
}
public bool ImportItemFrom(string path) {
@@ -137,29 +143,38 @@ namespace Cryville.Crtr.Browsing {
var tres = (RawChartResource)res;
var dir = new DirectoryInfo(_rootPath + "/charts/" + res.Name);
if (!dir.Exists) dir.Create();
using (var writer = new StreamWriter(dir.FullName + "/.umgc")) {
using (var writer = new StreamWriter(dir.FullName + "/.json")) {
writer.Write(JsonConvert.SerializeObject(tres.Main, Game.GlobalJsonSerializerSettings));
}
using (var writer = new StreamWriter(dir.FullName + "/meta.json")) {
using (var writer = new StreamWriter(dir.FullName + "/.umgc")) {
tres.Meta.data = "";
writer.Write(JsonConvert.SerializeObject(tres.Meta, Game.GlobalJsonSerializerSettings));
}
if (tres.Meta.cover != null)
new FileInfo(Path.Combine(file.Directory.FullName, tres.Meta.cover))
.CopyTo(Path.Combine(dir.FullName, tres.Meta.cover), true);
}
else if (res is FileResource) {
var tres = (FileResource)res;
FileInfo dest;
// TODO chart, ruleset, skin
if (res is CoverResource)
dest = new FileInfo(_rootPath + "/charts/" + res.Name + "/" + tres.Source.Name);
DirectoryInfo dest;
if (res is ChartResource)
dest = new DirectoryInfo(_rootPath + "/charts/" + res.Name);
else if (res is RulesetResource)
dest = new DirectoryInfo(_rootPath + "/rulesets/" + res.Name);
else if (res is SkinResource)
dest = new DirectoryInfo(_rootPath + "/skins/" + res.Name);
else if (res is SongResource)
dest = new FileInfo(_rootPath + "/songs/" + res.Name + "/" + tres.Source.Extension);
dest = new DirectoryInfo(_rootPath + "/songs/" + res.Name);
else {
LogAndPopup(3, "Attempt to import unsupported file resource: {0}", res);
continue;
}
var dir = dest.Directory;
if (!dest.Exists) {
if (!dir.Exists) dir.Create();
tres.Source.CopyTo(dest.FullName);
dest.Create();
tres.Master.CopyTo(Path.Combine(dest.FullName, tres.Master.Extension));
foreach (var attachment in tres.Attachments) {
attachment.CopyTo(Path.Combine(dest.FullName, attachment.Name));
}
}
else LogAndPopup(1, "Resource already exists: {0}", res);
}