1
0
mirror of https://github.com/chylex/TweetDuck.git synced 2025-05-22 17:34:06 +02:00
TweetDuck/Browser/Handling/General/FileDialogHandler.cs

62 lines
2.0 KiB
C#

using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using CefSharp;
using TweetLib.Core.Utils;
namespace TweetDuck.Browser.Handling.General {
sealed class FileDialogHandler : IDialogHandler {
public bool OnFileDialog(IWebBrowser browserControl, IBrowser browser, CefFileDialogMode mode, CefFileDialogFlags flags, string title, string defaultFilePath, List<string> acceptFilters, int selectedAcceptFilter, IFileDialogCallback callback) {
if (mode == CefFileDialogMode.Open || mode == CefFileDialogMode.OpenMultiple) {
string allFilters = string.Join(";", acceptFilters.SelectMany(ParseFileType).Where(filter => !string.IsNullOrEmpty(filter)).Select(filter => "*" + filter));
using OpenFileDialog dialog = new OpenFileDialog {
AutoUpgradeEnabled = true,
DereferenceLinks = true,
Multiselect = mode == CefFileDialogMode.OpenMultiple,
Title = "Open Files",
Filter = $"All Supported Formats ({allFilters})|{allFilters}|All Files (*.*)|*.*"
};
if (dialog.ShowDialog() == DialogResult.OK) {
string ext = Path.GetExtension(dialog.FileName)?.ToLower();
callback.Continue(acceptFilters.FindIndex(filter => ParseFileType(filter).Contains(ext)), dialog.FileNames.ToList());
}
else {
callback.Cancel();
}
callback.Dispose();
return true;
}
else {
callback.Dispose();
return false;
}
}
private static IEnumerable<string> ParseFileType(string type) {
if (string.IsNullOrEmpty(type)) {
return StringUtils.EmptyArray;
}
if (type[0] == '.') {
return new string[] { type };
}
switch (type) {
case "image/jpeg": return new string[] { ".jpg", ".jpeg" };
case "image/png": return new string[] { ".png" };
case "image/gif": return new string[] { ".gif" };
case "image/webp": return new string[] { ".webp" };
case "video/mp4": return new string[] { ".mp4" };
case "video/quicktime": return new string[] { ".mov", ".qt" };
}
System.Diagnostics.Debugger.Break();
return StringUtils.EmptyArray;
}
}
}