Пример #1
0
        public void Initialize()
        {
            // Inherit settings.
            if (Settings.Default.IsUpgrateNeeded)
            {
                Settings.Default.Upgrade();
                Settings.Default.IsUpgrateNeeded = false;
                Settings.Default.Save();
            }

            // Show the welcome window and hide the main window.
            WelcomeWindow.Show();
            this.Visibility = Visibility.Hidden;

            // Inherit tasks.
            if (Settings.Default.IsInheritTasks)
            {
                ReadTasks();
            }

            // Init caches
            if (!Directory.Exists("cache"))
            {
                Directory.CreateDirectory("cache");
            }

            #region Read log-in informations
            Thread freshThread = new Thread(async() =>
            {
                string access_key = Settings.Default.AccessKey;
                if (access_key != "")
                {
                    Account.AccessKey = access_key;
                    await Auth.FreshSSO();
                    await this.Invoke(async() => await FreshUserInfo());
                }
                else
                {
                    this.Invoke(() => LoginFlyout.IsOpen = true);
                }
            });
            if (Settings.Default.IsSaveAccessKey)
            {
                freshThread.Start(); //Starts the thread only when Settings.Default.IsSaveAccessKey is set to True.
            }
            #endregion

            #region Get bangumi informations.
            Thread bangumiThread = new Thread(async() =>
            {
                Bangumis             = await Bangumi.GetBangumiInfosAsync();
                List <string> titles = new List <string>();
                for (int i = 0; i < Bangumis.Count; i++)
                {
                    titles.Add(Bangumis[i].Title);
                }
                this.Invoke(() => BangumiListBox.ItemsSource = titles);
            });
            bangumiThread.Start();
            #endregion

            #region Get bilibili emojis.
            Thread emojiThread = new Thread(async() =>
            {
                // Get the list of the emojis.
                var allEmojis     = await Common.GetEmojisAsync();
                var checkedEmojis = await Common.CheckCacheAsync(allEmojis);

                for (int i = 0; i < checkedEmojis.Count; i++)
                {
                    var emojiPack = checkedEmojis[i];
                    // These part of code is a piece of s**t, but works :).
                    this.Invoke(() =>
                    {
                        var item         = new TabItem();
                        item.Header      = emojiPack.PackName;
                        StackPanel panel = new StackPanel {
                            Orientation = Orientation.Vertical, HorizontalAlignment = HorizontalAlignment.Center
                        };
                        StackPanel stack = null;
                        for (int j = 0; j < emojiPack.CheckedEmojis.Count; j++)
                        {
                            var emoji = emojiPack.CheckedEmojis[j];
                            if (j % 9 == 0)
                            {
                                stack = new StackPanel {
                                    Orientation = Orientation.Horizontal
                                };
                                panel.Children.Add(stack);
                            }
                            Button button = new Button
                            {
                                Width   = 75,
                                Height  = 75,
                                Content = new Image
                                {
                                    Width  = 64,
                                    Height = 64,
                                    Source = CreateBI(emoji.ImagePath),
                                    HorizontalAlignment = HorizontalAlignment.Center,
                                    VerticalAlignment   = VerticalAlignment.Center
                                },
                                Margin = new Thickness(0, 0, 20, 5)
                            };
                            button.Click += (sender, e) =>
                            {
                                string emoji_str          = emoji.Name;
                                int index                 = MessageTextBox.CaretIndex;
                                string newtext            = MessageTextBox.Text.Insert(index, emoji_str);
                                MessageTextBox.Text       = newtext;
                                MessageTextBox.CaretIndex = index + emoji_str.Length;
                            };
                            stack.Children.Add(button);
                            item.Content = panel;
                        }
                        EmojiTabControl.Items.Add(item);
                    });
                }
                this.Invoke(() =>
                {
                    this.Visibility = Visibility.Visible;
                    WelcomeWindow.Close();
                });
            });
#if !DEBUG
            emojiThread.Start(); // do not load the emojis in the debug mode.
#else
            this.Visibility = Visibility.Visible;
            WelcomeWindow.Close();
#endif
            #endregion
        }