diff --git a/Assets/Cryville/Common/StringUtils.cs b/Assets/Cryville/Common/StringUtils.cs
index cbff5fe..29e4d94 100644
--- a/Assets/Cryville/Common/StringUtils.cs
+++ b/Assets/Cryville/Common/StringUtils.cs
@@ -44,5 +44,21 @@ namespace Cryville.Common {
if (result.Length == 0) return "_";
return result;
}
+ ///
+ /// Gets the process path from a command.
+ ///
+ /// The command.
+ /// The process path.
+ public static string GetProcessPathFromCommand(string command) {
+ command = command.Trim();
+ if (command[0] == '"') {
+ return command.Substring(1, command.IndexOf('"', 1) - 1);
+ }
+ else {
+ int e = command.IndexOf(' ');
+ if (e == -1) return command;
+ else return command.Substring(0, e);
+ }
+ }
}
}
diff --git a/Assets/Cryville/Crtr/Browsing/LocalResourceFinder.cs b/Assets/Cryville/Crtr/Browsing/LocalResourceFinder.cs
new file mode 100644
index 0000000..1cc377d
--- /dev/null
+++ b/Assets/Cryville/Crtr/Browsing/LocalResourceFinder.cs
@@ -0,0 +1,6 @@
+namespace Cryville.Crtr.Browsing {
+ public abstract class LocalResourceFinder {
+ public abstract string Name { get; }
+ public abstract string GetRootPath();
+ }
+}
diff --git a/Assets/Cryville/Crtr/Browsing/LocalResourceFinder.cs.meta b/Assets/Cryville/Crtr/Browsing/LocalResourceFinder.cs.meta
new file mode 100644
index 0000000..a36e35d
--- /dev/null
+++ b/Assets/Cryville/Crtr/Browsing/LocalResourceFinder.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f5b3f3294f679f14f8ec1195b0def630
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Cryville/Crtr/Extensions/Malody/MalodyChartFinder.cs b/Assets/Cryville/Crtr/Extensions/Malody/MalodyChartFinder.cs
new file mode 100644
index 0000000..c92d8ae
--- /dev/null
+++ b/Assets/Cryville/Crtr/Extensions/Malody/MalodyChartFinder.cs
@@ -0,0 +1,26 @@
+using Cryville.Common;
+using Cryville.Crtr.Browsing;
+using Microsoft.Win32;
+using System;
+using System.IO;
+
+namespace Cryville.Crtr.Extensions.Malody {
+ public class MalodyChartFinder : LocalResourceFinder {
+ public override string Name { get { return "Malody beatmaps"; } }
+
+ public override string GetRootPath() {
+ switch (Environment.OSVersion.Platform) {
+ case PlatformID.Unix:
+ return "/storage/emulated/0/data/malody/beatmap";
+ case PlatformID.Win32NT:
+ var reg = Registry.ClassesRoot.OpenSubKey(@"malody\Shell\Open\Command");
+ if (reg == null) return null;
+ var pathObj = reg.GetValue(null);
+ if (pathObj == null) return null;
+ var path = (string)pathObj;
+ return Path.Combine(new FileInfo(StringUtils.GetProcessPathFromCommand(path)).Directory.FullName, "beatmap");
+ default: return null;
+ }
+ }
+ }
+}
diff --git a/Assets/Cryville/Crtr/Extensions/Malody/MalodyChartFinder.cs.meta b/Assets/Cryville/Crtr/Extensions/Malody/MalodyChartFinder.cs.meta
new file mode 100644
index 0000000..2b20f76
--- /dev/null
+++ b/Assets/Cryville/Crtr/Extensions/Malody/MalodyChartFinder.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3c9beaff62143a2468e18ad4642232c0
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Cryville/Crtr/Extensions/Quaver/QuaverChartFinder.cs b/Assets/Cryville/Crtr/Extensions/Quaver/QuaverChartFinder.cs
new file mode 100644
index 0000000..4c8376f
--- /dev/null
+++ b/Assets/Cryville/Crtr/Extensions/Quaver/QuaverChartFinder.cs
@@ -0,0 +1,24 @@
+using Cryville.Common;
+using Cryville.Crtr.Browsing;
+using Microsoft.Win32;
+using System;
+using System.IO;
+
+namespace Cryville.Crtr.Extensions.Quaver {
+ public class QuaverChartFinder : LocalResourceFinder {
+ public override string Name { get { return "Quaver beatmaps"; } }
+
+ public override string GetRootPath() {
+ switch (Environment.OSVersion.Platform) {
+ case PlatformID.Win32NT:
+ var reg = Registry.ClassesRoot.OpenSubKey(@"quaver\Shell\Open\Command");
+ if (reg == null) return null;
+ var pathObj = reg.GetValue(null);
+ if (pathObj == null) return null;
+ var path = (string)pathObj;
+ return Path.Combine(new FileInfo(StringUtils.GetProcessPathFromCommand(path)).Directory.FullName, "Songs");
+ default: return null;
+ }
+ }
+ }
+}
diff --git a/Assets/Cryville/Crtr/Extensions/Quaver/QuaverChartFinder.cs.meta b/Assets/Cryville/Crtr/Extensions/Quaver/QuaverChartFinder.cs.meta
new file mode 100644
index 0000000..3991973
--- /dev/null
+++ b/Assets/Cryville/Crtr/Extensions/Quaver/QuaverChartFinder.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 68bacf7746cbeea42a78a7d55cfdbea0
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Cryville/Crtr/Extensions/osu/osuChartFinder.cs b/Assets/Cryville/Crtr/Extensions/osu/osuChartFinder.cs
new file mode 100644
index 0000000..ed73d5b
--- /dev/null
+++ b/Assets/Cryville/Crtr/Extensions/osu/osuChartFinder.cs
@@ -0,0 +1,24 @@
+using Cryville.Common;
+using Cryville.Crtr.Browsing;
+using Microsoft.Win32;
+using System;
+using System.IO;
+
+namespace Cryville.Crtr.Extensions.osu {
+ public class osuChartFinder : LocalResourceFinder {
+ public override string Name { get { return "osu! beatmaps"; } }
+
+ public override string GetRootPath() {
+ switch (Environment.OSVersion.Platform) {
+ case PlatformID.Win32NT:
+ var reg = Registry.ClassesRoot.OpenSubKey(@"osu!\Shell\Open\Command");
+ if (reg == null) return null;
+ var pathObj = reg.GetValue(null);
+ if (pathObj == null) return null;
+ var path = (string)pathObj;
+ return Path.Combine(new FileInfo(StringUtils.GetProcessPathFromCommand(path)).Directory.FullName, "Songs");
+ default: return null;
+ }
+ }
+ }
+}
diff --git a/Assets/Cryville/Crtr/Extensions/osu/osuChartFinder.cs.meta b/Assets/Cryville/Crtr/Extensions/osu/osuChartFinder.cs.meta
new file mode 100644
index 0000000..228ad57
--- /dev/null
+++ b/Assets/Cryville/Crtr/Extensions/osu/osuChartFinder.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 365d879536c05284fa2335a7676c6cf4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: