Reconstruct resource structure.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
@@ -1,4 +1,5 @@
|
||||
using Cryville.Common;
|
||||
using Newtonsoft.Json;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
@@ -26,25 +27,62 @@ namespace Cryville.Crtr.Browsing {
|
||||
public override bool Valid { get { return true; } }
|
||||
}
|
||||
public abstract class FileResource : Resource {
|
||||
public FileResource(string name, FileInfo src) : base(name) {
|
||||
Source = src;
|
||||
public FileResource(string name, FileInfo master, FileInfo[] attachments) : base(name) {
|
||||
Master = master;
|
||||
Attachments = attachments;
|
||||
}
|
||||
public FileInfo Master { get; private set; }
|
||||
public FileInfo[] Attachments { get; private set; }
|
||||
public override bool Valid {
|
||||
get {
|
||||
if (!Master.Exists) return false;
|
||||
foreach (var file in Attachments) {
|
||||
if (!file.Exists) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
public FileInfo Source { get; private set; }
|
||||
public override bool Valid { get { return Source.Exists; } }
|
||||
}
|
||||
public class ChartResource : FileResource {
|
||||
public ChartResource(string name, FileInfo src) : base(name, src) { }
|
||||
}
|
||||
public class CoverResource : FileResource {
|
||||
public CoverResource(string name, FileInfo src) : base(name, src) { }
|
||||
public ChartResource(string name, FileInfo master) : base(name, master, GetAttachments(master)) { }
|
||||
static FileInfo[] GetAttachments(FileInfo master) {
|
||||
using (var reader = new StreamReader(master.FullName)) {
|
||||
var meta = JsonConvert.DeserializeObject<ChartMeta>(reader.ReadToEnd());
|
||||
var result = new List<FileInfo> {
|
||||
new FileInfo(Path.Combine(master.Directory.FullName, meta.data + ".json")),
|
||||
};
|
||||
if (meta.cover != null) result.Add(new FileInfo(Path.Combine(master.Directory.FullName, meta.cover)));
|
||||
return result.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
public class SongResource : FileResource {
|
||||
public SongResource(string name, FileInfo src) : base(name, src) { }
|
||||
public SongResource(string name, FileInfo master) : base(name, master, new FileInfo[0]) { }
|
||||
}
|
||||
public class RulesetResource : FileResource {
|
||||
public RulesetResource(string name, FileInfo src) : base(name, src) { }
|
||||
public RulesetResource(string name, FileInfo master) : base(name, master, GetAttachments(master)) { }
|
||||
static FileInfo[] GetAttachments(FileInfo master) {
|
||||
using (var reader = new StreamReader(master.FullName)) {
|
||||
var meta = JsonConvert.DeserializeObject<Ruleset>(reader.ReadToEnd());
|
||||
return new FileInfo[] {
|
||||
new FileInfo(Path.Combine(master.Directory.FullName, meta.data + ".pdt")),
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
public class SkinResource : FileResource {
|
||||
public SkinResource(string name, FileInfo src) : base(name, src) { }
|
||||
public SkinResource(string name, FileInfo master) : base(name, master, GetAttachments(master)) { }
|
||||
static FileInfo[] GetAttachments(FileInfo master) {
|
||||
using (var reader = new StreamReader(master.FullName)) {
|
||||
var meta = JsonConvert.DeserializeObject<Skin>(reader.ReadToEnd());
|
||||
var result = new List<FileInfo> {
|
||||
new FileInfo(Path.Combine(master.Directory.FullName, meta.data + ".pdt")),
|
||||
};
|
||||
foreach (var frame in meta.frames) {
|
||||
result.Add(new FileInfo(Path.Combine(master.Directory.FullName, frame)));
|
||||
}
|
||||
return result.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -148,7 +148,6 @@ namespace Cryville.Crtr.Extensions.Malody {
|
||||
meta.note_count = group.notes.Count;
|
||||
string chartName = string.Format("{0} - {1}", meta.song.name, meta.name);
|
||||
if (src.meta.background != null) {
|
||||
result.Add(new CoverResource(chartName, new FileInfo(file.DirectoryName + "/" + src.meta.background)));
|
||||
meta.cover = src.meta.background;
|
||||
}
|
||||
result.Add(new RawChartResource(chartName, chart, meta));
|
||||
|
Reference in New Issue
Block a user