using ServerManagerTool.Plugin.Common; using ServerManagerTool.Plugin.Common.Events; using System; using System.Collections.ObjectModel; using System.Linq; using System.Windows; namespace ServerManagerTool.Plugin.Discord.Windows { /// /// Interaction logic for VersionFeedWindow.xaml /// public partial class VersionFeedWindow : Window { public static readonly DependencyProperty FeedEntriesProperty = DependencyProperty.Register(nameof(FeedEntries), typeof(ObservableCollection), typeof(VersionFeedWindow), new PropertyMetadata(new ObservableCollection())); public static readonly DependencyProperty SelectedFeedEntryProperty = DependencyProperty.Register(nameof(SelectedFeedEntry), typeof(VersionFeedEntry), typeof(VersionFeedWindow), new PropertyMetadata(null)); private string feedUri = string.Empty; public VersionFeedWindow(DiscordPlugin plugin, string feedUri) { InitializeComponent(); try { ResourceUtils.UpdateResourceDictionary(this, PluginHelper.Instance.LanguageCode); PluginHelper.Instance.ResourceDictionaryChanged += OnResourceDictionaryChanged; } catch { // do nothing, most likely they are using an older version of a server manager } this.Plugin = plugin ?? new DiscordPlugin(); this.feedUri = feedUri; this.DataContext = this; } private DiscordPlugin Plugin { get; set; } public ObservableCollection FeedEntries { get { return (ObservableCollection)GetValue(FeedEntriesProperty); } set { SetValue(FeedEntriesProperty, value); } } public VersionFeedEntry SelectedFeedEntry { get { return (VersionFeedEntry)GetValue(SelectedFeedEntryProperty); } set { SetValue(SelectedFeedEntryProperty, value); } } private void VersionFeedWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e) { try { if (!e.Cancel) PluginHelper.Instance.ResourceDictionaryChanged -= OnResourceDictionaryChanged; } catch { // do nothing, most likely they are using an older version of a server manager } } private void VersionFeedWindow_Loaded(object sender, RoutedEventArgs e) { try { LoadFeed(); } catch (Exception ex) { MessageBox.Show(ex.Message, ResourceUtils.GetResourceString(this.Resources, "VersionFeedWindow_Load_FailedTitle"), MessageBoxButton.OK, MessageBoxImage.Error); } } private void LoadFeed() { FeedEntries.Clear(); if (string.IsNullOrWhiteSpace(this.feedUri)) return; var versionFeed = VersionFeedUtils.LoadVersionFeed(this.feedUri, Plugin.PluginVersion.ToString()); if (versionFeed == null) return; foreach (var entry in versionFeed.Entries) { if (entry == null) continue; FeedEntries.Add(entry); } SelectedFeedEntry = FeedEntries.OrderByDescending(e => e.Updated).FirstOrDefault(); } private void OnResourceDictionaryChanged(object sender, ResourceDictionaryChangedEventArgs e) { try { ResourceUtils.UpdateResourceDictionary(this, PluginHelper.Instance.LanguageCode); } catch (Exception) { // do nothing, most likely they are using an older version of a server manager } } } }