mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-19 14:53:50 +02:00
Refactored FilePicker (#1045)
This commit is contained in:
@@ -326,6 +326,50 @@ namespace VRCX
|
||||
return await tcs.Task;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Opens a folder dialog to select a file and pass the path back to the JS side.
|
||||
/// </summary>
|
||||
/// <param name="defaultPath">The default path for the file picker.</param>
|
||||
public async Task<string> OpenFileSelectorDialog(string defaultPath = "", string defaultExt = "", string defaultFilter = "All files (*.*)|*.*")
|
||||
{
|
||||
var tcs = new TaskCompletionSource<string>();
|
||||
var staThread = new Thread(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
using (var openFileDialog = new System.Windows.Forms.OpenFileDialog())
|
||||
{
|
||||
if (Directory.Exists(defaultPath))
|
||||
{
|
||||
openFileDialog.InitialDirectory = defaultPath;
|
||||
}
|
||||
|
||||
openFileDialog.DefaultExt = defaultExt;
|
||||
openFileDialog.Filter = defaultFilter;
|
||||
|
||||
var dialogResult = openFileDialog.ShowDialog(MainForm.nativeWindow);
|
||||
if (dialogResult == DialogResult.OK && !string.IsNullOrEmpty(openFileDialog.FileName))
|
||||
{
|
||||
tcs.SetResult(openFileDialog.FileName);
|
||||
}
|
||||
else
|
||||
{
|
||||
tcs.SetResult("");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
tcs.SetException(ex);
|
||||
}
|
||||
});
|
||||
|
||||
staThread.SetApartmentState(ApartmentState.STA);
|
||||
staThread.Start();
|
||||
|
||||
return await tcs.Task;
|
||||
}
|
||||
|
||||
private static readonly Regex _folderRegex = new Regex(string.Format(@"([{0}]*\.+$)|([{0}]+)",
|
||||
Regex.Escape(new string(Path.GetInvalidPathChars()))));
|
||||
|
||||
|
||||
@@ -272,43 +272,16 @@ namespace VRCX
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Opens a file dialog to select a VRChat registry backup JSON file.
|
||||
/// </summary>
|
||||
public void OpenVrcRegJsonFileDialog()
|
||||
|
||||
public string ReadVrcRegJsonFile(string filepath)
|
||||
{
|
||||
if (dialogOpen) return;
|
||||
dialogOpen = true;
|
||||
|
||||
var thread = new Thread(() =>
|
||||
if (!File.Exists(filepath))
|
||||
{
|
||||
using (var openFileDialog = new System.Windows.Forms.OpenFileDialog())
|
||||
{
|
||||
openFileDialog.DefaultExt = ".json";
|
||||
openFileDialog.Filter = "JSON Files (*.json)|*.json";
|
||||
openFileDialog.FilterIndex = 1;
|
||||
openFileDialog.RestoreDirectory = true;
|
||||
return "";
|
||||
}
|
||||
|
||||
if (openFileDialog.ShowDialog() != DialogResult.OK)
|
||||
{
|
||||
dialogOpen = false;
|
||||
return;
|
||||
}
|
||||
|
||||
dialogOpen = false;
|
||||
|
||||
var path = openFileDialog.FileName;
|
||||
if (string.IsNullOrEmpty(path))
|
||||
return;
|
||||
|
||||
// return file contents
|
||||
var json = File.ReadAllText(path);
|
||||
ExecuteAppFunction("restoreVrcRegistryFromFile", json);
|
||||
}
|
||||
});
|
||||
|
||||
thread.SetApartmentState(ApartmentState.STA);
|
||||
thread.Start();
|
||||
var json = File.ReadAllText(filepath);
|
||||
return json;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,8 +12,6 @@ namespace VRCX
|
||||
{
|
||||
public partial class AppApi
|
||||
{
|
||||
private static bool dialogOpen;
|
||||
|
||||
/// <summary>
|
||||
/// Adds metadata to a PNG screenshot file and optionally renames the file to include the specified world ID.
|
||||
/// </summary>
|
||||
@@ -39,51 +37,6 @@ namespace VRCX
|
||||
return path;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Opens a file dialog to select a PNG screenshot file.
|
||||
/// The resulting file path is passed to <see cref="GetScreenshotMetadata(string)"/>.
|
||||
/// </summary>
|
||||
public void OpenScreenshotFileDialog()
|
||||
{
|
||||
if (dialogOpen) return;
|
||||
dialogOpen = true;
|
||||
|
||||
var thread = new Thread(() =>
|
||||
{
|
||||
using (var openFileDialog = new OpenFileDialog())
|
||||
{
|
||||
openFileDialog.DefaultExt = ".png";
|
||||
openFileDialog.Filter = "PNG Files (*.png)|*.png";
|
||||
openFileDialog.FilterIndex = 1;
|
||||
openFileDialog.RestoreDirectory = true;
|
||||
|
||||
var initialPath = GetVRChatPhotosLocation();
|
||||
if (Directory.Exists(initialPath))
|
||||
{
|
||||
openFileDialog.InitialDirectory = initialPath;
|
||||
}
|
||||
|
||||
if (openFileDialog.ShowDialog() != DialogResult.OK)
|
||||
{
|
||||
dialogOpen = false;
|
||||
return;
|
||||
}
|
||||
|
||||
dialogOpen = false;
|
||||
|
||||
var path = openFileDialog.FileName;
|
||||
if (string.IsNullOrEmpty(path))
|
||||
return;
|
||||
|
||||
ExecuteAppFunction("screenshotMetadataResetSearch", null);
|
||||
ExecuteAppFunction("getAndDisplayScreenshot", path);
|
||||
}
|
||||
});
|
||||
|
||||
thread.SetApartmentState(ApartmentState.STA);
|
||||
thread.Start();
|
||||
}
|
||||
|
||||
public string GetExtraScreenshotData(string path, bool carouselCache)
|
||||
{
|
||||
var fileName = Path.GetFileNameWithoutExtension(path);
|
||||
@@ -131,7 +84,6 @@ namespace VRCX
|
||||
if (string.IsNullOrEmpty(path))
|
||||
return null;
|
||||
|
||||
|
||||
var metadata = ScreenshotHelper.GetScreenshotMetadata(path);
|
||||
|
||||
if (metadata == null)
|
||||
|
||||
Reference in New Issue
Block a user