Skip to content

Commit

Permalink
Refactored FilePicker
Browse files Browse the repository at this point in the history
  • Loading branch information
Kiokuu authored and Natsumi-sama committed Dec 27, 2024
1 parent 0395c03 commit a5af18b
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 85 deletions.
44 changes: 44 additions & 0 deletions Dotnet/AppApi/Folders.cs
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,50 @@ public async Task<string> OpenFolderSelectorDialog(string defaultPath = "")
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()))));

Expand Down
41 changes: 7 additions & 34 deletions Dotnet/AppApi/RegistryPlayerPrefs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -272,43 +272,16 @@ public void DeleteVRChatRegistryFolder()
}
}

/// <summary>
/// Opens a file dialog to select a VRChat registry backup JSON file.
/// </summary>
public void OpenVrcRegJsonFileDialog()
{
if (dialogOpen) return;
dialogOpen = true;

var thread = new Thread(() =>
public string ReadVrcRegJsonFile(string filepath)
{
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;

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);
}
});
return "";
}

thread.SetApartmentState(ApartmentState.STA);
thread.Start();
var json = File.ReadAllText(filepath);
return json;
}
}
}
48 changes: 0 additions & 48 deletions Dotnet/AppApi/Screenshot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand All @@ -39,51 +37,6 @@ public string AddScreenshotMetadata(string path, string metadataString, string w
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);
Expand Down Expand Up @@ -131,7 +84,6 @@ public string GetScreenshotMetadata(string path)
if (string.IsNullOrEmpty(path))
return null;


var metadata = ScreenshotHelper.GetScreenshotMetadata(path);

if (metadata == null)
Expand Down
10 changes: 10 additions & 0 deletions html/src/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -16344,6 +16344,16 @@ speechSynthesis.getVoices();
}
};

$app.methods.getAndDisplayScreenshotFromFile = async function () {
var filePath = await AppApi.OpenFileSelectorDialog(await AppApi.GetVRChatPhotosLocation(), ".png", "PNG Files (*.png)|*.png");
if (filePath === "") {
return;
}

this.screenshotMetadataResetSearch();
this.getAndDisplayScreenshot(filePath);
};

$app.methods.getAndDisplayScreenshot = function (
path,
needsCarouselFiles = true
Expand Down
9 changes: 8 additions & 1 deletion html/src/classes/vrcRegistry.js
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,14 @@ export default class extends baseClass {
this.downloadAndSaveJson(row.name, row.data);
},

restoreVrcRegistryFromFile(json) {
async restoreVrcRegistryFromFile() {
var filePath = await AppApi.OpenFileSelectorDialog(null, ".json", "JSON Files (*.json)|*.json");
if (filePath === "") {
return;
}

var json = await AppApi.ReadVrcRegJsonFile(filePath);

try {
var data = JSON.parse(json);
if (!data || typeof data !== 'object') {
Expand Down
2 changes: 1 addition & 1 deletion html/src/mixins/dialogs/screenshotMetadata.pug
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ mixin screenshotMetadata()
span(style="margin-left:5px;color:#909399;font-family:monospace") {{ $t('dialog.screenshot_metadata.drag') }}
br
br
el-button(size="small" icon="el-icon-folder-opened" @click="AppApi.OpenScreenshotFileDialog()") {{ $t('dialog.screenshot_metadata.browse') }}
el-button(size="small" icon="el-icon-folder-opened" @click="getAndDisplayScreenshotFromFile()") {{ $t('dialog.screenshot_metadata.browse') }}
el-button(size="small" icon="el-icon-picture-outline" @click="getAndDisplayLastScreenshot()") {{ $t('dialog.screenshot_metadata.last_screenshot') }}
el-button(size="small" icon="el-icon-copy-document" @click="copyImageToClipboard(screenshotMetadataDialog.metadata.filePath)") {{ $t('dialog.screenshot_metadata.copy_image') }}
el-button(size="small" icon="el-icon-folder" @click="openImageFolder(screenshotMetadataDialog.metadata.filePath)") {{ $t('dialog.screenshot_metadata.open_folder') }}
Expand Down
2 changes: 1 addition & 1 deletion html/src/mixins/dialogs/settings.pug
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ mixin settings()
el-button(type="danger" @click="deleteVrcRegistry" size="small") {{ $t('dialog.registry_backup.reset') }}
div
el-button(@click="promptVrcRegistryBackupName" size="small") {{ $t('dialog.registry_backup.backup') }}
el-button(@click="AppApi.OpenVrcRegJsonFileDialog()" size="small") {{ $t('dialog.registry_backup.restore_from_file') }}
el-button(@click="restoreVrcRegistryFromFile" size="small") {{ $t('dialog.registry_backup.restore_from_file') }}


//- dialog: Enable primary password
Expand Down

0 comments on commit a5af18b

Please sign in to comment.