using System.Drawing; using System.IO; using System.Windows.Forms; using CefSharp; using TweetDuck.Core.Controls; using TweetDuck.Core.Other; using TweetDuck.Core.Other.Settings; namespace TweetDuck.Core.Notification{ static class SoundNotification{ public const string SupportedFormats = "*.wav;*.ogg;*.flac;*.opus;*.weba;*.webm"; // TODO add mp3 when supported public static IResourceHandler CreateFileHandler(string path){ string mimeType; switch(Path.GetExtension(path)){ case ".weba": case ".webm": mimeType = "audio/webm"; break; case ".wav": mimeType = "audio/wav"; break; case ".ogg": mimeType = "audio/ogg"; break; case ".flac": mimeType = "audio/flac"; break; case ".opus": mimeType = "audio/ogg; codecs=opus"; break; case ".mp3": TryShowError("MP3 sound notifications are temporarily unsupported, please convert the file to another format, such as .ogg, .wav, or .flac."); return null; default: mimeType = null; break; } try{ return ResourceHandler.FromFilePath(path, mimeType); }catch{ TryShowError("Could not find custom notification sound file:\n"+path); return null; } } private static void TryShowError(string message){ FormBrowser browser = FormManager.TryFind<FormBrowser>(); browser?.InvokeAsyncSafe(() => { using(FormMessage form = new FormMessage("Sound Notification Error", message, MessageBoxIcon.Error)){ form.AddButton(FormMessage.Ignore, ControlType.Cancel | ControlType.Focused); Button btnViewOptions = form.AddButton("View Options"); btnViewOptions.Width += 16; btnViewOptions.Location = new Point(btnViewOptions.Location.X-16, btnViewOptions.Location.Y); if (form.ShowDialog() == DialogResult.OK && form.ClickedButton == btnViewOptions){ browser.OpenSettings(typeof(TabSettingsSounds)); } } }); } } }