Refactored FilePicker (#1045)

This commit is contained in:
Thomas
2024-12-27 01:17:02 +00:00
committed by GitHub
parent f0cd64c3aa
commit 5d79c5615e
7 changed files with 71 additions and 85 deletions

View File

@@ -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()))));

View File

@@ -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;
}
}
}

View File

@@ -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)