Skip to content

Commit a168f5c

Browse files
ComputerEliteComputerElite
authored andcommitted
WORKING???!!!!!!!
1 parent 7c9ace5 commit a168f5c

4 files changed

Lines changed: 52 additions & 7 deletions

File tree

QuestAppVersionSwitcher/CoreService.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ public async void Start()
9999
if (!File.Exists(coreVars.QAVSConfigLocation)) File.WriteAllText(coreVars.QAVSConfigLocation, JsonSerializer.Serialize(coreVars));
100100
coreVars = JsonSerializer.Deserialize<CoreVars>(File.ReadAllText(coreVars.QAVSConfigLocation));
101101
CoreVars.cosmetics = Cosmetics.LoadCosmetics();
102+
Logger.displayLogInConsole = true;
102103
QAVSModManager.Init();
103104
qAVSWebserver.Start();
104105
}

QuestAppVersionSwitcher/FolderPermission.cs

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,20 +56,61 @@ public static string RemapPathForApi300OrAbove(string path)
5656

5757
public static void Copy(string from, string to)
5858
{
59-
Stream file =
60-
AndroidCore.context.ContentResolver.OpenOutputStream(Uri.Parse(RemapPathForApi300OrAbove(to)));
59+
Stream file = GetOutputStream(to);
6160
StreamWriter sw = new StreamWriter(file);
6261
sw.Write(File.ReadAllBytes(from));
6362
sw.Dispose();
6463
}
6564

6665
public static void CreateDirectory(string dir)
6766
{
68-
Logger.Log(RemapPathForApi300OrAbove(Directory.GetParent(dir).FullName));
69-
DocumentFile parent = DocumentFile.FromTreeUri(AndroidCore.context, Uri.Parse(RemapPathForApi300OrAbove(Directory.GetParent(dir).FullName)));
67+
DocumentFile parent = GetAccessToFile(Directory.GetParent(dir).FullName);
7068
Logger.Log(parent.CanWrite().ToString());
7169
parent.CreateDirectory(Path.GetFileName(dir));
7270
}
71+
72+
/// <summary>
73+
///
74+
/// </summary>
75+
/// <param name="dir">Expected as /sdcard/Android/data/...</param>
76+
/// <returns></returns>
77+
public static DocumentFile GetAccessToFile(string dir)
78+
{
79+
Logger.Log("Trying to get access to " + dir);
80+
string start = "/sdcard/Android/data/" + CoreService.coreVars.currentApp;
81+
string diff = dir.Replace(start + "/", "");
82+
string[] dirs = diff.Split('/');
83+
DocumentFile startDir = DocumentFile.FromTreeUri(AndroidCore.context, Uri.Parse(RemapPathForApi300OrAbove(start).Replace("com.android.externalstorage.documents/document/", "com.android.externalstorage.documents/tree/")));
84+
DocumentFile currentDir = startDir;
85+
foreach (string dirName in dirs)
86+
{
87+
currentDir = currentDir.FindFile(dirName);
88+
}
89+
return currentDir;
90+
}
91+
92+
public static Stream GetOutputStream(string path)
93+
{
94+
DocumentFile directory = GetAccessToFile(Directory.GetParent(path).FullName);
95+
string name = Path.GetFileName(path);
96+
if (directory.FindFile(name) != null) directory.FindFile(name).Delete();
97+
return AndroidCore.context.ContentResolver.OpenOutputStream(directory.CreateFile("application/octet-stream", name).Uri);
98+
}
99+
100+
public static void Delete(string path)
101+
{
102+
DocumentFile directory = GetAccessToFile(Directory.GetParent(path).FullName);
103+
string name = Path.GetFileName(path);
104+
if (directory.FindFile(name) != null) directory.FindFile(name).Delete();
105+
}
106+
107+
public static void CreateDirectoryIfNotExisting(string path)
108+
{
109+
Logger.Log("Creating directory " + path+ " if it doesn't exist");
110+
DocumentFile directory = GetAccessToFile(Directory.GetParent(path).FullName);
111+
string name = Path.GetFileName(path);
112+
if (directory.FindFile(name) == null) directory.CreateDirectory(name);
113+
}
73114
}
74115

75116
public class FolderPermissionCallback : Java.Lang.Object, IActivityResultCallback
@@ -92,6 +133,7 @@ public void OnActivityResult(Object result)
92133
{
93134
if (activityResult.Data.Data != null)
94135
{
136+
Logger.Log(activityResult.Data.Data.ToString());
95137
AndroidCore.context.ContentResolver.TakePersistableUriPermission(
96138
activityResult.Data.Data,
97139
ActivityFlags.GrantReadUriPermission | ActivityFlags.GrantWriteUriPermission);

QuestAppVersionSwitcher/Mods/ModManager.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,15 +113,16 @@ public void Reset()
113113

114114
public async Task CreateModDirectories()
115115
{
116-
FileManager.CreateDirectoryIfNotExisting(ModsPath);
117-
FileManager.CreateDirectoryIfNotExisting(LibsPath);
116+
FolderPermission.CreateDirectoryIfNotExisting(ModsPath);
117+
FolderPermission.CreateDirectoryIfNotExisting(LibsPath);
118118
FileManager.CreateDirectoryIfNotExisting(ModsExtractPath);
119119
}
120120

121121
public async Task LoadModsForCurrentApp()
122122
{
123123
Logger.Log("Loading mods . . .");
124124
await CreateModDirectories();
125+
Logger.Log("Created directories");
125126

126127
// If a config file exists, we'll need to load our mods from it
127128
if (File.Exists(ConfigPath))

QuestAppVersionSwitcher/Mods/QPMod.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ public async Task Uninstall()
186186

187187
foreach(string f in filesToRemove)
188188
{
189-
if (File.Exists(f)) File.Delete(f);
189+
if (File.Exists(f)) FolderPermission.Delete(f);
190190
}
191191

192192
IsInstalled = false;
@@ -207,6 +207,7 @@ public byte[] OpenCover()
207207
}
208208

209209
string coverPath = Path.Combine(_provider.GetExtractDirectory(Id), Manifest.CoverImagePath);
210+
if (!File.Exists(coverPath)) return new byte[0];
210211
return File.ReadAllBytes(coverPath);
211212
}
212213

0 commit comments

Comments
 (0)