public Form1()
        {
            InitializeComponent();
            generic = new GenericSiteUtil();
            generic.Initialize(new SiteSettings());
            generic.Settings.Name = "please fill";
            generic.Settings.Description = "please fill";
            generic.Settings.Language = "en";
            generic.Settings.UtilName = "GenericSite";
            foreach (PlayerType pt in Enum.GetValues(typeof(PlayerType)))
                playerComboBox.Items.Add(pt);
            foreach (GenericSiteUtil.HosterResolving pt in Enum.GetValues(typeof(GenericSiteUtil.HosterResolving)))
                comboBoxResolving.Items.Add(pt);
            playerComboBox.SelectedIndex = 0;

            FillDecodingCombo(categoryUrlDecodingComboBox);
            FillDecodingCombo(subCategoryUrlDecodingComboBox);
            FillDecodingCombo(nextPageUrlDecodingComboBox);
            FillDecodingCombo(videoListUrlDecodingComboBox);
            FillDecodingCombo(videoUrlDecodingComboBox);
            FillDecodingCombo(fileUrlDecodingComboBox);
            FillDecodingCombo(fileUrlNameDecodingComboBox);

            FillLanguagesComboBox();

            UtilToGui(generic);
#if !DEBUG
            debugToolStripMenuItem.Visible = false;
#endif
        }
 private void SetRegex(GenericSiteUtil site, string regexName, string propertyName, string value)
 {
     Regex r;
     if (String.IsNullOrEmpty(value))
         r = null;
     else
         r = new Regex(value, RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture);
     SetProperty(site, regexName, r);
     SetProperty(site, propertyName, value);
 }
 private string GetRegex(GenericSiteUtil site, string regexName)
 {
     Regex r = (Regex)GetProperty(site, regexName);
     if (r == null) return String.Empty;
     return r.ToString().TrimStart('{').TrimEnd('}');
 }
 private object GetProperty(GenericSiteUtil site, string propertyName)
 {
     return typeof(GenericSiteUtil).InvokeMember(propertyName, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, site, null);
 }
 private void SetProperty(GenericSiteUtil site, string propertyName, object value)
 {
     typeof(GenericSiteUtil).InvokeMember(propertyName, BindingFlags.NonPublic | BindingFlags.Instance |
         BindingFlags.SetField, null, site, new[] { value });
 }
        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            // Load settings from selected site into TextBoxes
            SiteSettings siteSettings = comboBoxSites.SelectedItem as SiteSettings;
            if (siteSettings != null)
            {
                generic = new GenericSiteUtil();
                generic.Initialize(siteSettings);
                staticList = new List<RssLink>();
                foreach (RssLink cat in generic.Settings.Categories)
                    staticList.Add(cat);

                UtilToGui(generic);

                LoadIconAndBanner();
            }
        }
        private void GuiToUtil(GenericSiteUtil util)
        {
            util.Settings.Name = nameTextBox.Text;
            SetProperty(util, "baseUrl", baseUrlTextbox.Text);
            util.Settings.Description = descriptionTextBox.Text;
            util.Settings.Player = (PlayerType)playerComboBox.SelectedItem;
            util.Settings.ConfirmAge = ageCheckBox.Checked;
            SetProperty(util, "forceUTF8Encoding", forceUtf8CheckBox.Checked);
            string[] cookies = cookiesTextBox.Text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
            SetProperty(util, "cookies", String.Join(",", cookies));

            util.Settings.Language = cbLanguages.SelectedValue.ToString();

            SetRegex(util, "regEx_dynamicCategories", "dynamicCategoriesRegEx", categoryRegexTextbox.Text);
            SetProperty(util, "dynamicCategoryUrlFormatString", categoryUrlFormatTextBox.Text);
            SetProperty(util, "dynamicCategoryUrlDecoding", categoryUrlDecodingComboBox.SelectedItem);
            SetRegex(util, "regEx_dynamicCategoriesNextPage", "dynamicCategoriesNextPageRegEx", categoryNextPageRegexTextBox.Text);

            SetRegex(util, "regEx_dynamicSubCategories", "dynamicSubCategoriesRegEx", subcategoryRegexTextBox.Text);
            SetProperty(util, "dynamicSubCategoryUrlFormatString", subcategoryUrlFormatTextBox.Text);
            SetProperty(util, "dynamicSubCategoryUrlDecoding", subCategoryUrlDecodingComboBox.SelectedItem);
            SetRegex(util, "regEx_dynamicSubCategoriesNextPage", "dynamicSubCategoriesNextPageRegEx", subcategoryNextPageRegexTextBox.Text);

            SetRegex(util, "regEx_VideoList", "videoListRegEx", videoListRegexTextBox.Text);
            SetProperty(util, "videoListRegExFormatString", videoListRegexFormatTextBox.Text);

            SetProperty(util, "videoThumbFormatString", videoThumbFormatStringTextBox.Text);

            SetRegex(util, "regEx_NextPage", "nextPageRegEx", nextPageRegExTextBox.Text);
            SetProperty(util, "nextPageRegExUrlFormatString", nextPageRegExUrlFormatStringTextBox.Text);
            SetProperty(util, "nextPageRegExUrlDecoding", nextPageUrlDecodingComboBox.SelectedItem);

            SetRegex(util, "regEx_VideoUrl", "videoUrlRegEx", videoUrlRegExTextBox.Text);
            SetProperty(util, "videoUrlFormatString", videoUrlFormatStringTextBox.Text);
            SetProperty(util, "videoListUrlDecoding", videoListUrlDecodingComboBox.SelectedItem);
            SetProperty(util, "videoUrlDecoding", videoUrlDecodingComboBox.SelectedItem);

            SetProperty(util, "searchUrl", searchUrlTextBox.Text);
            SetProperty(util, "searchPostString", searchPostStringTextBox.Text);

            SetRegex(util, "regEx_PlaylistUrl", "playlistUrlRegEx", playlistUrlRegexTextBox.Text);
            SetProperty(util, "playlistUrlFormatString", playlistUrlFormatStringTextBox.Text);

            SetRegex(util, "regEx_FileUrl", "fileUrlRegEx", fileUrlRegexTextBox.Text);
            SetProperty(util, "fileUrlDecoding", fileUrlDecodingComboBox.SelectedItem);
            SetProperty(util, "fileUrlFormatString", fileUrlFormatStringTextBox.Text);
            SetProperty(util, "fileUrlPostString", fileUrlPostStringTextBox.Text);
            SetProperty(util, "fileUrlNameFormatString", fileUrlNameFormatStringTextBox.Text);
            SetProperty(util, "fileUrlNameDecoding", fileUrlNameDecodingComboBox.SelectedItem);
            SetProperty(util, "getRedirectedFileUrl", getRedirectedFileUrlCheckBox.Checked);
            SetProperty(util, "resolveHoster", comboBoxResolving.SelectedItem);
        }
        private void UtilToGui(GenericSiteUtil util)
        {
            nameTextBox.Text = util.Settings.Name;

            baseUrlTextbox.Text = (string)GetProperty(util, "baseUrl");
            descriptionTextBox.Text = util.Settings.Description;
            playerComboBox.SelectedIndex = playerComboBox.Items.IndexOf(util.Settings.Player);
            ageCheckBox.Checked = util.Settings.ConfirmAge;
            forceUtf8CheckBox.Checked = GetForceUTF8();
            string cookieString = (string)GetProperty(util, "cookies");
            if (!String.IsNullOrEmpty(cookieString))
            {
                string[] cookies = cookieString.Split(',');
                cookiesTextBox.Text = String.Join(Environment.NewLine, cookies);
            }
            else
                cookiesTextBox.Text = String.Empty;
            cbLanguages.SelectedValue = util.Settings.Language;

            categoryRegexTextbox.Text = GetRegex(util, "regEx_dynamicCategories");
            categoryUrlFormatTextBox.Text = (string)GetProperty(util, "dynamicCategoryUrlFormatString");
            categoryUrlDecodingComboBox.SelectedItem = (GenericSiteUtil.UrlDecoding)GetProperty(util, "dynamicCategoryUrlDecoding");
            categoryNextPageRegexTextBox.Text = (string)GetRegex(util, "regEx_dynamicCategoriesNextPage");

            subcategoryRegexTextBox.Text = GetRegex(util, "regEx_dynamicSubCategories");
            subcategoryUrlFormatTextBox.Text = (string)GetProperty(util, "dynamicSubCategoryUrlFormatString");
            subCategoryUrlDecodingComboBox.SelectedItem = (GenericSiteUtil.UrlDecoding)GetProperty(util, "dynamicSubCategoryUrlDecoding");
            subcategoryNextPageRegexTextBox.Text = (string)GetRegex(util, "regEx_dynamicSubCategoriesNextPage");

            videoListRegexTextBox.Text = GetRegex(util, "regEx_VideoList");
            videoListRegexFormatTextBox.Text = (string)GetProperty(util, "videoListRegExFormatString");

            videoThumbFormatStringTextBox.Text = (string)GetProperty(util, "videoThumbFormatString");

            nextPageRegExTextBox.Text = GetRegex(util, "regEx_NextPage");
            nextPageRegExUrlFormatStringTextBox.Text = (string)GetProperty(util, "nextPageRegExUrlFormatString");
            nextPageUrlDecodingComboBox.SelectedItem = (GenericSiteUtil.UrlDecoding)GetProperty(util, "nextPageRegExUrlDecoding");

            videoUrlRegExTextBox.Text = GetRegex(util, "regEx_VideoUrl");
            videoUrlFormatStringTextBox.Text = (string)GetProperty(util, "videoUrlFormatString");
            videoListUrlDecodingComboBox.SelectedItem = (GenericSiteUtil.UrlDecoding)GetProperty(util, "videoListUrlDecoding");
            videoUrlDecodingComboBox.SelectedItem = (GenericSiteUtil.UrlDecoding)GetProperty(util, "videoUrlDecoding");

            searchUrlTextBox.Text = GetProperty(util, "searchUrl") as string;
            searchPostStringTextBox.Text = GetProperty(util, "searchPostString") as string;

            playlistUrlRegexTextBox.Text = GetRegex(util, "regEx_PlaylistUrl");
            playlistUrlFormatStringTextBox.Text = (string)GetProperty(util, "playlistUrlFormatString");

            fileUrlRegexTextBox.Text = GetRegex(util, "regEx_FileUrl");
            fileUrlFormatStringTextBox.Text = (string)GetProperty(util, "fileUrlFormatString");
            fileUrlDecodingComboBox.SelectedItem = (GenericSiteUtil.UrlDecoding)GetProperty(util, "fileUrlDecoding");
            fileUrlPostStringTextBox.Text = (string)GetProperty(util, "fileUrlPostString");
            fileUrlNameFormatStringTextBox.Text = (string)GetProperty(util, "fileUrlNameFormatString");
            fileUrlNameDecodingComboBox.SelectedItem = (GenericSiteUtil.UrlDecoding)GetProperty(util, "fileUrlNameDecoding");
            getRedirectedFileUrlCheckBox.Checked = (bool)GetProperty(util, "getRedirectedFileUrl");
            comboBoxResolving.SelectedItem = (GenericSiteUtil.HosterResolving)GetProperty(util, "resolveHoster");

            treeView1.Nodes.Clear();
            TreeNode root = treeView1.Nodes.Add("site");
            foreach (Category cat in staticList)
            {
                root.Nodes.Add(cat.Name).Tag = cat;
                cat.HasSubCategories = true;
            }
            if (root.Nodes.Count > 0)
                root.Expand();
        }