Compare commits

..

No commits in common. "527c87889e092983ec77d0b7547c9fe259d2849e" and "fc764a4e9753ecbf5a38a278dd1291b749b3a152" have entirely different histories.

46 changed files with 4905 additions and 3354 deletions

View File

@ -19,7 +19,7 @@ namespace BookmarkManager {
// class via a tool like ResGen or Visual Studio. // class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen // To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project. // with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class AppResource { internal class AppResource {
@ -61,38 +61,20 @@ namespace BookmarkManager {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Ray Lam.
/// </summary> /// </summary>
internal static string AppAuthorURL { internal static string app_author {
get { get {
return ResourceManager.GetString("AppAuthorURL", resourceCulture); return ResourceManager.GetString("app_author", resourceCulture);
} }
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to https://www.hiimray.co.uk. /// Looks up a localized string similar to Bookmark Manager.
/// </summary> /// </summary>
internal static string AppCompanyURL { internal static string app_name {
get { get {
return ResourceManager.GetString("AppCompanyURL", resourceCulture); return ResourceManager.GetString("app_name", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to https://www.hiimray.co.uk/software-bookmark-manager.
/// </summary>
internal static string AppHelpURL {
get {
return ResourceManager.GetString("AppHelpURL", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to https://www.hiimray.co.uk/software-bookmark-manager.
/// </summary>
internal static string AppProductURL {
get {
return ResourceManager.GetString("AppProductURL", resourceCulture);
} }
} }
@ -186,16 +168,6 @@ namespace BookmarkManager {
} }
} }
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap icon_64 {
get {
object obj = ResourceManager.GetObject("icon_64", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary> /// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap. /// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary> /// </summary>
@ -235,5 +207,14 @@ namespace BookmarkManager {
return ((System.Drawing.Bitmap)(obj)); return ((System.Drawing.Bitmap)(obj));
} }
} }
/// <summary>
/// Looks up a localized string similar to https://www.hiimray.co.uk/software-bookmark-manager.
/// </summary>
internal static string url_help {
get {
return ResourceManager.GetString("url_help", resourceCulture);
}
}
} }
} }

View File

@ -112,24 +112,18 @@
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader"> <resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="AppAuthorURL" xml:space="preserve"> <data name="app_author" xml:space="preserve">
<value /> <value>Ray Lam</value>
</data> </data>
<data name="AppCompanyURL" xml:space="preserve"> <data name="app_name" xml:space="preserve">
<value>https://www.hiimray.co.uk</value> <value>Bookmark Manager</value>
</data> </data>
<data name="AppHelpURL" xml:space="preserve"> <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<value>https://www.hiimray.co.uk/software-bookmark-manager</value>
</data>
<data name="AppProductURL" xml:space="preserve">
<value>https://www.hiimray.co.uk/software-bookmark-manager</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="arrow_down_circle" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="arrow_down_circle" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\arrow-down-circle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>Resources\arrow-down-circle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
@ -157,9 +151,6 @@
<data name="hexagon" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="hexagon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\hexagon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>Resources\hexagon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="icon_64" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\icon-64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="save" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="save" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\save.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>Resources\save.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
@ -172,4 +163,7 @@
<data name="trash" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="trash" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\trash.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>Resources\trash.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="url_help" xml:space="preserve">
<value>https://www.hiimray.co.uk/software-bookmark-manager</value>
</data>
</root> </root>

395
BookmarkForm.cs Normal file
View File

@ -0,0 +1,395 @@
using BookmarkManager;
using bzit.bomg.Models;
using FizzyLauncher.Models;
using RyzStudio;
using RyzStudio.IO;
using RyzStudio.Windows.Forms;
using RyzStudio.Windows.ThemedForms;
using System;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Net;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace FizzyLauncher
{
public class BookmarkForm : TDialogForm
{
private System.Windows.Forms.Label label1;
private TButton button1;
private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator1;
private TTextBox textBox1;
private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator2;
private Label label2;
private Label label3;
private TMemoBox memoBox1;
private TMemoBox memoBox2;
private Label label4;
private TButtonTextBox textBox2;
private PictureBox pictureBox1;
private PictureBox pictureBox2;
private ToolTip toolTip1;
private System.ComponentModel.IContainer components;
protected WebParser webParser = null;
protected WebClient webClient = null;
protected AppSession appSession = null;
public BookmarkForm(AppSession session, BookmarkItem model, Image icon) : base()
{
InitializeComponent();
appSession = session;
textBox1.Text = model.SiteName?.Trim() ?? string.Empty;
textBox2.Text = model.SiteAddress?.Trim() ?? string.Empty;
textBox2.SetIcon("search");
memoBox1.Text = model.SiteDescription?.Trim() ?? string.Empty;
memoBox2.Text = model.Notes?.Trim() ?? string.Empty;
pictureBox1.Image = icon;
textBox2.SetTooltipText(toolTip1, "Retrieve web page information");
}
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.label1 = new System.Windows.Forms.Label();
this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
this.tHorizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator();
this.tHorizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator();
this.textBox1 = new RyzStudio.Windows.ThemedForms.TTextBox();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.memoBox1 = new RyzStudio.Windows.ThemedForms.TMemoBox();
this.memoBox2 = new RyzStudio.Windows.ThemedForms.TMemoBox();
this.label4 = new System.Windows.Forms.Label();
this.textBox2 = new RyzStudio.Windows.ThemedForms.TButtonTextBox();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.pictureBox2 = new System.Windows.Forms.PictureBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.BackColor = System.Drawing.Color.Transparent;
this.label1.ForeColor = System.Drawing.SystemColors.ControlText;
this.label1.Location = new System.Drawing.Point(10, 21);
this.label1.Margin = new System.Windows.Forms.Padding(0);
this.label1.Name = "label1";
this.label1.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
this.label1.Size = new System.Drawing.Size(29, 34);
this.label1.TabIndex = 153;
this.label1.Text = "Title";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// button1
//
this.button1.AcceptButton = null;
this.button1.ActiveImage = null;
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.button1.BackColor = System.Drawing.Color.Transparent;
this.button1.HoverImage = null;
this.button1.IdleImage = null;
this.button1.LabelText = "&Save";
this.button1.Location = new System.Drawing.Point(241, 469);
this.button1.Margin = new System.Windows.Forms.Padding(10, 0, 0, 10);
this.button1.Name = "button1";
this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.button1.Size = new System.Drawing.Size(128, 32);
this.button1.TabIndex = 4;
this.button1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.button1_MouseClick);
//
// tHorizontalSeparator1
//
this.tHorizontalSeparator1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tHorizontalSeparator1.AutoScrollMargin = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator1.AutoScrollMinSize = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator1.BackColor = System.Drawing.Color.Transparent;
this.tHorizontalSeparator1.Location = new System.Drawing.Point(10, 437);
this.tHorizontalSeparator1.Margin = new System.Windows.Forms.Padding(5, 0, 5, 10);
this.tHorizontalSeparator1.MaximumSize = new System.Drawing.Size(4920, 2);
this.tHorizontalSeparator1.MinimumSize = new System.Drawing.Size(0, 22);
this.tHorizontalSeparator1.Name = "tHorizontalSeparator1";
this.tHorizontalSeparator1.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
this.tHorizontalSeparator1.Size = new System.Drawing.Size(364, 22);
this.tHorizontalSeparator1.TabIndex = 188;
this.tHorizontalSeparator1.TabStop = false;
//
// tHorizontalSeparator2
//
this.tHorizontalSeparator2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tHorizontalSeparator2.AutoScrollMargin = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator2.AutoScrollMinSize = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator2.BackColor = System.Drawing.Color.Transparent;
this.tHorizontalSeparator2.Location = new System.Drawing.Point(10, 223);
this.tHorizontalSeparator2.Margin = new System.Windows.Forms.Padding(5, 0, 5, 10);
this.tHorizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2);
this.tHorizontalSeparator2.MinimumSize = new System.Drawing.Size(0, 22);
this.tHorizontalSeparator2.Name = "tHorizontalSeparator2";
this.tHorizontalSeparator2.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
this.tHorizontalSeparator2.Size = new System.Drawing.Size(364, 22);
this.tHorizontalSeparator2.TabIndex = 190;
this.tHorizontalSeparator2.TabStop = false;
//
// textBox1
//
this.textBox1.AcceptButton = null;
this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.textBox1.BackColor = System.Drawing.Color.Transparent;
this.textBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.textBox1.Location = new System.Drawing.Point(110, 20);
this.textBox1.Margin = new System.Windows.Forms.Padding(10, 0, 0, 10);
this.textBox1.Name = "textBox1";
this.textBox1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.textBox1.ReadOnly = false;
this.textBox1.Size = new System.Drawing.Size(222, 34);
this.textBox1.TabIndex = 0;
this.textBox1.UseSystemPasswordChar = false;
//
// label2
//
this.label2.AutoSize = true;
this.label2.BackColor = System.Drawing.Color.Transparent;
this.label2.ForeColor = System.Drawing.SystemColors.ControlText;
this.label2.Location = new System.Drawing.Point(10, 67);
this.label2.Margin = new System.Windows.Forms.Padding(0);
this.label2.Name = "label2";
this.label2.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
this.label2.Size = new System.Drawing.Size(49, 34);
this.label2.TabIndex = 193;
this.label2.Text = "Address";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// label3
//
this.label3.AutoSize = true;
this.label3.BackColor = System.Drawing.Color.Transparent;
this.label3.ForeColor = System.Drawing.SystemColors.ControlText;
this.label3.Location = new System.Drawing.Point(10, 113);
this.label3.Margin = new System.Windows.Forms.Padding(0);
this.label3.Name = "label3";
this.label3.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
this.label3.Size = new System.Drawing.Size(67, 34);
this.label3.TabIndex = 195;
this.label3.Text = "Description";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// memoBox1
//
this.memoBox1.AcceptButton = null;
this.memoBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.memoBox1.BackColor = System.Drawing.Color.Transparent;
this.memoBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.memoBox1.Location = new System.Drawing.Point(110, 112);
this.memoBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
this.memoBox1.Name = "memoBox1";
this.memoBox1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.memoBox1.ReadOnly = false;
this.memoBox1.Size = new System.Drawing.Size(259, 105);
this.memoBox1.TabIndex = 2;
//
// memoBox2
//
this.memoBox2.AcceptButton = null;
this.memoBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.memoBox2.BackColor = System.Drawing.Color.Transparent;
this.memoBox2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.memoBox2.Location = new System.Drawing.Point(110, 251);
this.memoBox2.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
this.memoBox2.Name = "memoBox2";
this.memoBox2.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.memoBox2.ReadOnly = false;
this.memoBox2.Size = new System.Drawing.Size(259, 180);
this.memoBox2.TabIndex = 3;
//
// label4
//
this.label4.AutoSize = true;
this.label4.BackColor = System.Drawing.Color.Transparent;
this.label4.ForeColor = System.Drawing.SystemColors.ControlText;
this.label4.Location = new System.Drawing.Point(10, 252);
this.label4.Margin = new System.Windows.Forms.Padding(0);
this.label4.Name = "label4";
this.label4.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
this.label4.Size = new System.Drawing.Size(38, 34);
this.label4.TabIndex = 198;
this.label4.Text = "Notes";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// textBox2
//
this.textBox2.AcceptButton = null;
this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.textBox2.BackColor = System.Drawing.Color.Transparent;
this.textBox2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.textBox2.HighlightImage = null;
this.textBox2.Location = new System.Drawing.Point(110, 66);
this.textBox2.Margin = new System.Windows.Forms.Padding(10, 0, 0, 10);
this.textBox2.Name = "textBox2";
this.textBox2.NormalImage = null;
this.textBox2.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.textBox2.Size = new System.Drawing.Size(259, 34);
this.textBox2.TabIndex = 1;
this.textBox2.UseSystemPasswordChar = false;
this.textBox2.OnButtonClick += new System.EventHandler(this.textBox2_OnButtonClick);
//
// pictureBox1
//
this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.pictureBox1.BackColor = System.Drawing.Color.Transparent;
this.pictureBox1.ErrorImage = null;
this.pictureBox1.InitialImage = null;
this.pictureBox1.Location = new System.Drawing.Point(337, 21);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(32, 34);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pictureBox1.TabIndex = 201;
this.pictureBox1.TabStop = false;
//
// pictureBox2
//
this.pictureBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.pictureBox2.BackColor = System.Drawing.Color.Transparent;
this.pictureBox2.ErrorImage = null;
this.pictureBox2.InitialImage = null;
this.pictureBox2.Location = new System.Drawing.Point(196, 469);
this.pictureBox2.Name = "pictureBox2";
this.pictureBox2.Size = new System.Drawing.Size(32, 32);
this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pictureBox2.TabIndex = 202;
this.pictureBox2.TabStop = false;
//
// BookmarkForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(384, 521);
this.Controls.Add(this.pictureBox2);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.memoBox2);
this.Controls.Add(this.label4);
this.Controls.Add(this.memoBox1);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.tHorizontalSeparator2);
this.Controls.Add(this.tHorizontalSeparator1);
this.Controls.Add(this.button1);
this.Controls.Add(this.label1);
this.KeyPreview = true;
this.MinimumSize = new System.Drawing.Size(400, 560);
this.Name = "BookmarkForm";
this.Text = "Edit Bookmark";
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
textBox2.Focus();
}
public BookmarkResult Model
{
get => new BookmarkResult()
{
Item = new BookmarkItem()
{
SiteName = textBox1.Text?.Trim() ?? string.Empty,
SiteAddress = textBox2.Text?.Trim() ?? string.Empty,
SiteDescription = memoBox1.Text?.Trim() ?? string.Empty,
Notes = memoBox2.Text?.Trim() ?? string.Empty
},
Icon = pictureBox1.Image
};
}
protected new bool IsBusy
{
get => base.IsBusy;
set
{
base.IsBusy = value;
UIControl.SetValue(pictureBox2, (this.IsBusy ? UIResource1.loading_block : null));
UIControl.SetEnable(textBox1, !this.IsBusy);
UIControl.SetEnable(textBox2, !this.IsBusy);
UIControl.SetEnable(memoBox1, !this.IsBusy);
UIControl.SetEnable(memoBox2, !this.IsBusy);
UIControl.SetEnable(button1, !this.IsBusy);
}
}
private void button1_MouseClick(object sender, MouseEventArgs e)
{
this.DialogResult = DialogResult.OK;
this.Close();
}
private async void textBox2_OnButtonClick(object sender, EventArgs e)
{
await Task.Run(() =>
{
if (IsBusy) return;
IsBusy = true;
if (webParser == null) webParser = new WebParser();
if (string.IsNullOrWhiteSpace(textBox1.Text))
{
IsBusy = false;
return;
}
BookmarkResult rs = webParser.RetrieveDetails(textBox2.Text, appSession.IgnoreSSL);
if (rs == null)
{
IsBusy = false;
return;
}
if (rs.Item == null) rs.Item = new BookmarkItem();
if (!string.IsNullOrWhiteSpace(rs.Item.SiteName)) UIControl.SetText(textBox1.TextBox, rs.Item.SiteName);
if (!string.IsNullOrWhiteSpace(rs.Item.SiteDescription)) UIControl.SetText(memoBox1.TextBox, rs.Item.SiteDescription);
if (string.IsNullOrWhiteSpace(rs.IconURL))
{
UIControl.Clear(pictureBox1);
}
else
{
UIControl.SetValue(pictureBox1, webParser.RetrieveImage(rs.IconURL));
}
IsBusy = false;
});
}
}
}

View File

@ -1,64 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <root>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">

View File

@ -2,23 +2,21 @@
<PropertyGroup> <PropertyGroup>
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows8.0</TargetFramework> <TargetFramework>net6.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms> <UseWindowsForms>true</UseWindowsForms>
<NoWin32Manifest>true</NoWin32Manifest> <NoWin32Manifest>true</NoWin32Manifest>
<ApplicationIcon>favicon.ico</ApplicationIcon> <ApplicationIcon>favicon.ico</ApplicationIcon>
<SignAssembly>false</SignAssembly> <SignAssembly>false</SignAssembly>
<AssemblyName>bukkubuddy</AssemblyName> <AssemblyName>bookmarkmanager</AssemblyName>
<Authors>Ray Lam</Authors> <Authors>Ray Lam</Authors>
<Company>Hi, I'm Ray</Company> <Company>Hi, I'm Ray</Company>
<Product>BukkuBuddy</Product> <Product>Bookmark Manager</Product>
<Copyright>Ray Lam</Copyright> <Copyright>Ray Lam</Copyright>
<AssemblyVersion>1.0.0.0</AssemblyVersion> <AssemblyVersion>1.0.0.0</AssemblyVersion>
<FileVersion>1.0.0.0</FileVersion> <FileVersion>1.0.0.0</FileVersion>
<Version>0.6.0.972</Version> <Version>0.5.0.012</Version>
<PackageId>bukkubuddy</PackageId> <PackageId>bookmarkmanager</PackageId>
<RunAnalyzersDuringLiveAnalysis>True</RunAnalyzersDuringLiveAnalysis> <RunAnalyzersDuringLiveAnalysis>True</RunAnalyzersDuringLiveAnalysis>
<SupportedOSPlatformVersion>8.0</SupportedOSPlatformVersion>
<Description>BukkuBuddy Bookmark Manager</Description>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
@ -34,25 +32,19 @@
<ItemGroup> <ItemGroup>
<Compile Remove="#\**" /> <Compile Remove="#\**" />
<Compile Remove="Classes\**" />
<Compile Remove="DTO\**" /> <Compile Remove="DTO\**" />
<Compile Remove="Net\**" />
<Compile Remove="References\**" /> <Compile Remove="References\**" />
<Compile Remove="Resources\UI\**" /> <Compile Remove="Resources\UI\**" />
<Compile Remove="RyzStudio\**" /> <Compile Remove="RyzStudio\**" />
<Compile Remove="Text\**" /> <Compile Remove="Text\**" />
<EmbeddedResource Remove="#\**" /> <EmbeddedResource Remove="#\**" />
<EmbeddedResource Remove="Classes\**" />
<EmbeddedResource Remove="DTO\**" /> <EmbeddedResource Remove="DTO\**" />
<EmbeddedResource Remove="Net\**" />
<EmbeddedResource Remove="References\**" /> <EmbeddedResource Remove="References\**" />
<EmbeddedResource Remove="Resources\UI\**" /> <EmbeddedResource Remove="Resources\UI\**" />
<EmbeddedResource Remove="RyzStudio\**" /> <EmbeddedResource Remove="RyzStudio\**" />
<EmbeddedResource Remove="Text\**" /> <EmbeddedResource Remove="Text\**" />
<None Remove="#\**" /> <None Remove="#\**" />
<None Remove="Classes\**" />
<None Remove="DTO\**" /> <None Remove="DTO\**" />
<None Remove="Net\**" />
<None Remove="References\**" /> <None Remove="References\**" />
<None Remove="Resources\UI\**" /> <None Remove="Resources\UI\**" />
<None Remove="RyzStudio\**" /> <None Remove="RyzStudio\**" />
@ -64,7 +56,6 @@
<Compile Remove="Models\TileModel.cs" /> <Compile Remove="Models\TileModel.cs" />
<Compile Remove="NewForm.cs" /> <Compile Remove="NewForm.cs" />
<Compile Remove="OpenFileForm.cs" /> <Compile Remove="OpenFileForm.cs" />
<Compile Remove="PasswordForm.cs" />
<Compile Remove="Windows\Forms\BookmarkTreeViewSNode.cs" /> <Compile Remove="Windows\Forms\BookmarkTreeViewSNode.cs" />
<Compile Remove="Windows\Forms\EditGroupForm.cs" /> <Compile Remove="Windows\Forms\EditGroupForm.cs" />
<Compile Remove="Windows\Forms\EditTileFolderForm.cs" /> <Compile Remove="Windows\Forms\EditTileFolderForm.cs" />
@ -79,7 +70,6 @@
<ItemGroup> <ItemGroup>
<EmbeddedResource Remove="NewForm.resx" /> <EmbeddedResource Remove="NewForm.resx" />
<EmbeddedResource Remove="OpenFileForm.resx" /> <EmbeddedResource Remove="OpenFileForm.resx" />
<EmbeddedResource Remove="PasswordForm.resx" />
<EmbeddedResource Remove="Windows\Forms\EditGroupForm.resx" /> <EmbeddedResource Remove="Windows\Forms\EditGroupForm.resx" />
<EmbeddedResource Remove="Windows\Forms\EditTileFolderForm.resx" /> <EmbeddedResource Remove="Windows\Forms\EditTileFolderForm.resx" />
<EmbeddedResource Remove="Windows\Forms\EditTileForm.resx" /> <EmbeddedResource Remove="Windows\Forms\EditTileForm.resx" />
@ -97,7 +87,8 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="favicon.ico" /> <Compile Include="RyzStudio\IO\FileType.cs" />
<Compile Include="RyzStudio\IO\SharpZipLib.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -108,7 +99,8 @@
</Compile> </Compile>
<Compile Update="UpdateIconsForm.cs" /> <Compile Update="UpdateIconsForm.cs" />
<Compile Update="FindForm.cs" /> <Compile Update="FindForm.cs" />
<Compile Update="EditBookmarkForm.cs" /> <Compile Update="BookmarkForm.cs" />
<Compile Update="PasswordForm.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -119,9 +111,19 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="HtmlAgilityPack" Version="1.11.61" /> <PackageReference Include="HtmlAgilityPack" Version="1.11.46" />
<PackageReference Include="RyzStudio" Version="8.1.2.249" /> <PackageReference Include="Microsoft.Data.Sqlite" Version="5.0.10" />
<PackageReference Include="RyzStudio.Windows.Forms" Version="8.1.3.614" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="SharpZipLib" Version="1.3.2" />
</ItemGroup>
<ItemGroup>
<Reference Include="Ryz3core">
<HintPath>References\Ryz3core.dll</HintPath>
</Reference>
<Reference Include="Ryz3ui">
<HintPath>References\Ryz3ui.dll</HintPath>
</Reference>
</ItemGroup> </ItemGroup>
</Project> </Project>

15
Classes/BookmarkResult.cs Normal file
View File

@ -0,0 +1,15 @@
using bzit.bomg.Models;
using System.Drawing;
namespace BookmarkManager
{
public class BookmarkResult
{
public BookmarkItem Item { get; set; } = null;
public string IconURL { get; set; } = null;
public Image Icon { get; set; } = null;
}
}

22
Classes/Crypto.cs Normal file
View File

@ -0,0 +1,22 @@
using System;
using System.Security.Cryptography;
using System.Text;
namespace BookmarkManager
{
public class Crypto
{
public static string GetSHA256Hash(string text)
{
if (string.IsNullOrWhiteSpace(text)) return string.Empty;
using (var sha = SHA256.Create())
{
byte[] hash = sha.ComputeHash(Encoding.UTF8.GetBytes(text));
return BitConverter.ToString(hash).Replace("-", string.Empty) + "+" + text.Length.ToString();
}
}
}
}

220
Classes/IconDatabase.cs Normal file
View File

@ -0,0 +1,220 @@
using Microsoft.Data.Sqlite;
using System;
using System.Drawing;
using System.IO;
namespace BookmarkManager
{
public class IconDatabase
{
protected string dbFilename = null;
protected SqliteConnection dbConnection = null;
public IconDatabase(string filename)
{
if (string.IsNullOrWhiteSpace(filename)) return;
dbFilename = filename;
bool isNew = !File.Exists(dbFilename);
SqliteConnectionStringBuilder builder = new SqliteConnectionStringBuilder();
builder.DataSource = dbFilename;
builder.Cache = SqliteCacheMode.Private;
builder.Mode = SqliteOpenMode.ReadWriteCreate;
dbConnection = new SqliteConnection(builder.ToString());
dbConnection.Open();
if (isNew) Initialise();
}
public bool AddIcon(string id, Image image)
{
if (dbConnection == null) return false;
if (string.IsNullOrWhiteSpace(id)) return false;
if (image == null) return DeleteIcon(id);
if (HasIcon(id)) return UpdateIcon(id, image);
SqliteCommand command = new SqliteCommand();
command.Connection = dbConnection;
command.CommandText = "INSERT INTO icons (id, content) VALUES (@id, @content)";
command.Parameters.Add("@id", SqliteType.Text).Value = id;
command.Parameters.Add("@content", SqliteType.Blob).Value = ImageToBytes(image);
try
{
command.ExecuteNonQuery();
}
catch (Exception)
{
return false;
}
return true;
}
public void Close()
{
if (dbConnection == null) return;
dbConnection.Close();
dbConnection.Dispose();
dbConnection = null;
}
public bool DeleteIcon(string id)
{
if (dbConnection == null) return false;
if (string.IsNullOrWhiteSpace(id)) return false;
SqliteCommand command = new SqliteCommand();
command.Connection = dbConnection;
command.CommandText = "DELETE FROM icons WHERE id = @id";
command.Parameters.Add("@id", SqliteType.Text).Value = id;
try
{
command.ExecuteNonQuery();
}
catch (Exception)
{
return false;
}
return true;
}
public Image FindIcon(string id)
{
if (dbConnection == null) return null;
if (string.IsNullOrWhiteSpace(id)) return null;
if (!HasIcon(id)) return null;
byte[] iconBytes = null;
SqliteCommand command = new SqliteCommand();
command.Connection = dbConnection;
command.CommandText = "SELECT content FROM icons WHERE id = @id";
command.Parameters.Add("@id", SqliteType.Text).Value = id;
try
{
var rs = command.ExecuteScalar();
if (rs != null)
{
iconBytes = (byte[])rs;
}
command.Dispose();
}
catch (Exception)
{
return null;
}
if (iconBytes == null)
{
return null;
}
Image img = null;
try
{
img = Image.FromStream(new MemoryStream(iconBytes));
}
catch (Exception)
{
return null;
}
return img;
}
public bool HasIcon(string id)
{
if (dbConnection == null) return false;
if (string.IsNullOrWhiteSpace(id)) return false;
string rs = string.Empty;
SqliteCommand command = new SqliteCommand();
command.Connection = dbConnection;
command.CommandText = "SELECT COUNT(1) AS count FROM icons WHERE id = @id";
command.Parameters.Add("@id", SqliteType.Text).Value = id;
try
{
rs = command.ExecuteScalar()?.ToString() ?? string.Empty;
command.Dispose();
}
catch (Exception)
{
return false;
}
int rv;
if (!int.TryParse(rs, out rv)) rv = 0;
return (rv > 0);
}
public bool UpdateIcon(string id, Image image)
{
if (dbConnection == null) return false;
if (string.IsNullOrWhiteSpace(id)) return false;
if (image == null) return DeleteIcon(id);
if (!HasIcon(id)) return AddIcon(id, image);
SqliteCommand command = new SqliteCommand();
command.Connection = dbConnection;
command.CommandText = "UPDATE icons SET content = @content WHERE id = @id";
command.Parameters.Add("@id", SqliteType.Text).Value = id;
command.Parameters.Add("@content", SqliteType.Blob).Value = ImageToBytes(image);
try
{
command.ExecuteNonQuery();
}
catch (Exception)
{
return false;
}
return true;
}
protected bool Initialise()
{
if (dbConnection == null) return false;
try
{
SqliteCommand command = new SqliteCommand("CREATE TABLE icons (id TEXT PRIMARY KEY, content BLOB)", dbConnection);
command.ExecuteNonQuery();
command.Dispose();
}
catch (Exception)
{
return false;
}
return true;
}
protected byte[] ImageToBytes(Image image)
{
ImageConverter imageConverter = new ImageConverter();
return (byte[])imageConverter.ConvertTo(image, typeof(byte[]));
}
}
}

29
Classes/Result.cs Normal file
View File

@ -0,0 +1,29 @@
namespace BookmarkManager
{
public class Result
{
public static Result Create() => new Result()
{
IsSuccess = true,
Message = null
};
public static Result Create(bool isSuccess) => new Result()
{
IsSuccess = isSuccess,
Message = null
};
public static Result Create(bool isSuccess, string message) => new Result()
{
IsSuccess = isSuccess,
Message = message
};
public bool IsSuccess { get; set; } = false;
public string Message { get; set; }
}
}

View File

@ -0,0 +1,23 @@
using RyzStudio.Windows.Forms;
using System.Collections.Generic;
namespace BookmarkManager
{
public interface ISupportedFile
{
bool IsEncryptionSupported { get; set; }
List<string> SupportedExtensions { get; }
bool IsSupported(string filename);
bool IsEncrypted(string filename);
Result Load(BookmarkTreeView treeview, string filename, string password);
Result Save(BookmarkTreeView treeview, string filename, string password);
}
}

View File

@ -0,0 +1,83 @@
using bzit.bomg.Models;
using Newtonsoft.Json;
using RyzStudio.IO;
using RyzStudio.Windows.Forms;
using System.Collections.Generic;
using System.Windows.Forms;
namespace BookmarkManager
{
public class JSNXSupportedFile : SupportedFileBase
{
public JSNXSupportedFile()
{
supportedExtensions = new List<string>() { ".jsnx" };
}
public override bool IsEncryptionSupported { get; set; } = true;
public override bool IsEncrypted(string filename) => SharpZipLib.IsZipEncrypted(filename);
public override Result Load(BookmarkTreeView treeview, string filename, string password)
{
treeview.Clear();
if (!SharpZipLib.TestArchive(filename, password))
{
return Result.Create(false, "Could not read file, is password correct?");
}
string sourceCode = SharpZipLib.ReadSingle(filename, password, "bookmarks.json");
if (string.IsNullOrWhiteSpace(sourceCode))
{
return Result.Create(false, "Could not read file, unexpected format");
}
List<BookmarkItem> rs = JsonConvert.DeserializeObject<List<BookmarkItem>>(sourceCode);
if (rs == null)
{
return Result.Create(false, "Could not read file, incorrect format");
}
//// load bookmark items
//ThreadControl.SetValue(progressBar1, 0, rs.Count);
for (int i = 0; i < rs.Count; i++)
{
// ThreadControl.SetValue(progressBar1, (i + 1));
if (treeview.InvokeRequired)
{
treeview.Invoke(new MethodInvoker(() => {
treeview.AddItem(rs[i]);
}));
}
else
{
treeview.AddItem(rs[i]);
}
}
//treeview.SetNoChanges();
return Result.Create(true);
}
public override Result Save(BookmarkTreeView treeview, string filename, string password)
{
List<BookmarkItem> rs = treeview.GetBookmarkList();
if (rs.Count <= 0)
{
return Result.Create(false, "No bookmarks to save");
}
bool rv = SharpZipLib.CreateSingle(filename, password, "bookmarks.json", JsonConvert.SerializeObject(rs));
return Result.Create(rv);
}
}
}

View File

@ -0,0 +1,89 @@
using bzit.bomg.Models;
using Newtonsoft.Json;
using RyzStudio.IO;
using RyzStudio.Windows.Forms;
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace BookmarkManager
{
public class JSONSupportedFile : SupportedFileBase
{
public JSONSupportedFile()
{
supportedExtensions = new List<string>() { ".json" };
}
public override bool IsEncryptionSupported { get; set; } = false;
public override bool IsEncrypted(string filename) => false;
public override Result Load(BookmarkTreeView treeview, string filename, string password)
{
treeview.Clear();
string sourceCode = null;
try
{
sourceCode = System.IO.File.ReadAllText(filename);
}
catch (Exception exc)
{
return Result.Create(false, "Could not read file (" + exc.Message + ")");
}
if (string.IsNullOrWhiteSpace(sourceCode))
{
return Result.Create(false, "Could not read file, unexpected format");
}
List<BookmarkItem> rs = JsonConvert.DeserializeObject<List<BookmarkItem>>(sourceCode);
if (rs == null)
{
return Result.Create(false, "Could not read file, incorrect format");
}
for (int i = 0; i < rs.Count; i++)
{
if (treeview.InvokeRequired)
{
treeview.Invoke(new MethodInvoker(() => {
treeview.AddItem(rs[i]);
}));
}
else
{
treeview.AddItem(rs[i]);
}
}
return Result.Create(true);
}
public override Result Save(BookmarkTreeView treeview, string filename, string password)
{
List<BookmarkItem> rs = treeview.GetBookmarkList();
if (rs.Count <= 0)
{
return Result.Create(false, "No bookmarks to save");
}
try
{
System.IO.File.WriteAllText(filename, JsonConvert.SerializeObject(rs));
}
catch (Exception exc)
{
return Result.Create(false, "Could not write file (" + exc.Message + ")");
}
return Result.Create(true);
}
}
}

View File

@ -0,0 +1,176 @@
using bzit.bomg.Models;
using RyzStudio.IO;
using RyzStudio.Windows.Forms;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace BookmarkManager
{
public class RYZSupportedFile : SupportedFileBase
{
public RYZSupportedFile()
{
supportedExtensions = new List<string>() { ".ryz" };
}
public override bool IsEncryptionSupported { get; set; } = true;
public override bool IsEncrypted(string filename) => SharpZipLib.IsZipEncrypted(filename);
public override Result Load(BookmarkTreeView treeview, string filename, string password)
{
treeview.Clear();
if (!SharpZipLib.TestArchive(filename, password))
{
return Result.Create(false, "Could not read file, is password correct?");
}
string sourceCode = SharpZipLib.ReadSingle(filename, password, "bookmarks.xml");
if (string.IsNullOrWhiteSpace(sourceCode))
{
return Result.Create(false, "Could not read file, unexpected format");
}
// load xml
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(sourceCode);
// parse
XmlNode xnl = xmlDocument.SelectSingleNode("bomg/b/g");
if (xnl == null)
{
return Result.Create(false, "Could not load file, unexpected format");
}
string rootName = (xnl.Attributes["name"] == null) ? "Bookmarks" : (string.IsNullOrWhiteSpace(xnl.Attributes["name"].InnerText) ? "Bookmarks" : xnl.Attributes["name"].InnerText.Trim());
foreach (XmlNode xn in xnl.ChildNodes)
{
BookmarkItem item = new BookmarkItem();
foreach (XmlNode xn2 in xn.ChildNodes)
{
switch (xn2.LocalName)
{
case "name":
item.SiteName = xn2.InnerText?.Trim();
break;
case "address":
item.SiteAddress = xn2.InnerText?.Trim();
break;
case "description":
item.SiteDescription = xn2.InnerText?.Trim();
break;
case "notes":
item.Notes = xn2.InnerText?.Trim();
break;
//case "created":
// bi.Created = xn2.InnerText?.Trim();
// break;
default:
break;
}
}
// fix fullpath and name
if (item.SiteName.Contains("|"))
{
StringBuilder sb = new StringBuilder();
sb.Append("\\");
sb.Append(System.Web.HttpUtility.UrlEncode(rootName));
sb.Append("\\");
string[] pathParts = item.SiteName.Split('|');
for (int i = 0; i < (pathParts.Length - 1); i++)
{
sb.Append(pathParts[i]);
//sb.Append(System.Web.HttpUtility.UrlDecode(pathParts[i]));
sb.Append("\\");
}
item.SiteName = System.Web.HttpUtility.UrlDecode(pathParts[(pathParts.Length - 1)] ?? string.Empty);
item.TreeviewPath = sb.ToString();
}
else
{
item.SiteName = System.Web.HttpUtility.UrlDecode(item.SiteName);
item.TreeviewPath = string.Format("\\{0}\\", System.Web.HttpUtility.UrlEncode(rootName));
}
if (treeview.InvokeRequired)
{
treeview.Invoke(new MethodInvoker(() =>
{
treeview.AddItem(item);
}));
}
else
{
treeview.AddItem(item);
}
}
return Result.Create(true);
}
public override Result Save(BookmarkTreeView treeview, string filename, string password)
{
List<BookmarkItem> rs = treeview.GetBookmarkList();
if (rs.Count <= 0)
{
return Result.Create(false, "No bookmarks to save");
}
return Result.Create(false, "Saving in this format is no longer supported");
//MemoryStream ms = new MemoryStream();
//XmlTextWriter writer = new XmlTextWriter(ms, Encoding.UTF8);
//writer.Formatting = Formatting.Indented;
//writer.WriteStartDocument();
//writer.WriteStartElement("bomg");
//writer.WriteStartElement("b");
//writer.WriteStartElement("g");
//writer.WriteAttributeString("name", treeview.Nodes[0].Text);
//foreach (BookmarkItem item in rs)
//{
// writer.WriteStartElement("m");
// writer.WriteElementString("name", item.TreeviewPath);
// writer.WriteElementString("address", item.SiteAddress);
// writer.WriteElementString("description", item.SiteDescription);
// writer.WriteElementString("created", "200101010000");
// writer.WriteEndElement();
//}
//writer.WriteEndElement();
//writer.WriteEndElement();
//writer.WriteEndElement();
//writer.WriteEndDocument();
//writer.Flush();
//ms.Position = 0;
//StreamReader sr = new StreamReader(ms);
//string sourceCode = sr.ReadToEnd();
//sr.Close();
//sr.Dispose();
//writer.Close();
//writer.Dispose();
//bool rv = SharpZipLib.CreateSingle(filename, password, "bookmarks.xml", sourceCode);
//return Result.Create(rv);
}
}
}

View File

@ -0,0 +1,49 @@
using RyzStudio.Windows.Forms;
using System.Collections.Generic;
using System.IO;
namespace BookmarkManager
{
public abstract class SupportedFileBase : ISupportedFile
{
protected List<string> supportedExtensions = new List<string>();
public SupportedFileBase()
{
}
public virtual bool IsEncryptionSupported { get; set; } = false;
public List<string> SupportedExtensions { get => supportedExtensions; }
public virtual bool IsSupported(string filename)
{
if (string.IsNullOrWhiteSpace(filename))
{
return false;
}
if (supportedExtensions == null)
{
return false;
}
if (supportedExtensions.Count <= 0)
{
return false;
}
return supportedExtensions.Contains(Path.GetExtension(filename)?.Trim()?.ToLower());
}
public virtual bool IsEncrypted(string filename) => false;
public virtual Result Load(BookmarkTreeView treeview, string filename, string password) => Result.Create(false);
public virtual Result Save(BookmarkTreeView treeview, string filename, string password) => Result.Create(false);
}
}

View File

@ -1,431 +0,0 @@
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using BookmarkManager.Services;
using bzit.bomg.Models;
using RyzStudio.Windows.Forms;
using RyzStudio.Windows.ThemedForms;
using RyzStudio.Windows.ThemedForms.ButtonTextBox;
namespace FizzyLauncher
{
public class EditBookmarkForm : Form
{
private System.Windows.Forms.Label label1;
private ThClearableTextBox textBox1;
private Label label2;
private Label label3;
private ThToolbarMemoBox memoBox1;
private Label label4;
private ThHiButtonTextBox textBox2;
private PictureBox pictureBox1;
private PictureBox pictureBox2;
private ToolTip toolTip1;
private System.ComponentModel.IContainer components;
private ThClearableTextBox textBox3;
private ThUserControl thUserControl1;
private Label label5;
private readonly WebProvider _webProvider;
private BookmarkModel result = null;
private RyzStudio.Windows.ThemedForms.Composite.DialogFooter dialogFooter1;
private bool _isBusy = false;
public EditBookmarkForm(BookmarkModel model = null)
{
InitializeComponent();
UISetup.Dialog(this);
this.Text = (result == null) ? "Add Bookmark" : "Edit Bookmark";
result = model;
_webProvider = new WebProvider();
_webProvider.IgnoreSSL = true;
if (result != null)
{
textBox1.Text = model.Title?.Trim() ?? string.Empty;
textBox2.Text = model.Address?.Trim() ?? string.Empty;
textBox3.Text = model.Description?.Trim() ?? string.Empty;
try
{
pictureBox1.Image = model.Icon;
}
catch (Exception)
{
// do nothing
}
memoBox1.Text = model.Notes?.Trim() ?? string.Empty;
}
}
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
label1 = new Label();
textBox1 = new ThClearableTextBox();
label2 = new Label();
label3 = new Label();
memoBox1 = new ThToolbarMemoBox();
label4 = new Label();
textBox2 = new ThHiButtonTextBox();
pictureBox1 = new PictureBox();
toolTip1 = new ToolTip(components);
pictureBox2 = new PictureBox();
textBox3 = new ThClearableTextBox();
thUserControl1 = new ThUserControl();
label5 = new Label();
dialogFooter1 = new RyzStudio.Windows.ThemedForms.Composite.DialogFooter();
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
((System.ComponentModel.ISupportInitialize)pictureBox2).BeginInit();
SuspendLayout();
//
// label1
//
label1.AutoSize = true;
label1.BackColor = Color.Transparent;
label1.ForeColor = SystemColors.ControlText;
label1.Location = new Point(10, 21);
label1.Margin = new Padding(0);
label1.Name = "label1";
label1.Padding = new Padding(0, 8, 0, 0);
label1.Size = new Size(29, 23);
label1.TabIndex = 153;
label1.Text = "Title";
label1.TextAlign = ContentAlignment.MiddleLeft;
//
// textBox1
//
textBox1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
textBox1.BackColor = Color.Transparent;
textBox1.ClearedValue = "";
textBox1.EnableReactiveVisual = true;
textBox1.Font = new Font("Segoe UI", 9F);
textBox1.Icon = "O";
textBox1.IconSize = 13F;
textBox1.Location = new Point(109, 20);
textBox1.Name = "textBox1";
textBox1.Size = new Size(260, 32);
textBox1.TabIndex = 0;
textBox1.TabStop = false;
textBox1.UseSystemPasswordChar = false;
//
// label2
//
label2.AutoSize = true;
label2.BackColor = Color.Transparent;
label2.ForeColor = SystemColors.ControlText;
label2.Location = new Point(10, 61);
label2.Margin = new Padding(0);
label2.Name = "label2";
label2.Padding = new Padding(0, 8, 0, 0);
label2.Size = new Size(49, 23);
label2.TabIndex = 193;
label2.Text = "Address";
label2.TextAlign = ContentAlignment.MiddleLeft;
//
// label3
//
label3.AutoSize = true;
label3.BackColor = Color.Transparent;
label3.ForeColor = SystemColors.ControlText;
label3.Location = new Point(10, 104);
label3.Margin = new Padding(0);
label3.Name = "label3";
label3.Padding = new Padding(0, 8, 0, 0);
label3.Size = new Size(67, 23);
label3.TabIndex = 195;
label3.Text = "Description";
label3.TextAlign = ContentAlignment.MiddleLeft;
//
// memoBox1
//
memoBox1.AllowDrop = true;
memoBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
memoBox1.BackColor = Color.Transparent;
memoBox1.ClearedValue = "";
memoBox1.EnableReactiveVisual = true;
memoBox1.Font = new Font("Segoe UI", 9F);
memoBox1.Location = new Point(110, 196);
memoBox1.Name = "memoBox1";
memoBox1.ReadOnly = false;
memoBox1.ScrollBars = ScrollBars.Vertical;
memoBox1.Size = new Size(259, 232);
memoBox1.TabIndex = 3;
memoBox1.TabStop = false;
memoBox1.WordWrap = false;
//
// label4
//
label4.AutoSize = true;
label4.BackColor = Color.Transparent;
label4.ForeColor = SystemColors.ControlText;
label4.Location = new Point(10, 196);
label4.Margin = new Padding(0);
label4.Name = "label4";
label4.Padding = new Padding(0, 8, 0, 0);
label4.Size = new Size(38, 23);
label4.TabIndex = 198;
label4.Text = "Notes";
label4.TextAlign = ContentAlignment.MiddleLeft;
//
// textBox2
//
textBox2.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
textBox2.BackColor = Color.Transparent;
textBox2.EnableReactiveVisual = true;
textBox2.Font = new Font("Segoe UI", 9F);
textBox2.Icon = "M";
textBox2.IconSize = 13F;
textBox2.Location = new Point(110, 62);
textBox2.Name = "textBox2";
textBox2.Size = new Size(259, 32);
textBox2.TabIndex = 1;
textBox2.TabStop = false;
textBox2.UseSystemPasswordChar = false;
textBox2.OnButtonClick += textBox2_OnButtonClick;
//
// pictureBox1
//
pictureBox1.BackColor = Color.White;
pictureBox1.ErrorImage = null;
pictureBox1.InitialImage = null;
pictureBox1.Location = new Point(113, 150);
pictureBox1.Name = "pictureBox1";
pictureBox1.Size = new Size(32, 32);
pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
pictureBox1.TabIndex = 201;
pictureBox1.TabStop = false;
pictureBox1.MouseDoubleClick += pictureBox1_MouseDoubleClick;
//
// pictureBox2
//
pictureBox2.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
pictureBox2.BackColor = Color.Transparent;
pictureBox2.ErrorImage = null;
pictureBox2.InitialImage = null;
pictureBox2.Location = new Point(10, 396);
pictureBox2.Name = "pictureBox2";
pictureBox2.Size = new Size(32, 32);
pictureBox2.SizeMode = PictureBoxSizeMode.CenterImage;
pictureBox2.TabIndex = 202;
pictureBox2.TabStop = false;
//
// textBox3
//
textBox3.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
textBox3.BackColor = Color.Transparent;
textBox3.ClearedValue = "";
textBox3.EnableReactiveVisual = true;
textBox3.Font = new Font("Segoe UI", 9F);
textBox3.Icon = "O";
textBox3.IconSize = 13F;
textBox3.Location = new Point(109, 104);
textBox3.Name = "textBox3";
textBox3.Size = new Size(260, 32);
textBox3.TabIndex = 203;
textBox3.TabStop = false;
textBox3.UseSystemPasswordChar = false;
//
// thUserControl1
//
thUserControl1.BackColor = Color.Transparent;
thUserControl1.EnableReactiveVisual = true;
thUserControl1.Location = new Point(109, 146);
thUserControl1.Name = "thUserControl1";
thUserControl1.Size = new Size(40, 40);
thUserControl1.TabIndex = 204;
thUserControl1.TabStop = false;
//
// label5
//
label5.AutoSize = true;
label5.BackColor = Color.Transparent;
label5.ForeColor = SystemColors.ControlText;
label5.Location = new Point(10, 146);
label5.Margin = new Padding(0);
label5.Name = "label5";
label5.Padding = new Padding(0, 8, 0, 0);
label5.Size = new Size(30, 23);
label5.TabIndex = 195;
label5.Text = "Icon";
label5.TextAlign = ContentAlignment.MiddleLeft;
//
// dialogFooter1
//
dialogFooter1.BackColor = Color.FromArgb(240, 240, 240);
dialogFooter1.Button1Text = "&OK";
dialogFooter1.Dialog = this;
dialogFooter1.Dock = DockStyle.Bottom;
dialogFooter1.Location = new Point(0, 437);
dialogFooter1.Name = "dialogFooter1";
dialogFooter1.Size = new Size(384, 84);
//
// EditBookmarkForm
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
BackColor = Color.White;
ClientSize = new Size(384, 521);
Controls.Add(dialogFooter1);
Controls.Add(textBox3);
Controls.Add(pictureBox2);
Controls.Add(pictureBox1);
Controls.Add(textBox2);
Controls.Add(memoBox1);
Controls.Add(label4);
Controls.Add(label5);
Controls.Add(label3);
Controls.Add(label2);
Controls.Add(textBox1);
Controls.Add(label1);
Controls.Add(thUserControl1);
KeyPreview = true;
MinimumSize = new Size(400, 560);
Name = "EditBookmarkForm";
Text = "Edit Bookmark";
((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
((System.ComponentModel.ISupportInitialize)pictureBox2).EndInit();
ResumeLayout(false);
PerformLayout();
}
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
textBox2.Focus();
}
protected override void OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
if (this.IsBusy)
{
e.Cancel = true;
}
}
public BookmarkModel Result
{
get
{
if (result == null)
{
result = new BookmarkModel();
}
result.Title = textBox1.Text?.Trim() ?? string.Empty;
result.Address = textBox2.Text?.Trim() ?? string.Empty;
result.Description = textBox3.Text?.Trim() ?? string.Empty;
try
{
result.Icon = pictureBox1.Image;
}
catch (Exception)
{
// do nothing
}
result.Notes = memoBox1.Text?.Trim() ?? string.Empty;
return result;
}
}
protected bool IsBusy
{
get => _isBusy;
set
{
_isBusy = value;
UIControl.SetEnable(textBox1, !this.IsBusy);
UIControl.SetEnable(textBox2, !this.IsBusy);
UIControl.SetEnable(textBox3, !this.IsBusy);
UIControl.SetValue(pictureBox2, (this.IsBusy ? RyzStudio.Windows.ThemedForms.Resource2.loading_block : null));
UIControl.SetEnable(memoBox1, !this.IsBusy);
}
}
private async void textBox2_OnButtonClick(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(textBox2.Text))
{
return;
}
if (this.IsBusy)
{
return;
}
this.IsBusy = true;
if (!textBox2.Text.StartsWith("http://", StringComparison.CurrentCultureIgnoreCase) && !textBox2.Text.StartsWith("https://", StringComparison.CurrentCultureIgnoreCase))
{
textBox2.Text = "http://" + textBox2.Text;
}
var document = await _webProvider.RetrieveHtmlDocument(textBox2.Text);
if (document == null)
{
this.IsBusy = false;
return;
}
textBox1.Text = _webProvider.ParseTitle(document);
textBox3.Text = _webProvider.ParseMetaDescription(document);
pictureBox1.Image = await _webProvider.RetrieveImage(document);
this.IsBusy = false;
textBox2.Focus();
}
private async void pictureBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (string.IsNullOrWhiteSpace(textBox2.Text))
{
return;
}
if (this.IsBusy)
{
return;
}
this.IsBusy = true;
if (!textBox2.Text.StartsWith("http://", StringComparison.CurrentCultureIgnoreCase) && !textBox2.Text.StartsWith("https://", StringComparison.CurrentCultureIgnoreCase))
{
textBox2.Text = "http://" + textBox2.Text;
}
var document = await _webProvider.RetrieveHtmlDocument(textBox2.Text);
if (document == null)
{
this.IsBusy = false;
return;
}
pictureBox1.Image = await _webProvider.RetrieveImage(document);
this.IsBusy = false;
}
}
}
}

View File

@ -1,36 +1,28 @@
using System; using RyzStudio.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using bzit.bomg.Models;
using RyzStudio.Windows.Forms;
using RyzStudio.Windows.ThemedForms; using RyzStudio.Windows.ThemedForms;
using RyzStudio.Windows.ThemedForms.ButtonTextBox; using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace FizzyLauncher namespace FizzyLauncher
{ {
public class FindForm : Form public class FindForm : TDialogForm
{ {
private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label1;
private ThButton button2; private TButton button2;
private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator1; private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator1;
private ThButton button1; private TButton button1;
private ThClearableTextBox textBox1; private TTextBox textBox1;
private BookmarkTreeView treeView1 = null; private BookmarkTreeView treeView1 = null;
private int findPosition = -1; private bool findNextNew = false;
public FindForm(BookmarkTreeView treeView) public FindForm(BookmarkTreeView treeView)
{ {
InitializeComponent(); InitializeComponent();
this.MinimizeBox = false;
this.MaximizeBox = false;
this.ShowIcon = false;
this.ShowInTaskbar = true;
treeView1 = treeView; treeView1 = treeView;
textBox1.PreviewKeyDown += textBox1_PreviewKeyDown; textBox1.PreviewKeyDown += textBox1_PreviewKeyDown;
@ -39,10 +31,10 @@ namespace FizzyLauncher
private void InitializeComponent() private void InitializeComponent()
{ {
this.label1 = new System.Windows.Forms.Label(); this.label1 = new System.Windows.Forms.Label();
this.button2 = new RyzStudio.Windows.ThemedForms.ThButton(); this.button2 = new RyzStudio.Windows.ThemedForms.TButton();
this.tHorizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator(); this.tHorizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator();
this.textBox1 = new ThClearableTextBox(); this.textBox1 = new RyzStudio.Windows.ThemedForms.TTextBox();
this.button1 = new RyzStudio.Windows.ThemedForms.ThButton(); this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
this.SuspendLayout(); this.SuspendLayout();
// //
// label1 // label1
@ -100,7 +92,10 @@ namespace FizzyLauncher
this.textBox1.BackColor = System.Drawing.Color.Transparent; this.textBox1.BackColor = System.Drawing.Color.Transparent;
this.textBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); this.textBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.textBox1.Location = new System.Drawing.Point(121, 20); this.textBox1.Location = new System.Drawing.Point(121, 20);
this.textBox1.Margin = new System.Windows.Forms.Padding(10, 0, 0, 10);
this.textBox1.Name = "textBox1"; this.textBox1.Name = "textBox1";
this.textBox1.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
this.textBox1.ReadOnly = false;
this.textBox1.Size = new System.Drawing.Size(328, 35); this.textBox1.Size = new System.Drawing.Size(328, 35);
this.textBox1.TabIndex = 0; this.textBox1.TabIndex = 0;
this.textBox1.UseSystemPasswordChar = false; this.textBox1.UseSystemPasswordChar = false;
@ -146,12 +141,16 @@ namespace FizzyLauncher
} }
[Browsable(false)]
public string Password => textBox1.Text;
private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{ {
switch (e.KeyCode) switch (e.KeyCode)
{ {
case Keys.Enter: case Keys.Enter:
if (findPosition < 0) if (findNextNew)
{ {
button1_MouseClick(sender, new MouseEventArgs(MouseButtons.Left, 1, 0, 0, 0)); button1_MouseClick(sender, new MouseEventArgs(MouseButtons.Left, 1, 0, 0, 0));
} }
@ -164,91 +163,37 @@ namespace FizzyLauncher
case Keys.Escape: case Keys.Escape:
this.Close(); this.Close();
break; break;
default: default: break;
break;
} }
} }
/// <summary>
/// Find first.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_MouseClick(object sender, MouseEventArgs e) private void button1_MouseClick(object sender, MouseEventArgs e)
{ {
if (e.Button == MouseButtons.Left) if (e.Button == MouseButtons.Left)
{ {
if (string.IsNullOrWhiteSpace(textBox1.Text)) if (string.IsNullOrWhiteSpace(textBox1.Text)) return;
{ if (treeView1.Nodes.Count <= 0) return;
return;
}
if (treeView1.Nodes.Count <= 0) findNextNew = false;
{ treeView1.FindTextNode(treeView1.Nodes[0], textBox1.Text?.Trim());
return;
}
findPosition = -1;
var nodeList = treeView1.ToNodeList<BookmarkModel>();
var node = nodeList.Where(x => x.Value.Title.Contains(textBox1.Text?.Trim())).Select(x => x.Key).FirstOrDefault();
if (node != null)
{
findPosition = 0;
treeView1.SelectedNode = node;
treeView1.SelectedNode.EnsureVisible();
}
} }
} }
/// <summary>
/// Find next.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_MouseClick(object sender, MouseEventArgs e) private void button2_MouseClick(object sender, MouseEventArgs e)
{ {
if (e.Button == MouseButtons.Left) if (e.Button == MouseButtons.Left)
{ {
if (string.IsNullOrWhiteSpace(textBox1.Text)) if (string.IsNullOrWhiteSpace(textBox1.Text)) return;
if (treeView1.Nodes.Count <= 0) return;
if (treeView1.SelectedNode == null) treeView1.SelectedNode = treeView1.Nodes[0];
findNextNew = false;
bool rv = treeView1.FindTextNode(treeView1.SelectedNode, textBox1.Text?.Trim());
if (!rv)
{ {
return; findNextNew = true;
}
if (treeView1.Nodes.Count <= 0)
{
return;
}
if (treeView1.SelectedNode == null)
{
treeView1.SelectedNode = treeView1.Nodes[0];
}
var nodeList = treeView1.ToNodeList<BookmarkModel>();
var node = nodeList.Where(x => x.Value.Title.Contains(textBox1.Text?.Trim())).Select(x => x.Key)?.ToList() ?? new List<TreeNode>();
if (node != null)
{
//var pos = nodeList.FindIndex(x => x.Key == treeView1.SelectedNode);
//if (pos < 0)
//{
// findPosition = -1;
//} else {
// findPosition = pos;
//}
findPosition++;
if (findPosition >= node.Count)
{
findPosition = 0;
}
treeView1.SelectedNode = node[findPosition];
treeView1.SelectedNode.EnsureVisible();
} }
} }
} }

733
MainForm.Designer.cs generated
View File

@ -32,478 +32,604 @@ namespace FizzyLauncher
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
components = new System.ComponentModel.Container(); this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
menuStrip1 = new System.Windows.Forms.MenuStrip(); this.menuStrip1 = new System.Windows.Forms.MenuStrip();
fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
toolStripMenuItem13 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItem13 = new System.Windows.Forms.ToolStripSeparator();
closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
toolStripMenuItem14 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItem14 = new System.Windows.Forms.ToolStripSeparator();
saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
toolStripMenuItem15 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItem15 = new System.Windows.Forms.ToolStripSeparator();
exitToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); this.exitToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();
toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
findToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.findToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
expandAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.expandAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
collapseAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.collapseAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
alwaysOnTopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.alwaysOnTopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
toolStripMenuItem9 = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem9 = new System.Windows.Forms.ToolStripMenuItem();
toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
helpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.helpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
viewHelpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.viewHelpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
toolStripMenuItem16 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItem16 = new System.Windows.Forms.ToolStripSeparator();
aboutToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.aboutToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
rootContextMenu = new System.Windows.Forms.ContextMenuStrip(components); this.rootContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
addPageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.addPageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
addFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.addFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator();
sortToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.sortToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
folderContextMenu = new System.Windows.Forms.ContextMenuStrip(components); this.folderContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
addPageToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.addPageToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
addFolderToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.addFolderToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
toolStripMenuItem4 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripSeparator();
openAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.openAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
editToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.editToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
toolStripMenuItem5 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripSeparator();
sortToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.sortToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
toolStripMenuItem6 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItem6 = new System.Windows.Forms.ToolStripSeparator();
moveUpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.moveUpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
moveDownToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.moveDownToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
pageContextMenu = new System.Windows.Forms.ContextMenuStrip(components); this.pageContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
openToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.openToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
toolStripMenuItem7 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItem7 = new System.Windows.Forms.ToolStripSeparator();
editToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); this.editToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();
deleteToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.deleteToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
toolStripMenuItem8 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItem8 = new System.Windows.Forms.ToolStripSeparator();
moveUpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.moveUpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
moveDownToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.moveDownToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
treeView1 = new RyzStudio.Windows.Forms.BookmarkTreeView(); this.toolStrip1 = new System.Windows.Forms.ToolStrip();
menuStrip1.SuspendLayout(); this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
rootContextMenu.SuspendLayout(); this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
folderContextMenu.SuspendLayout(); this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
pageContextMenu.SuspendLayout(); this.toolStripButton3 = new System.Windows.Forms.ToolStripButton();
SuspendLayout(); this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
this.toolStripButton4 = new System.Windows.Forms.ToolStripButton();
this.treeView1 = new RyzStudio.Windows.Forms.BookmarkTreeView();
this.menuStrip1.SuspendLayout();
this.rootContextMenu.SuspendLayout();
this.folderContextMenu.SuspendLayout();
this.pageContextMenu.SuspendLayout();
this.toolStrip1.SuspendLayout();
this.SuspendLayout();
// //
// saveFileDialog1 // saveFileDialog1
// //
saveFileDialog1.DefaultExt = "jsnx"; this.saveFileDialog1.DefaultExt = "jsnx";
saveFileDialog1.Filter = "Bookmark files (compressed)|*.jsnx|Bookmark files|*.json;*.jsonfig"; this.saveFileDialog1.Filter = "Bookmarks files (*.jsnx)|*.jsnx|Bookmarks files (*.ryz)|*.ryz";
saveFileDialog1.Title = "Save bookmarks file"; this.saveFileDialog1.Title = "Save bookmarks file";
// //
// menuStrip1 // menuStrip1
// //
menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { fileToolStripMenuItem, toolStripMenuItem1, viewToolStripMenuItem, toolsToolStripMenuItem, helpToolStripMenuItem1 }); this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
menuStrip1.Location = new System.Drawing.Point(0, 0); this.fileToolStripMenuItem,
menuStrip1.Name = "menuStrip1"; this.toolStripMenuItem1,
menuStrip1.Size = new System.Drawing.Size(300, 24); this.viewToolStripMenuItem,
menuStrip1.TabIndex = 2; this.toolsToolStripMenuItem,
menuStrip1.MenuActivate += menuStrip1_MenuActivate; this.helpToolStripMenuItem1});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(300, 24);
this.menuStrip1.TabIndex = 2;
// //
// fileToolStripMenuItem // fileToolStripMenuItem
// //
fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { newToolStripMenuItem, openToolStripMenuItem, toolStripMenuItem13, closeToolStripMenuItem, toolStripMenuItem14, saveToolStripMenuItem, saveAsToolStripMenuItem, toolStripMenuItem15, exitToolStripMenuItem2 }); this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
fileToolStripMenuItem.Name = "fileToolStripMenuItem"; this.newToolStripMenuItem,
fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); this.openToolStripMenuItem,
fileToolStripMenuItem.Text = "&File"; this.toolStripMenuItem13,
this.closeToolStripMenuItem,
this.toolStripMenuItem14,
this.saveToolStripMenuItem,
this.saveAsToolStripMenuItem,
this.toolStripMenuItem15,
this.exitToolStripMenuItem2});
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
this.fileToolStripMenuItem.Text = "&File";
// //
// newToolStripMenuItem // newToolStripMenuItem
// //
newToolStripMenuItem.Image = BookmarkManager.AppResource.file; this.newToolStripMenuItem.Image = global::BookmarkManager.AppResource.file;
newToolStripMenuItem.Name = "newToolStripMenuItem"; this.newToolStripMenuItem.Name = "newToolStripMenuItem";
newToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N; this.newToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N)));
newToolStripMenuItem.Size = new System.Drawing.Size(146, 22); this.newToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
newToolStripMenuItem.Text = "&New"; this.newToolStripMenuItem.Text = "&New";
newToolStripMenuItem.Click += newToolStripMenuItem_Click; this.newToolStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click);
// //
// openToolStripMenuItem // openToolStripMenuItem
// //
openToolStripMenuItem.Image = BookmarkManager.AppResource.folder; this.openToolStripMenuItem.Image = global::BookmarkManager.AppResource.folder;
openToolStripMenuItem.Name = "openToolStripMenuItem"; this.openToolStripMenuItem.Name = "openToolStripMenuItem";
openToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O; this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
openToolStripMenuItem.Size = new System.Drawing.Size(146, 22); this.openToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
openToolStripMenuItem.Text = "&Open"; this.openToolStripMenuItem.Text = "&Open";
openToolStripMenuItem.Click += openToolStripMenuItem_Click; this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
// //
// toolStripMenuItem13 // toolStripMenuItem13
// //
toolStripMenuItem13.Name = "toolStripMenuItem13"; this.toolStripMenuItem13.Name = "toolStripMenuItem13";
toolStripMenuItem13.Size = new System.Drawing.Size(143, 6); this.toolStripMenuItem13.Size = new System.Drawing.Size(143, 6);
// //
// closeToolStripMenuItem // closeToolStripMenuItem
// //
closeToolStripMenuItem.Name = "closeToolStripMenuItem"; this.closeToolStripMenuItem.Name = "closeToolStripMenuItem";
closeToolStripMenuItem.Size = new System.Drawing.Size(146, 22); this.closeToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
closeToolStripMenuItem.Text = "&Close"; this.closeToolStripMenuItem.Text = "&Close";
closeToolStripMenuItem.Click += closeToolStripMenuItem_Click; this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click);
// //
// toolStripMenuItem14 // toolStripMenuItem14
// //
toolStripMenuItem14.Name = "toolStripMenuItem14"; this.toolStripMenuItem14.Name = "toolStripMenuItem14";
toolStripMenuItem14.Size = new System.Drawing.Size(143, 6); this.toolStripMenuItem14.Size = new System.Drawing.Size(143, 6);
// //
// saveToolStripMenuItem // saveToolStripMenuItem
// //
saveToolStripMenuItem.Image = BookmarkManager.AppResource.save; this.saveToolStripMenuItem.Image = global::BookmarkManager.AppResource.save;
saveToolStripMenuItem.Name = "saveToolStripMenuItem"; this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
saveToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S; this.saveToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
saveToolStripMenuItem.Size = new System.Drawing.Size(146, 22); this.saveToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
saveToolStripMenuItem.Text = "&Save"; this.saveToolStripMenuItem.Text = "&Save";
saveToolStripMenuItem.Click += saveToolStripMenuItem_Click; this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click);
// //
// saveAsToolStripMenuItem // saveAsToolStripMenuItem
// //
saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem"; this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem";
saveAsToolStripMenuItem.Size = new System.Drawing.Size(146, 22); this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
saveAsToolStripMenuItem.Text = "Save &As..."; this.saveAsToolStripMenuItem.Text = "Save &As...";
saveAsToolStripMenuItem.Click += saveAsToolStripMenuItem_Click; this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.saveAsToolStripMenuItem_Click);
// //
// toolStripMenuItem15 // toolStripMenuItem15
// //
toolStripMenuItem15.Name = "toolStripMenuItem15"; this.toolStripMenuItem15.Name = "toolStripMenuItem15";
toolStripMenuItem15.Size = new System.Drawing.Size(143, 6); this.toolStripMenuItem15.Size = new System.Drawing.Size(143, 6);
// //
// exitToolStripMenuItem2 // exitToolStripMenuItem2
// //
exitToolStripMenuItem2.Name = "exitToolStripMenuItem2"; this.exitToolStripMenuItem2.Name = "exitToolStripMenuItem2";
exitToolStripMenuItem2.Size = new System.Drawing.Size(146, 22); this.exitToolStripMenuItem2.Size = new System.Drawing.Size(146, 22);
exitToolStripMenuItem2.Text = "E&xit"; this.exitToolStripMenuItem2.Text = "E&xit";
exitToolStripMenuItem2.Click += exitToolStripMenuItem_Click; this.exitToolStripMenuItem2.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
// //
// toolStripMenuItem1 // toolStripMenuItem1
// //
toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { findToolStripMenuItem }); this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
toolStripMenuItem1.Name = "toolStripMenuItem1"; this.findToolStripMenuItem});
toolStripMenuItem1.Size = new System.Drawing.Size(39, 20); this.toolStripMenuItem1.Name = "toolStripMenuItem1";
toolStripMenuItem1.Text = "&Edit"; this.toolStripMenuItem1.Size = new System.Drawing.Size(39, 20);
this.toolStripMenuItem1.Text = "&Edit";
// //
// findToolStripMenuItem // findToolStripMenuItem
// //
findToolStripMenuItem.Image = BookmarkManager.AppResource.search; this.findToolStripMenuItem.Image = global::BookmarkManager.AppResource.search;
findToolStripMenuItem.Name = "findToolStripMenuItem"; this.findToolStripMenuItem.Name = "findToolStripMenuItem";
findToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F; this.findToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F)));
findToolStripMenuItem.Size = new System.Drawing.Size(137, 22); this.findToolStripMenuItem.Size = new System.Drawing.Size(137, 22);
findToolStripMenuItem.Text = "&Find"; this.findToolStripMenuItem.Text = "&Find";
findToolStripMenuItem.Click += findToolStripMenuItem_Click; this.findToolStripMenuItem.Click += new System.EventHandler(this.findToolStripMenuItem_Click);
// //
// viewToolStripMenuItem // viewToolStripMenuItem
// //
viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { expandAllToolStripMenuItem, collapseAllToolStripMenuItem, toolStripSeparator1, alwaysOnTopToolStripMenuItem }); this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
viewToolStripMenuItem.Name = "viewToolStripMenuItem"; this.expandAllToolStripMenuItem,
viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20); this.collapseAllToolStripMenuItem,
viewToolStripMenuItem.Text = "&View"; this.toolStripSeparator1,
this.alwaysOnTopToolStripMenuItem});
this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
this.viewToolStripMenuItem.Text = "&View";
// //
// expandAllToolStripMenuItem // expandAllToolStripMenuItem
// //
expandAllToolStripMenuItem.Name = "expandAllToolStripMenuItem"; this.expandAllToolStripMenuItem.Name = "expandAllToolStripMenuItem";
expandAllToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.expandAllToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
expandAllToolStripMenuItem.Text = "&Expand All"; this.expandAllToolStripMenuItem.Text = "&Expand All";
expandAllToolStripMenuItem.Click += expandAllToolStripMenuItem_Click; this.expandAllToolStripMenuItem.Click += new System.EventHandler(this.expandAllToolStripMenuItem_Click);
// //
// collapseAllToolStripMenuItem // collapseAllToolStripMenuItem
// //
collapseAllToolStripMenuItem.Name = "collapseAllToolStripMenuItem"; this.collapseAllToolStripMenuItem.Name = "collapseAllToolStripMenuItem";
collapseAllToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.collapseAllToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
collapseAllToolStripMenuItem.Text = "&Collapse All"; this.collapseAllToolStripMenuItem.Text = "&Collapse All";
collapseAllToolStripMenuItem.Click += collapseAllToolStripMenuItem_Click; this.collapseAllToolStripMenuItem.Click += new System.EventHandler(this.collapseAllToolStripMenuItem_Click);
// //
// toolStripSeparator1 // toolStripSeparator1
// //
toolStripSeparator1.Name = "toolStripSeparator1"; this.toolStripSeparator1.Name = "toolStripSeparator1";
toolStripSeparator1.Size = new System.Drawing.Size(149, 6); this.toolStripSeparator1.Size = new System.Drawing.Size(149, 6);
// //
// alwaysOnTopToolStripMenuItem // alwaysOnTopToolStripMenuItem
// //
alwaysOnTopToolStripMenuItem.Name = "alwaysOnTopToolStripMenuItem"; this.alwaysOnTopToolStripMenuItem.Name = "alwaysOnTopToolStripMenuItem";
alwaysOnTopToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.alwaysOnTopToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
alwaysOnTopToolStripMenuItem.Text = "Always On &Top"; this.alwaysOnTopToolStripMenuItem.Text = "Always On &Top";
alwaysOnTopToolStripMenuItem.Click += alwaysOnTopToolStripMenuItem_Click; this.alwaysOnTopToolStripMenuItem.Click += new System.EventHandler(this.alwaysOnTopToolStripMenuItem_Click);
// //
// toolsToolStripMenuItem // toolsToolStripMenuItem
// //
toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { toolStripMenuItem9, toolStripSeparator2, optionsToolStripMenuItem }); this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
toolsToolStripMenuItem.Name = "toolsToolStripMenuItem"; this.toolStripMenuItem9,
toolsToolStripMenuItem.Size = new System.Drawing.Size(46, 20); this.toolStripSeparator2,
toolsToolStripMenuItem.Text = "&Tools"; this.optionsToolStripMenuItem});
this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem";
this.toolsToolStripMenuItem.Size = new System.Drawing.Size(46, 20);
this.toolsToolStripMenuItem.Text = "&Tools";
// //
// toolStripMenuItem9 // toolStripMenuItem9
// //
toolStripMenuItem9.Name = "toolStripMenuItem9"; this.toolStripMenuItem9.Name = "toolStripMenuItem9";
toolStripMenuItem9.Size = new System.Drawing.Size(168, 22); this.toolStripMenuItem9.Size = new System.Drawing.Size(168, 22);
toolStripMenuItem9.Text = "Update &Icons"; this.toolStripMenuItem9.Text = "Update &Icons";
toolStripMenuItem9.Click += toolStripMenuItem9_Click; this.toolStripMenuItem9.Click += new System.EventHandler(this.toolStripMenuItem9_Click);
// //
// toolStripSeparator2 // toolStripSeparator2
// //
toolStripSeparator2.Name = "toolStripSeparator2"; this.toolStripSeparator2.Name = "toolStripSeparator2";
toolStripSeparator2.Size = new System.Drawing.Size(165, 6); this.toolStripSeparator2.Size = new System.Drawing.Size(165, 6);
// //
// optionsToolStripMenuItem // optionsToolStripMenuItem
// //
optionsToolStripMenuItem.Image = BookmarkManager.AppResource.settings; this.optionsToolStripMenuItem.Image = global::BookmarkManager.AppResource.settings;
optionsToolStripMenuItem.Name = "optionsToolStripMenuItem"; this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
optionsToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F12; this.optionsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F12)));
optionsToolStripMenuItem.Size = new System.Drawing.Size(168, 22); this.optionsToolStripMenuItem.Size = new System.Drawing.Size(168, 22);
optionsToolStripMenuItem.Text = "&Options"; this.optionsToolStripMenuItem.Text = "&Options";
optionsToolStripMenuItem.Click += optionsToolStripMenuItem_Click; this.optionsToolStripMenuItem.Click += new System.EventHandler(this.optionsToolStripMenuItem_Click);
// //
// helpToolStripMenuItem1 // helpToolStripMenuItem1
// //
helpToolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { viewHelpToolStripMenuItem1, toolStripMenuItem16, aboutToolStripMenuItem1 }); this.helpToolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
helpToolStripMenuItem1.Name = "helpToolStripMenuItem1"; this.viewHelpToolStripMenuItem1,
helpToolStripMenuItem1.Size = new System.Drawing.Size(44, 20); this.toolStripMenuItem16,
helpToolStripMenuItem1.Text = "&Help"; this.aboutToolStripMenuItem1});
this.helpToolStripMenuItem1.Name = "helpToolStripMenuItem1";
this.helpToolStripMenuItem1.Size = new System.Drawing.Size(44, 20);
this.helpToolStripMenuItem1.Text = "&Help";
// //
// viewHelpToolStripMenuItem1 // viewHelpToolStripMenuItem1
// //
viewHelpToolStripMenuItem1.Image = BookmarkManager.AppResource.help_circle; this.viewHelpToolStripMenuItem1.Image = global::BookmarkManager.AppResource.help_circle;
viewHelpToolStripMenuItem1.Name = "viewHelpToolStripMenuItem1"; this.viewHelpToolStripMenuItem1.Name = "viewHelpToolStripMenuItem1";
viewHelpToolStripMenuItem1.ShortcutKeys = System.Windows.Forms.Keys.F1; this.viewHelpToolStripMenuItem1.ShortcutKeys = System.Windows.Forms.Keys.F1;
viewHelpToolStripMenuItem1.Size = new System.Drawing.Size(146, 22); this.viewHelpToolStripMenuItem1.Size = new System.Drawing.Size(146, 22);
viewHelpToolStripMenuItem1.Text = "&View Help"; this.viewHelpToolStripMenuItem1.Text = "&View Help";
viewHelpToolStripMenuItem1.Click += viewHelpToolStripMenuItem1_Click; this.viewHelpToolStripMenuItem1.Click += new System.EventHandler(this.viewHelpToolStripMenuItem1_Click);
// //
// toolStripMenuItem16 // toolStripMenuItem16
// //
toolStripMenuItem16.Name = "toolStripMenuItem16"; this.toolStripMenuItem16.Name = "toolStripMenuItem16";
toolStripMenuItem16.Size = new System.Drawing.Size(143, 6); this.toolStripMenuItem16.Size = new System.Drawing.Size(143, 6);
// //
// aboutToolStripMenuItem1 // aboutToolStripMenuItem1
// //
aboutToolStripMenuItem1.Name = "aboutToolStripMenuItem1"; this.aboutToolStripMenuItem1.Name = "aboutToolStripMenuItem1";
aboutToolStripMenuItem1.Size = new System.Drawing.Size(146, 22); this.aboutToolStripMenuItem1.Size = new System.Drawing.Size(146, 22);
aboutToolStripMenuItem1.Text = "&About"; this.aboutToolStripMenuItem1.Text = "&About";
aboutToolStripMenuItem1.Click += aboutToolStripMenuItem1_Click; this.aboutToolStripMenuItem1.Click += new System.EventHandler(this.aboutToolStripMenuItem1_Click);
// //
// openFileDialog1 // openFileDialog1
// //
openFileDialog1.DefaultExt = "jsnx"; this.openFileDialog1.DefaultExt = "jsnx";
openFileDialog1.Filter = "All supported files|*.json;*.jsonfig;*.jsnx|Bookmark files (compressed)|*.jsnx|Bookmark files|*.json;*.jsonfig"; this.openFileDialog1.Filter = "All supported files (*.jsnx;*.ryz)|*.jsnx;*.ryz|Bookmarks files (*.jsnx)|*.jsnx|B" +
openFileDialog1.Title = "Open bookmarks file"; "ookmarks files (*.ryz)|*.ryz";
this.openFileDialog1.Title = "Open bookmarks file";
// //
// rootContextMenu // rootContextMenu
// //
rootContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { addPageToolStripMenuItem, addFolderToolStripMenuItem, toolStripMenuItem2, editToolStripMenuItem, toolStripMenuItem3, sortToolStripMenuItem }); this.rootContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
rootContextMenu.Name = "rootContextMenu"; this.addPageToolStripMenuItem,
rootContextMenu.Size = new System.Drawing.Size(133, 104); this.addFolderToolStripMenuItem,
this.toolStripMenuItem2,
this.editToolStripMenuItem,
this.toolStripMenuItem3,
this.sortToolStripMenuItem});
this.rootContextMenu.Name = "rootContextMenu";
this.rootContextMenu.Size = new System.Drawing.Size(133, 104);
// //
// addPageToolStripMenuItem // addPageToolStripMenuItem
// //
addPageToolStripMenuItem.Name = "addPageToolStripMenuItem"; this.addPageToolStripMenuItem.Name = "addPageToolStripMenuItem";
addPageToolStripMenuItem.Size = new System.Drawing.Size(132, 22); this.addPageToolStripMenuItem.Size = new System.Drawing.Size(132, 22);
addPageToolStripMenuItem.Text = "Add &Page"; this.addPageToolStripMenuItem.Text = "Add &Page";
addPageToolStripMenuItem.Click += addPageToolStripMenuItem_Click; this.addPageToolStripMenuItem.Click += new System.EventHandler(this.addPageToolStripMenuItem_Click);
// //
// addFolderToolStripMenuItem // addFolderToolStripMenuItem
// //
addFolderToolStripMenuItem.Name = "addFolderToolStripMenuItem"; this.addFolderToolStripMenuItem.Name = "addFolderToolStripMenuItem";
addFolderToolStripMenuItem.Size = new System.Drawing.Size(132, 22); this.addFolderToolStripMenuItem.Size = new System.Drawing.Size(132, 22);
addFolderToolStripMenuItem.Text = "Add &Folder"; this.addFolderToolStripMenuItem.Text = "Add &Folder";
addFolderToolStripMenuItem.Click += addFolderToolStripMenuItem_Click; this.addFolderToolStripMenuItem.Click += new System.EventHandler(this.addFolderToolStripMenuItem_Click);
// //
// toolStripMenuItem2 // toolStripMenuItem2
// //
toolStripMenuItem2.Name = "toolStripMenuItem2"; this.toolStripMenuItem2.Name = "toolStripMenuItem2";
toolStripMenuItem2.Size = new System.Drawing.Size(129, 6); this.toolStripMenuItem2.Size = new System.Drawing.Size(129, 6);
// //
// editToolStripMenuItem // editToolStripMenuItem
// //
editToolStripMenuItem.Name = "editToolStripMenuItem"; this.editToolStripMenuItem.Name = "editToolStripMenuItem";
editToolStripMenuItem.Size = new System.Drawing.Size(132, 22); this.editToolStripMenuItem.Size = new System.Drawing.Size(132, 22);
editToolStripMenuItem.Text = "&Edit"; this.editToolStripMenuItem.Text = "&Edit";
editToolStripMenuItem.Click += editToolStripMenuItem_Click; this.editToolStripMenuItem.Click += new System.EventHandler(this.editToolStripMenuItem_Click);
// //
// toolStripMenuItem3 // toolStripMenuItem3
// //
toolStripMenuItem3.Name = "toolStripMenuItem3"; this.toolStripMenuItem3.Name = "toolStripMenuItem3";
toolStripMenuItem3.Size = new System.Drawing.Size(129, 6); this.toolStripMenuItem3.Size = new System.Drawing.Size(129, 6);
// //
// sortToolStripMenuItem // sortToolStripMenuItem
// //
sortToolStripMenuItem.Name = "sortToolStripMenuItem"; this.sortToolStripMenuItem.Name = "sortToolStripMenuItem";
sortToolStripMenuItem.Size = new System.Drawing.Size(132, 22); this.sortToolStripMenuItem.Size = new System.Drawing.Size(132, 22);
sortToolStripMenuItem.Text = "&Sort"; this.sortToolStripMenuItem.Text = "&Sort";
sortToolStripMenuItem.Click += sortToolStripMenuItem_Click; this.sortToolStripMenuItem.Click += new System.EventHandler(this.sortToolStripMenuItem_Click);
// //
// folderContextMenu // folderContextMenu
// //
folderContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { addPageToolStripMenuItem1, addFolderToolStripMenuItem1, toolStripMenuItem4, openAllToolStripMenuItem, editToolStripMenuItem1, deleteToolStripMenuItem, toolStripMenuItem5, sortToolStripMenuItem1, toolStripMenuItem6, moveUpToolStripMenuItem, moveDownToolStripMenuItem }); this.folderContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
folderContextMenu.Name = "folderContextMenu"; this.addPageToolStripMenuItem1,
folderContextMenu.Size = new System.Drawing.Size(139, 198); this.addFolderToolStripMenuItem1,
this.toolStripMenuItem4,
this.openAllToolStripMenuItem,
this.editToolStripMenuItem1,
this.deleteToolStripMenuItem,
this.toolStripMenuItem5,
this.sortToolStripMenuItem1,
this.toolStripMenuItem6,
this.moveUpToolStripMenuItem,
this.moveDownToolStripMenuItem});
this.folderContextMenu.Name = "folderContextMenu";
this.folderContextMenu.Size = new System.Drawing.Size(139, 198);
// //
// addPageToolStripMenuItem1 // addPageToolStripMenuItem1
// //
addPageToolStripMenuItem1.Name = "addPageToolStripMenuItem1"; this.addPageToolStripMenuItem1.Name = "addPageToolStripMenuItem1";
addPageToolStripMenuItem1.Size = new System.Drawing.Size(138, 22); this.addPageToolStripMenuItem1.Size = new System.Drawing.Size(138, 22);
addPageToolStripMenuItem1.Text = "Add &Page"; this.addPageToolStripMenuItem1.Text = "Add &Page";
addPageToolStripMenuItem1.Click += addPageToolStripMenuItem1_Click; this.addPageToolStripMenuItem1.Click += new System.EventHandler(this.addPageToolStripMenuItem1_Click);
// //
// addFolderToolStripMenuItem1 // addFolderToolStripMenuItem1
// //
addFolderToolStripMenuItem1.Name = "addFolderToolStripMenuItem1"; this.addFolderToolStripMenuItem1.Name = "addFolderToolStripMenuItem1";
addFolderToolStripMenuItem1.Size = new System.Drawing.Size(138, 22); this.addFolderToolStripMenuItem1.Size = new System.Drawing.Size(138, 22);
addFolderToolStripMenuItem1.Text = "Add &Folder"; this.addFolderToolStripMenuItem1.Text = "Add &Folder";
addFolderToolStripMenuItem1.Click += addFolderToolStripMenuItem1_Click; this.addFolderToolStripMenuItem1.Click += new System.EventHandler(this.addFolderToolStripMenuItem1_Click);
// //
// toolStripMenuItem4 // toolStripMenuItem4
// //
toolStripMenuItem4.Name = "toolStripMenuItem4"; this.toolStripMenuItem4.Name = "toolStripMenuItem4";
toolStripMenuItem4.Size = new System.Drawing.Size(135, 6); this.toolStripMenuItem4.Size = new System.Drawing.Size(135, 6);
// //
// openAllToolStripMenuItem // openAllToolStripMenuItem
// //
openAllToolStripMenuItem.Image = BookmarkManager.AppResource.bookmark; this.openAllToolStripMenuItem.Image = global::BookmarkManager.AppResource.bookmark;
openAllToolStripMenuItem.Name = "openAllToolStripMenuItem"; this.openAllToolStripMenuItem.Name = "openAllToolStripMenuItem";
openAllToolStripMenuItem.Size = new System.Drawing.Size(138, 22); this.openAllToolStripMenuItem.Size = new System.Drawing.Size(138, 22);
openAllToolStripMenuItem.Text = "&Open All"; this.openAllToolStripMenuItem.Text = "&Open All";
openAllToolStripMenuItem.Click += openAllToolStripMenuItem_Click; this.openAllToolStripMenuItem.Click += new System.EventHandler(this.openAllToolStripMenuItem_Click);
// //
// editToolStripMenuItem1 // editToolStripMenuItem1
// //
editToolStripMenuItem1.Name = "editToolStripMenuItem1"; this.editToolStripMenuItem1.Name = "editToolStripMenuItem1";
editToolStripMenuItem1.Size = new System.Drawing.Size(138, 22); this.editToolStripMenuItem1.Size = new System.Drawing.Size(138, 22);
editToolStripMenuItem1.Text = "&Edit"; this.editToolStripMenuItem1.Text = "&Edit";
editToolStripMenuItem1.Click += editToolStripMenuItem1_Click; this.editToolStripMenuItem1.Click += new System.EventHandler(this.editToolStripMenuItem1_Click);
// //
// deleteToolStripMenuItem // deleteToolStripMenuItem
// //
deleteToolStripMenuItem.Image = BookmarkManager.AppResource.trash; this.deleteToolStripMenuItem.Image = global::BookmarkManager.AppResource.trash;
deleteToolStripMenuItem.Name = "deleteToolStripMenuItem"; this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem";
deleteToolStripMenuItem.Size = new System.Drawing.Size(138, 22); this.deleteToolStripMenuItem.Size = new System.Drawing.Size(138, 22);
deleteToolStripMenuItem.Text = "&Delete"; this.deleteToolStripMenuItem.Text = "&Delete";
deleteToolStripMenuItem.Click += deleteToolStripMenuItem_Click; this.deleteToolStripMenuItem.Click += new System.EventHandler(this.deleteToolStripMenuItem_Click);
// //
// toolStripMenuItem5 // toolStripMenuItem5
// //
toolStripMenuItem5.Name = "toolStripMenuItem5"; this.toolStripMenuItem5.Name = "toolStripMenuItem5";
toolStripMenuItem5.Size = new System.Drawing.Size(135, 6); this.toolStripMenuItem5.Size = new System.Drawing.Size(135, 6);
// //
// sortToolStripMenuItem1 // sortToolStripMenuItem1
// //
sortToolStripMenuItem1.Name = "sortToolStripMenuItem1"; this.sortToolStripMenuItem1.Name = "sortToolStripMenuItem1";
sortToolStripMenuItem1.Size = new System.Drawing.Size(138, 22); this.sortToolStripMenuItem1.Size = new System.Drawing.Size(138, 22);
sortToolStripMenuItem1.Text = "&Sort"; this.sortToolStripMenuItem1.Text = "&Sort";
sortToolStripMenuItem1.Click += sortToolStripMenuItem1_Click; this.sortToolStripMenuItem1.Click += new System.EventHandler(this.sortToolStripMenuItem1_Click);
// //
// toolStripMenuItem6 // toolStripMenuItem6
// //
toolStripMenuItem6.Name = "toolStripMenuItem6"; this.toolStripMenuItem6.Name = "toolStripMenuItem6";
toolStripMenuItem6.Size = new System.Drawing.Size(135, 6); this.toolStripMenuItem6.Size = new System.Drawing.Size(135, 6);
// //
// moveUpToolStripMenuItem // moveUpToolStripMenuItem
// //
moveUpToolStripMenuItem.Image = BookmarkManager.AppResource.arrow_up_circle; this.moveUpToolStripMenuItem.Image = global::BookmarkManager.AppResource.arrow_up_circle;
moveUpToolStripMenuItem.Name = "moveUpToolStripMenuItem"; this.moveUpToolStripMenuItem.Name = "moveUpToolStripMenuItem";
moveUpToolStripMenuItem.Size = new System.Drawing.Size(138, 22); this.moveUpToolStripMenuItem.Size = new System.Drawing.Size(138, 22);
moveUpToolStripMenuItem.Text = "Move &Up"; this.moveUpToolStripMenuItem.Text = "Move &Up";
moveUpToolStripMenuItem.Click += moveUpToolStripMenuItem_Click; this.moveUpToolStripMenuItem.Click += new System.EventHandler(this.moveUpToolStripMenuItem_Click);
// //
// moveDownToolStripMenuItem // moveDownToolStripMenuItem
// //
moveDownToolStripMenuItem.Image = BookmarkManager.AppResource.arrow_down_circle; this.moveDownToolStripMenuItem.Image = global::BookmarkManager.AppResource.arrow_down_circle;
moveDownToolStripMenuItem.Name = "moveDownToolStripMenuItem"; this.moveDownToolStripMenuItem.Name = "moveDownToolStripMenuItem";
moveDownToolStripMenuItem.Size = new System.Drawing.Size(138, 22); this.moveDownToolStripMenuItem.Size = new System.Drawing.Size(138, 22);
moveDownToolStripMenuItem.Text = "Move &Down"; this.moveDownToolStripMenuItem.Text = "Move &Down";
moveDownToolStripMenuItem.Click += moveDownToolStripMenuItem_Click; this.moveDownToolStripMenuItem.Click += new System.EventHandler(this.moveDownToolStripMenuItem_Click);
// //
// pageContextMenu // pageContextMenu
// //
pageContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { openToolStripMenuItem1, toolStripMenuItem7, editToolStripMenuItem2, deleteToolStripMenuItem1, toolStripMenuItem8, moveUpToolStripMenuItem1, moveDownToolStripMenuItem1 }); this.pageContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
pageContextMenu.Name = "pageContextMenu"; this.openToolStripMenuItem1,
pageContextMenu.Size = new System.Drawing.Size(139, 126); this.toolStripMenuItem7,
this.editToolStripMenuItem2,
this.deleteToolStripMenuItem1,
this.toolStripMenuItem8,
this.moveUpToolStripMenuItem1,
this.moveDownToolStripMenuItem1});
this.pageContextMenu.Name = "pageContextMenu";
this.pageContextMenu.Size = new System.Drawing.Size(139, 126);
// //
// openToolStripMenuItem1 // openToolStripMenuItem1
// //
openToolStripMenuItem1.Image = BookmarkManager.AppResource.bookmark; this.openToolStripMenuItem1.Image = global::BookmarkManager.AppResource.bookmark;
openToolStripMenuItem1.Name = "openToolStripMenuItem1"; this.openToolStripMenuItem1.Name = "openToolStripMenuItem1";
openToolStripMenuItem1.Size = new System.Drawing.Size(138, 22); this.openToolStripMenuItem1.Size = new System.Drawing.Size(138, 22);
openToolStripMenuItem1.Text = "&Open"; this.openToolStripMenuItem1.Text = "&Open";
openToolStripMenuItem1.Click += openToolStripMenuItem1_Click; this.openToolStripMenuItem1.Click += new System.EventHandler(this.openToolStripMenuItem1_Click);
// //
// toolStripMenuItem7 // toolStripMenuItem7
// //
toolStripMenuItem7.Name = "toolStripMenuItem7"; this.toolStripMenuItem7.Name = "toolStripMenuItem7";
toolStripMenuItem7.Size = new System.Drawing.Size(135, 6); this.toolStripMenuItem7.Size = new System.Drawing.Size(135, 6);
// //
// editToolStripMenuItem2 // editToolStripMenuItem2
// //
editToolStripMenuItem2.Name = "editToolStripMenuItem2"; this.editToolStripMenuItem2.Name = "editToolStripMenuItem2";
editToolStripMenuItem2.Size = new System.Drawing.Size(138, 22); this.editToolStripMenuItem2.Size = new System.Drawing.Size(138, 22);
editToolStripMenuItem2.Text = "&Edit"; this.editToolStripMenuItem2.Text = "&Edit";
editToolStripMenuItem2.Click += editToolStripMenuItem2_Click; this.editToolStripMenuItem2.Click += new System.EventHandler(this.editToolStripMenuItem2_Click);
// //
// deleteToolStripMenuItem1 // deleteToolStripMenuItem1
// //
deleteToolStripMenuItem1.Image = BookmarkManager.AppResource.trash; this.deleteToolStripMenuItem1.Image = global::BookmarkManager.AppResource.trash;
deleteToolStripMenuItem1.Name = "deleteToolStripMenuItem1"; this.deleteToolStripMenuItem1.Name = "deleteToolStripMenuItem1";
deleteToolStripMenuItem1.Size = new System.Drawing.Size(138, 22); this.deleteToolStripMenuItem1.Size = new System.Drawing.Size(138, 22);
deleteToolStripMenuItem1.Text = "&Delete"; this.deleteToolStripMenuItem1.Text = "&Delete";
deleteToolStripMenuItem1.Click += deleteToolStripMenuItem1_Click; this.deleteToolStripMenuItem1.Click += new System.EventHandler(this.deleteToolStripMenuItem1_Click);
// //
// toolStripMenuItem8 // toolStripMenuItem8
// //
toolStripMenuItem8.Name = "toolStripMenuItem8"; this.toolStripMenuItem8.Name = "toolStripMenuItem8";
toolStripMenuItem8.Size = new System.Drawing.Size(135, 6); this.toolStripMenuItem8.Size = new System.Drawing.Size(135, 6);
// //
// moveUpToolStripMenuItem1 // moveUpToolStripMenuItem1
// //
moveUpToolStripMenuItem1.Image = BookmarkManager.AppResource.arrow_up_circle; this.moveUpToolStripMenuItem1.Image = global::BookmarkManager.AppResource.arrow_up_circle;
moveUpToolStripMenuItem1.Name = "moveUpToolStripMenuItem1"; this.moveUpToolStripMenuItem1.Name = "moveUpToolStripMenuItem1";
moveUpToolStripMenuItem1.Size = new System.Drawing.Size(138, 22); this.moveUpToolStripMenuItem1.Size = new System.Drawing.Size(138, 22);
moveUpToolStripMenuItem1.Text = "Move &Up"; this.moveUpToolStripMenuItem1.Text = "Move &Up";
moveUpToolStripMenuItem1.Click += moveUpToolStripMenuItem1_Click; this.moveUpToolStripMenuItem1.Click += new System.EventHandler(this.moveUpToolStripMenuItem1_Click);
// //
// moveDownToolStripMenuItem1 // moveDownToolStripMenuItem1
// //
moveDownToolStripMenuItem1.Image = BookmarkManager.AppResource.arrow_down_circle; this.moveDownToolStripMenuItem1.Image = global::BookmarkManager.AppResource.arrow_down_circle;
moveDownToolStripMenuItem1.Name = "moveDownToolStripMenuItem1"; this.moveDownToolStripMenuItem1.Name = "moveDownToolStripMenuItem1";
moveDownToolStripMenuItem1.Size = new System.Drawing.Size(138, 22); this.moveDownToolStripMenuItem1.Size = new System.Drawing.Size(138, 22);
moveDownToolStripMenuItem1.Text = "Move &Down"; this.moveDownToolStripMenuItem1.Text = "Move &Down";
moveDownToolStripMenuItem1.Click += moveDownToolStripMenuItem1_Click; this.moveDownToolStripMenuItem1.Click += new System.EventHandler(this.moveDownToolStripMenuItem1_Click);
//
// toolStrip1
//
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripButton1,
this.toolStripButton2,
this.toolStripSeparator3,
this.toolStripButton3,
this.toolStripSeparator4,
this.toolStripButton4});
this.toolStrip1.Location = new System.Drawing.Point(0, 24);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(300, 25);
this.toolStrip1.TabIndex = 4;
this.toolStrip1.Text = "toolStrip1";
//
// toolStripButton1
//
this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripButton1.Image = global::BookmarkManager.AppResource.file;
this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton1.Name = "toolStripButton1";
this.toolStripButton1.Size = new System.Drawing.Size(23, 22);
this.toolStripButton1.Text = "toolStripButton1";
this.toolStripButton1.ToolTipText = "New";
this.toolStripButton1.Click += new System.EventHandler(this.newToolStripMenuItem_Click);
//
// toolStripButton2
//
this.toolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripButton2.Image = global::BookmarkManager.AppResource.folder;
this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton2.Name = "toolStripButton2";
this.toolStripButton2.Size = new System.Drawing.Size(23, 22);
this.toolStripButton2.Text = "Open";
this.toolStripButton2.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(6, 25);
//
// toolStripButton3
//
this.toolStripButton3.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripButton3.Image = global::BookmarkManager.AppResource.save;
this.toolStripButton3.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton3.Name = "toolStripButton3";
this.toolStripButton3.Size = new System.Drawing.Size(23, 22);
this.toolStripButton3.Text = "Save";
this.toolStripButton3.Click += new System.EventHandler(this.saveToolStripMenuItem_Click);
//
// toolStripSeparator4
//
this.toolStripSeparator4.Name = "toolStripSeparator4";
this.toolStripSeparator4.Size = new System.Drawing.Size(6, 25);
//
// toolStripButton4
//
this.toolStripButton4.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripButton4.Image = global::BookmarkManager.AppResource.search;
this.toolStripButton4.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton4.Name = "toolStripButton4";
this.toolStripButton4.Size = new System.Drawing.Size(23, 22);
this.toolStripButton4.Text = "Find";
this.toolStripButton4.Click += new System.EventHandler(this.findToolStripMenuItem_Click);
// //
// treeView1 // treeView1
// //
treeView1.BorderStyle = System.Windows.Forms.BorderStyle.None; this.treeView1.BorderStyle = System.Windows.Forms.BorderStyle.None;
treeView1.Dock = System.Windows.Forms.DockStyle.Fill; this.treeView1.Dock = System.Windows.Forms.DockStyle.Fill;
treeView1.Location = new System.Drawing.Point(0, 24); this.treeView1.Location = new System.Drawing.Point(0, 49);
treeView1.Name = "treeView1"; this.treeView1.Name = "treeView1";
treeView1.OnChanged = null; this.treeView1.Size = new System.Drawing.Size(300, 531);
treeView1.Size = new System.Drawing.Size(300, 556); this.treeView1.TabIndex = 5;
treeView1.TabIndex = 5;
// //
// MainForm // MainForm
// //
AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
BackColor = System.Drawing.Color.FromArgb(250, 250, 250); this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(250)))), ((int)(((byte)(250)))), ((int)(((byte)(250)))));
BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
ClientSize = new System.Drawing.Size(300, 580); this.ClientSize = new System.Drawing.Size(300, 580);
Controls.Add(treeView1); this.Controls.Add(this.treeView1);
Controls.Add(menuStrip1); this.Controls.Add(this.toolStrip1);
DoubleBuffered = true; this.Controls.Add(this.menuStrip1);
ForeColor = System.Drawing.SystemColors.ControlText; this.DoubleBuffered = true;
Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); this.ForeColor = System.Drawing.SystemColors.ControlText;
MainMenuStrip = menuStrip1; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
Name = "MainForm"; this.MainMenuStrip = this.menuStrip1;
Text = "BukkuBuddy"; this.Name = "MainForm";
menuStrip1.ResumeLayout(false); this.Text = "Bookmark Manager";
menuStrip1.PerformLayout(); this.menuStrip1.ResumeLayout(false);
rootContextMenu.ResumeLayout(false); this.menuStrip1.PerformLayout();
folderContextMenu.ResumeLayout(false); this.rootContextMenu.ResumeLayout(false);
pageContextMenu.ResumeLayout(false); this.folderContextMenu.ResumeLayout(false);
ResumeLayout(false); this.pageContextMenu.ResumeLayout(false);
PerformLayout(); this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
} }
#endregion #endregion
@ -562,6 +688,13 @@ namespace FizzyLauncher
private System.Windows.Forms.ToolStripMenuItem moveDownToolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem moveDownToolStripMenuItem1;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem9; private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem9;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton toolStripButton1;
private System.Windows.Forms.ToolStripButton toolStripButton2;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
private System.Windows.Forms.ToolStripButton toolStripButton3;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
private System.Windows.Forms.ToolStripButton toolStripButton4;
private RyzStudio.Windows.Forms.BookmarkTreeView treeView1; private RyzStudio.Windows.Forms.BookmarkTreeView treeView1;
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,64 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <root>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
@ -135,302 +75,305 @@
<metadata name="pageContextMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="pageContextMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1137, 17</value> <value>1137, 17</value>
</metadata> </metadata>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1290, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
AAABAAQAMDAAAAEAIACoJQAARgAAACAgAAABACAAqBAAAO4lAAAYGAAAAQAgAIgJAACWNgAAEBAAAAEA AAABAAQAMDAAAAEAIACoJQAARgAAACAgAAABACAAqBAAAO4lAAAYGAAAAQAgAIgJAACWNgAAEBAAAAEA
IABoBAAAHkAAACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA IABoBAAAHkAAACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAASwAAAKgAAADhAAAA+gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA7gAAAG4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAABgAAAC+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA AAAAAAAAAAAAADExMSozMzPYMzMztDMzM2g3NzccAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAAkAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA AAAAAAAAAAAAAAAAAAAAAAAANTU1PzQ1NfA1Njb+NjY2/jMzM/8zMzP/NDQ0zzMzM4I1NTU1AAAAAQAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABIAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NDRTMzMz+EFCQv6ovb7/yebn/6C1tv9yfn//QURE/TMz
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA M/8zMzP/NDQ06zIyMqIzMzNVNzc3DgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP8AAABJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAA/wAAAP8AAAD/AAAA/wIG AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
B/8hVmP/MYCU/zGAlP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzM28zMzP+VVhY/cXX2P/S7/D/0O7v/9Du
lP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGAlP8xgJT/LXWI/wAA 7//Q7u//zuzt/7DIyf+CkZH/UlhY/jMzM/8zMzP/MzMz+DIyMrszMzNvNTU1HQAAAAAAAAAAAAAAAAAA
AP8AAAD/AAAA/wAAAP8AAABJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAA/wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP8AAAD/AgYH/z+kvf9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUDMjIykzU1Nf9rb2/+zuLj/9nx
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8v/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/7zW1/+Ro6P/Ymtr/zc4OP4zMzP/MzMz/zQ0
9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8AAABJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NNYzMzOIMzMzPAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAADiAAAA/wAAAP8AAAD/IVZk/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAgzMzOqOTk5/3yC
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW gv7U6er/3PLz/9Tv8P/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/8rn
9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8AAABJAAAAAAAAAAAAAAAAAAAAAAAA 6P+gtbb/cn5//0JFRf0zMzP/MzMz/zQ0NOwyMjKiMzMzVTc3Nw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAD6AAAA/wAAAP8AAAD/MoSY/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANjY2EzI0
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW NMU9PT3/iZGS/9jv7//c8vP/2/Lz/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8AAABJAAAAAAAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/87s7f+wyMn/gpGR/1JYWP4zMzP/MzMz/zMzM/gyMjK7MzMzbzMz
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW Mx4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAwMDAlNDQ03kFBQf+dqKj/2/Ly/9zy8//c8vP/1/Dx/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7/+71db/jJ2e/11l
AP8AAABJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/NIec/1LW Zv82Nzf+MzMz/zMzM/8zMzOGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAAAAAAAAAAADExMTk0NDTsS0tL/qy6uv/c8vP/3PLz/9zy8//c8vP/0u/w/9Du7//Q7u//0O7v/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
AP8AAAD/AAAA/wAAAP8AAABJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAA 7//Q7u//0O7v/9Du7//I5OX/nLGx/z5BQf4yMzPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAAAAAAAAAAAAAAAAAAAAAANDQ0TzQ0NPZWV1f9uMjI/9zy8//c8vP/3PLz/9zy8//a8vL/0O7v/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8AAABJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/2ZvcP8yMzP9MzMzDwAAAAAAAAAAAAAAAAAA
AAAAAAD/AAAA/wAAAP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzNkNTU1/FxdXf3C09T/3PLz/9zy8//c8vP/3PLz/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//W8PH/0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8AAABJAAAAAAAAAAAAAAAAAAAAAAAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/4ucnP8zMzP/MzMzRgAA
AAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQ0NIA0NDT/Zmlp/svd3v/c8vP/3PLz/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//c8vP/3PLz/9zy8//T7/D/0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8AAABJAAAAAAAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/7DI
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW yP8zMzP/MzMzgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkJCQHMzMzpTU1Nf9zeXn/0ubn/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//c8vP/3PLz/9zy8//c8vP/3PLz/9vy8/+QpKX/Xmts/8Db3P/Q7u//0O7v/9Du7//Q7u//0O7v/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//A29z/Xmts/5Ckpf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du
AP8AAACqAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAF4AAAD/AAAA/wAAAP8AAAD/NIec/1LW 7//Q7u//0O7v/87r7P86Ozv+MzMzvQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0tLREyMjLANTU1/4OL
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW i//Y7u//3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9jx8v8bHx//AAAA/xUYGP+Zr6//0O7v/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/5mvr/8VGBj/AAAA/xsfH//Q7u//0O7v/9Du
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOgAAAD/AAAA/wAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7/9dZWX/NDQ09jMzMwUAAAAAAAAAAAAAAAAAAAAAMDAwIDQ0
AP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW NNc2Njb/lJ+f/9vx8v/c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9Xw8f8WGRn/AAAA/wAA
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AP8BAQH/X2xt/8vo6f/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//L6On/X2xt/wEBAf8AAAD/AAAA/xYZ
9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8ABYX/AAe6/wAHuv8AB7r/AAe6/wAHt/8AAR7/AAAA/wAA Gf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7/+BkJD/MzMz/zU1NTUAAAAAAAAAAAAA
AF4AAAD/AAAA/wAAAP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAyMjIuNDQ05TY2Nv+gra3/3fPz/93z8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9Lv
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8P8WGRn/AAAA/xcXF/8AAAD/AAAA/ykvL/+vycr/0O7v/9Du7//Q7u//0O7v/6/Jyv8pLy//AAAA/wAA
9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8ABqb/AAno/wAJ6P8ACej/AAno/wAF AP8XFxf/AAAA/xYZGf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7/+lu7v/MzMz/zQ0
df8AAAD/AAAApgAAAAAAAAD/AAAA/wAAAP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW NHEAAAAAAAAAAAAAAAAzMzPkNjc3/rDBwf/d8/T/3fPz/93z8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//c8vP/2/Lz/9Du7/8WGRn/AAAA/6mpqf+QkJD/BgYG/wAAAP8HCAj/dYaH/9Du7//Q7u//g5aX/woL
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8ABqb/AAno/wAJ C/8AAAD/BAQE/39/f/+oqKj/AAAA/xYZGf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
6P8ACej/AAe4/wAABP4AAAHjAAAAEQAAAAAAAAD/AAAA/wAAAP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW 7//I5eb/NTU1/jQ0NK0AAAAAAAAAAAAAAAA0NDS3Nzc3/tnu7//d8/T/3fPz/93z8//c8vP/3PLz/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//c8vP/3PLz/9zy8//c8vP/2fHy/9Du7/8WGRn/AAAA/6qqqv//////ysrK/yQkJP8AAAD/AAAA/0JM
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAA TP9CTEz/AAAA/wAAAP8kJCT/ysrK//////+qqqr/AAAA/xYZGf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du
AP8ABqb/AAno/wAJ6P8ACd3/AAEh/gAAAP4AAACZAAAAdwAAAE4AAAD/AAAA/wAAAP8AAAD/NIec/1LW 7//Q7u//0O7v/9Du7//Q7u//UlhY/zQ0NOoAAAABAAAAAAAAAAAzMzN9MzMz/7/R0v/d8/T/3fPz/93z
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/1vDx/9Du7/8WGRn/AAAA/6qqqv////////////Pz
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAA 8/9hYWH/AAAA/wAAAP8AAAD/AAAA/2FhYf/z8/P///////////+qqqr/AAAA/xYZGf/Q7u//0O7v/9Du
AP8AAAD/AAAA/wAAAP8ABqb/AAno/wAJ6P8AA1T/AAAA/wAAAP8AAAD/AAAA/wAAAOwAAAD/AAAA/wAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//d4SE/zMzM/8wMDAlAAAAAAAAAAAzMzNBMzMz/5yp
AP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW qf/d8/T/3fPz/93z8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/1fDx/9Du7/8WGRn/AAAA/6qq
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW qv//////////////////////qamp/xEREf8RERH/qamp//////////////////////+qqqr/AAAA/xYZ
9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8ABqb/AAno/wAI2f8AAAH/BQMC/3JHJP8WDQf/AAAA/wAA Gf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//m6+v/zMzM/8yMjJgAAAAAAAA
AGsAAAD/AAAA/wAAAP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAA5OTkJNDQ0+nR8fP/d8/T/3fPz/93z8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/0+/w/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 7/8WGRn/AAAA/6qqqv////////////////////////////Ly8v/y8vL/////////////////////////
9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8ABqb/AAno/wAJ6P8ABGH/AAAA/ycY //+qqqr/AAAA/xYZGf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//wNvc/zMz
Df8AAAD/AAAAswAAAAEAAAD/AAAA/wAAAP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW M/8zMzObAAAAAAAAAAAAAAAAMzMzyEZISP3d8vP/3fPz/93z8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//c8vP/0u/w/9Du7/8WGRn/AAAA/6qqqv//////////////////////////////////////////////
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8ABqb/AAno/wAJ //////////////////+qqqr/AAAA/xYZGf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
6P8ACeH/AAIp/wAAAP8BAQDwAAAAGAAAAAAAAAD/AAAA/wAAAP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW 7//Q7u//0O7v/0ZKSv40NDTYAAAAAAAAAAAAAAAAMzMzjTMzM//K3N3/3fPz/93z8//c8vP/3PLz/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//c8vP/3PLz/9zy8//c8vP/0e7v/9Du7/8WGRn/AAAA/6qqqv//////////////////////////////
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAA //////////////////////////////////+qqqr/AAAA/xYZGf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du
AP8ABqb/AAno/wAJ6P8ACej/AAfB/wAAB/8AAAHxAAAAGAAAAAAAAAD/AAAA/wAAAP8AAAD/NIec/1LW 7//Q7u//0O7v/9Du7//Q7u//0O7v/2x3d/8zMzP+Li4uFgAAAAAAAAAAMjIyUjMzM/+ntbX/3fPz/93z
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/0O7v/9Du7/8WGRn/AAAA/6qqqv//////////////
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAA //////////////////////////////////////////////////+qqqr/AAAA/xYZGf/Q7u//0O7v/9Du
AP8AAAD/AAAA/wAAAP8ABqb/AAno/wAJ6P8ACej/AAno/wAFg/8AAAD/AAAAtQAAAAEAAAD/AAAA/wAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/5Gjo/8zMzP/MzMzUAAAAAAAAAAAMTExFTMz
AP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW M/5/iYn/3fPz/93z8//d8/P/3PLz/9zy8//c8vP/3PLz/9zy8//b8vP/0O7v/9Du7/8WGRn/AAAA/6qq
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW qv////////////////////////////////////////////////////////////////+qqqr/AAAA/xYZ
9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8ABXn/AAeq/wAHqv8AB6r/AAeq/wAHqf8AASH/AAAA/wAA Gf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/7bP0P8zMzP/MzMziwAA
AHMAAAD/AAAA/wAAAP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAAAAAAAAAAADMzM9pRVVX+3fP0/93z8//d8/P/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/0O7v/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 7/8WGRn/AAAA/6qqqv//////////////////////////////////////////////////////////////
9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA //+qqqr/AAAA/xYZGf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/8/t
AP8AAAD/AAAA/wAAAP0AAAD/AAAA/wAAAP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 7v89Pj/+NDQ0xgAAAAAAAAAAAAAAADIyMp0zMzP/0eXm/93z8//d8/P/3PLz/9zy8//c8vP/3PLz/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//c8vP/0e7v/9Du7/8WGRn/AAAA/6qqqv//////////////////////////////////////////////
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8+JxT/VzYc/1c2 //////////////////+qqqr/AAAA/xYZGf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
HP9TMxv/DAgE/wEBAf8KCgr/AAAA/wAAAMIAAAD/AAAA/wAAAP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW 7//Q7u//0O7v/9Du7/9ia2v/NDQ0+zMzMwoAAAAAAAAAADQ0NGIzMzP/r8DA/93z8//d8/P/3PLz/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//c8vP/3PLz/9zy8//c8vP/0e7v/9Du7/8WGRn/AAAA/6qqqv//////////////////////////////
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAA //////////////////////////////////+qqqr/AAAA/xYZGf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du
AP91SCX/pGU0/6RlNP+kZTT/glAp/wMCAf8BAQH/AQEB5gAAABIAAAD/AAAA/wAAAP8AAAD/NIec/1LW 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7/+Glpf/MzMz/zU1NT8AAAAAAAAAADQ0NCczMzP/iZWV/93z
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//d8/P/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/0+/w/9Du7/8WGRn/AAAA/6qqqv//////////////
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAA //////////////////////////////////////////////////+qqqr/AAAA/xYZGf/Q7u//0O7v/9Du
AP8AAAD/AAAA/wAAAP91SCX/pGU0/6RlNP+kZTT/pGU0/1Q0G/8AAAD/AAAAvwAAAAAAAAD/AAAA/wAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7/+rwsP/MzMz/zQ0NHsAAAAAAAAAAAAA
AP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAE0NDTqW2Fh/93z8//d8/P/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/1fDx/9Du7/8WGRn/AAAA/6qq
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW qv////////////////////////////////////////////////////////////////+qqqr/AAAA/xYZ
9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP9dOh7/g1Eq/4NRKv+DUSr/g1Eq/4FQKf8WDgf/AAAA/wAA Gf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//L6On/Nzc3/jQ0
AGAAAAD/AAAA/wAAAP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW NLcAAAAAAAAAAAAAAAA0NDStNjY2/tbs7f/d8/P/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/1/Dx/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 7/8WGRn/AAAA/6qqqv//////////////////////////////////////////////////////////////
9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA //+qqqr/AAAA/xYZGf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
AP8AAAD/AAAA/wAAAOkAAAD/AAAA/wAAAP8AAAD/NIec/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 7/+dsrL/Njc3/jMzM+QAAAAAAAAAAAAAAAAzMzNzMzMz/7jKyv/d8/P/3PLz/9zy8//c8vP/3PLz/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//c8vP/2vLy/9Du7/8gJCX/AAAA/5ubm///////////////////////////////////////////////
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP9VVVX/d3d3/3Jy //////////////////+ampr/AAAA/yElJf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
cv8HBwf/AAAA+wAAAJkAAACIAAAAiAAAAFwAAAD/AAAA/wAAAP8AAAD/NIec/03J6P86mK//MoKW/zGA 7//Q7u//0O7v/4ydnv80NDT/NTU16TIyMjMAAAAAAAAAAAAAAAAzMzM3MzMz/5Gen//d8/P/3PLz/9zy
lP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGA 8//c8vP/3PLz/9zy8//c8vP/3PLz/9Lv8P9OWlr/AAAA/xQUFP9jY2P/ZmZm/2ZmZv9mZmb/ZmZm/2Zm
lP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGAlP8xgJT/LXaI/wAAAP8AAAD/AAAA/wAA Zv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2NjY/8TExP/AAAA/1BbXP/Q7u//0O7v/9Du7//Q7u//0O7v/9Du
AP+2trb///////r6+v8nJyf+AAAA/QAAAEUAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/FDU9/wIE 7//Q7u//0O7v/9Du7//P7e7/gpGR/zMzM/80NDTcMjIyJAAAAAAAAAAAAAAAAAAAAAAzMzMFNDQ09mZt
Bf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA bv/d8/P/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9bw8f+71tf/GBsb/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/GBsb/7zX2P/Q7u//0O7v/9Du
AP8AAAD/AAAA/wAAAP+2trb////////////Nzc3/BQUF/gEBAekAAAAXAAAAAAAAAAAAAAD/AAAA/wAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/8vo6f9pc3P/MzMz/zMzM8czMzMUAAAAAAAAAAAAAAAAAAAAAAAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA AAAAAAAAMzMzvzs8PP7b8PH/3fPz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9vy8//R7u//xODh/3KD
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA g/9MV1f/RU9Q/0VPUP9FT1D/RU9Q/0VPUP9FT1D/RU9Q/0VPUP9FT1D/RU9Q/0xXV/9zhIT/xODh/9Du
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+2trb/////////////////ioqK/wAAAP8AAAC1AAAAAQAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//xeHi/1lhYf8zMzP/NDQ0rTk5OQkAAAAAAAAAAAAA
AAAAAAD/AAAA/wAAAP8AAAD/AAAA/w0iKP8ve43/PJ21/zydtf88nbX/PJ21/zydtf88nbX/PJ21/zyd AAAAAAAAAAAAAAAAAAAAAAAAMzMzgzMzM/+/09T/3fPz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy
tf88nbX/PJ21/zydtf88nbX/PJ21/zydtf88nbX/PJ21/zydtf88nbX/PJ21/zydtf88nbX/PJ21/zyd 8//V8PH/0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
tf88nbX/PJ21/zydtf88nbX/N5Cm/wAAAP8AAAD/AAAA/wAAAP+2trb//////////////////f39/0RE 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7/+81tf/S09P/jMzM/8zMzORAAAAAgAA
RP8AAAD/AAAAZwAAAAAAAAD/AAAA/wAAAP8AAAD/ECox/1DQ8P9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjIySDMzM/+bqqr/3fPz/9zy8//c8vP/3PLz/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//c8vP/3PLz/9zy8//b8vP/0u/w/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP+2trb///////// 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/7PMzf9DRkf9MzMz/jIy
/////////////+Xl5f8TExP+AQEB9gAAACkAAAD/AAAA/wAAAP8AAAD/MYCT/1LW9/9S1vf/Utb3/1LW MnUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzc3DjIzM/1yfH3/3fPz/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/2fHy/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//pbu7/zk7
AP8YGBj/IiIi/yIiIv8iIiL/IiIi/yIiIv8NDQ3/AAAA/wAAAMkAAAD/AAAA/wAAAP8AAAD/NIec/1LW O/00NDT5MjIyVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIz
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW M9BAQkL+qry8/9Xq6//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9fx8v/Q7u//0O7v/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
AP8AAAD/AAAA/wAAAP8AAADnAAAA3QAAAN0AAADdAAAA3QAAAN0AAADdAAAA3QAAALIAAAD6AAAA/wAA 7/+Ro6P/NTU1/jQ1Ne0xMTE5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP8AAAD/MoSY/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAAAAAAAAAAADMzM4YzMzP/MzMz/zc4OP5qcXL/nq2u/8vf4P/c8vP/3PLz/9zy8//c8vP/3PLz/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//X8fL/0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8AAABJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 7//Q7u//z+3u/3+Njf8zMzP/NDQ03jAwMCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAADjAAAA/wAAAP8AAAD/IVdl/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuLi4WNDQ0XjMzM6o0NDT1MzMz/zQ0NP9TVlb+ipWV/7rL
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW y//a7/D/3PLz/9zy8//c8vP/2PHy/9Hu7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8AAABJAAAAAAAAAAAAAAAAAAAAAAAA 7//Q7u//0O7v/9Du7//M6er/bHd3/zMzM/80NDTLLi4uFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAACpAAAA/wAAAP8AAAD/AwcI/z+kvv9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5OTkJNTU1RDMz
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW M5E0NDTlMzMz/zMzM/9GSEj9eIGC/6q5uv/U6er/3PLz/9vy8//T7/D/0O7v/9Du7//Q7u//0O7v/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/S8Tj/wAAAP8AAAD/AAAA/wAAAP8AAABJAAAAAAAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/8jl5v9faGj/MzMz/zIyMrEzMzMKAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNAAAA/wAAAP8AAAD/AAAA/wMHCP8hV2X/MYCU/zGA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
lP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGA AAAAAAAAAAAAAAAAAAAAAAAANTU1KzMzM3cyNDTFMzMz/jMzM/82Njb+Ymlp/5elpf/F2tv/2fHy/9Lv
lP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGAlP8xgJT/MYCU/zGAlP8xgJT/LXWI/wAAAP8AAAD/AAAA/wAA 8P/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//wNvc/09VVf4zMzP/MzMzm0BAQAQAAAAAAAAAAAAA
AP8AAABJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAP8AAAD/AAAA/wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALi4uFjQ0NF4zMzOqNDQ09TMz
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA M/8zMzP/TFBQ/oSQkP+vw8P/z+vs/9Du7//Q7u//0O7v/9Du7/+1zs//RUlJ/TMzM/40NDSAAAAAAAAA
AP8AAAD/AAAA/wAAAP8AAABJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AN8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA AAAAAAAAOTk5CTU1NUQzMzORNDQ05TMzM/8zMzP/PT8//Wx1dv+Yq6z/xuLj/6e9vv87PT39NDQ0+jMz
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA M1oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAABgAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//L6en/ore4/3F9ffs+QED4Nzc39zs8PLIyMjJcNzc3DgAA
AAAAAAAAAAAAAAAAAP8AAAD/CBQX/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKysrDDo8PMBobGz40eXm/9zy8//b8vP/0O7v/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/FzxG/wAAAP8AAAD/AAAAMAAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/8/t7v+vx8f/fYyN/kBD
AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8IFBf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW Q/czMzN4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADY2NhM8Pj7Pdnx8+NXq6//c8vP/3PLz/9fw
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/8XPEb/AAAA/wAA 8f/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
AP8AAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wgUF/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 7//Q7u//i5yc/zs8PLsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2NjYhOzw84YGIiPrY7+//3PLz/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/xc8 8//c8vP/0+/w/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
Rv8AAAD/AAAA/wAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/CBQX/1LW9/9S1vf/Utb3/1LW 7//Q7u//0O7v/9Du7/+vx8f/ODk58gAAAAEAAAAAAAAAAAAAAAAAAAAAMzMzLTo7O+2PmZn82vHy/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//c8vP/3PLz/9vy8/9+kJD/m7Gy/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//m7Gy/36Q
9/9S1vf/FzxG/wAAAP8AAAD/AAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8IFBf/Utb3/1LW kP/Q7u//0O7v/9Du7//Q7u//0O7v/83q6/83Nzf7NDQ0JwAAAAAAAAAAAAAAADIyMkI6Ojr2nKio/dzy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//c8vP/3PLz/9zy8//c8vP/2PHy/xASEv8CAgL/Y3Fx/83q6//Q7u//0O7v/9Du7//Q7u//zerr/2Nx
9/9S1vf/Utb3/1LW9/8XPEb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAA+cAAAD/AAAA/wgU cf8CAgL/EBIS/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/1RaWvMyMjJhAAAAAAAAAAAyMjJbNzg4+qm4
F/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW uP/d8/P/3PLz/9zy8//c8vP/3PLz/9zy8//V8PH/DxER/xYWFv8AAAD/LzU2/7bQ0f/Q7u//0O7v/7bQ
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/xc8Rv8AAAD/AAAA/wAGo/8ACMn/AAjJ/wAHuP8AAAr7AAACdgAA 0f8vNTX/AAAA/xYWFv8PERH/0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//fYyM/jk5OaIAAAAAAAAAADg5
AP8AAAD/CBQX/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW OeyisrL/3fPz/93z8//c8vP/3PLz/9zy8//c8vP/3PLz/9Pv8P8PERH/cnJy/62trf8QERH/DA0N/4eb
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/FzxG/wAAAP8AAAD/AAe8/wAJ6P8ACej/AANK+QAA nP+OoqP/DxER/w4ODv+lpaX/cnJy/w8REf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7/+it7j/Ozw84gAA
CMcAAAADAAAA/wAAAP8IFBf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAAAAAAOzw8tpmnp//d8/T/3fPz/9zy8//c8vP/3PLz/9zy8//c8vP/0e7v/w8REf9ycnL//////97e
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/8XPEb/AAAA/wAAAP8AB7z/AAno/wAF 3v84ODj/AAAA/wAAAP84ODj/3t7e//////9ycnL/DxER/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/8Xh
iv8AAAX7BgMBuQMCAJQAAAD/AAAA/wgUF/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 4v80NDT+MzMzFAAAAAAzMzNzb3d3993z9P/d8/P/3PLz/9zy8//c8vP/3PLz/9vy8//Q7u//DxER/3Jy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/xc8Rv8AAAD/AAAA/wAH cv////////////r6+v9/f3//f39///r6+v///////////3Jycv8PERH/0O7v/9Du7//Q7u//0O7v/9Du
vP8ACeL/AQEH/y0cDv8IBQP+BwQBvgAAAP8AAAD/CBQX/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 7//Q7u//0O7v/0ZKSvQyMjJMAAAAADIyMjhDRET43fLz/93z8//c8vP/3PLz/9zy8//c8vP/2fHy/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/FzxG/wAA 7/8PERH/cnJy////////////////////////////////////////////cnJy/w8REf/Q7u//0O7v/9Du
AP8AAAD/AAe8/wAJ6P8CBVr/EAoM/wQDAfAAAAAZAAAA/wAAAP8IFBf/Utb3/1LW9/9S1vf/Utb3/1LW 7//Q7u//0O7v/9Du7//Q7u//bnp6+jU1NYcAAAAAMzMzBTU2NvnL3d7/3fPz/9zy8//c8vP/3PLz/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//Y8fL/0O7v/w8REf9ycnL///////////////////////////////////////////9ycnL/DxER/9Du
9/8XPEb/AAAA/wAAAP8AB7z/AAno/wAJ3/8AAR3/AAADsQAAAAAAAAD/AAAA/wgUF/9S1vf/Utb3/1LW 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7/+Upqf/PD09zAAAAAAAAAAAPT4+zqq4uf/d8/P/3PLz/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//c8vP/3PLz/9jx8v/Q7u//DxER/3Jycv///////////////////////////////////////////3Jy
9/9S1vf/Utb3/xc8Rv8AAAD/AAAA/wAHvP8ACej/AAno/wAHu/8AAAT7AAAARQAAAP8AAAD/CBQX/1LW cv8PERH/0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/7jS0v81NTX6KysrBgAAAAA0NDSJgouM+93z
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 8//c8vP/3PLz/9zy8//c8vP/2PHy/9Du7/8PERH/cnJy////////////////////////////////////
9/9S1vf/Utb3/1LW9/9S1vf/FzxG/wAAAP8AAAD/BQQU/wYEGf8BARf/AAEX/gAABf4AAAT2AAAA/wAA ////////cnJy/w8REf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//z+3u/zw+Pvg0NDQ2AAAAADQ0
AP8IFBf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW NE5RVFT13fPz/93z8//c8vP/3PLz/9zy8//Y8fL/0O7v/w8REf9ycnL/////////////////////////
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/8XPEb/AAAA/wAAAP9YNhz/bUMj/1s4Hf8EAwL/BwcH/gcH //////////////////9ycnL/DxER/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//X2dn9TQ0
B8EAAAD/AAAA/wgUF/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW NHEAAAAAMzMzFDU1Nf7U6er/3fPz/9zy8//c8vP/3PLz/9ry8v/Q7u//DxER/3Jycv//////////////
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/xc8Rv8AAAD/AAAA/4VSKv+kZTT/pGU0/1s5 /////////////////////////////3Jycv8PERH/0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
Hv8FAwL+AAAAJgAAAP8AAAD/CBQX/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 7/+Hl5f/PD09tAAAAAAAAAAAOzw84rTFxv/d8/P/3PLz/9zy8//c8vP/2/Lz/9Du7/8PERH/cnJy////
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/FzxG/wAAAP8AAAD/RywX/1c2 ////////////////////////////////////////cnJy/w8REf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du
HP9XNhz/VzUc/wkGA/4GAwG3AAAA/wAAAP8IFBf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 7//Q7u//0O7v/5KkpP84OTnsAAAAAAAAAAA4Ojqjj5uc/t3z8//c8vP/3PLz/9zy8//c8vP/0+/w/xkc
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/8XPEb/AAAA/wAA HP9bW1v///////////////////////////////////////////9aWlr/GRwc/9Du7//Q7u//0O7v/9Du
AP9CPz7/UE1L/w8MCv0JBgPcCgYDtQUDApwAAAD/AAAA/wgUF/87mbD/JWFv/yFWY/8hVmP/IVZj/yFW 7//Q7u//0O7v/9Du7/+Xqqv/NjY2+zQ0NGMAAAAAAAAAADQ0NGNiZ2f13fPz/9zy8//c8vP/3PLz/9zy
Y/8hVmP/IVZj/yFWY/8hVmP/IVZj/yFWY/8hVmP/IVZj/yFWY/8hVmP/IVZj/yFWY/8hVmP/IVZj/wkY 8//W8PH/Xmts/wAAAP8ODw//EBER/xAREf8QERH/EBER/xAREf8QERH/Dg8P/wAAAP9fbW7/0O7v/9Du
HP8AAAD/AAAA/8/Pz//9/f3/MTEx+AgICKUAAAAAAAAAAAAAAP8AAAD/AgYH/wAAAP8AAAD/AAAA/wAA 7//Q7u//0O7v/9Du7//Q7u//i5yc/TY3N/c0NDRJAAAAAAAAAAAAAAAAMjIyKTk6Ovva8PD/3PLz/9zy
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA 8//c8vP/3PLz/9vy8//P6+z/gJOT/1ZiYv9TX2D/U19g/1NfYP9TX2D/U19g/1NfYP9WYmL/gZOU/87s
AP8AAAD/AAAA/wAAAP8AAAD/z8/P///////d3d3/CQkJ+gAAAFkAAAAAAAAA/wAAAP8AAAD/FztE/z2f 7f/Q7u//0O7v/9Du7//Q7u//z+3u/3mIiPw3ODjyMTExOQAAAAAAAAAAAAAAAAAAAAAAAAABODk58sDS
uP9HudX/R7nW/0e51v9Hudb/R7nW/0e51v9Hudb/R7nW/0e51v9Hudb/R7nW/0e51v9Hudb/R7nW/0e5 0//c8vP/3PLz/9zy8//c8vP/3PLz/9bw8f/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
1v9Hudb/R7nW/0e51v8UND3/AAAA/wAAAP/Pz8////////////+goKD/BQUF9AAAAB8AAAD/AAAA/wIE 7//Q7u//0O7v/9Du7//Q7u//0O7v/8zp6v9ncXL5Nzk55jY2NiYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Bf9R0/T/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAA7Pj69nKqr/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9Lv8P/Q7u//0O7v/9Du7//Q7u//0O7v/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/xc8Rv8AAAD/AAAA/1NTU/9mZmb/ZmZm/2ZmZv8MDAz+CgoKyAAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//I5eb/XGRk+Ds8PNU3NzcXAAAAAAAAAAAAAAAAAAAAAAAA
AP8AAAD/BQwN/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAAAAAAAAAAADMzM3hCRET3jZqb/r/S0v/b8vL/3PLz/9zy8//c8vP/2/Lz/9Lv8P/Q7u//0O7v/9Du
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/FzxG/wAAAP8AAAD/AAAArAAAAJkAAACZAAAAmQAA 7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//wdzd/0tRUfc5OjrAKysrDAAAAAAAAAAAAAAAAAAA
AJkAAACCAAAA5gAAAP8BAwT/Tsvq/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAAAAAAAAAAAAAAAAAAAAAANzc3DjIyMlw5OjqwNjc39kZISPeAiov7tMXG/9ju7v/c8vP/2vLz/9Lv
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/8XPEb/AAAA/wAAAP8AAAAwAAAAAAAA 8P/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/7jS0v9DRkb4OTs7qjMzMwUAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAACtAAAA/wAAAP8dS1b/Tsvq/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAEMzMzPDc3N5Q4OTnqOjs7+211
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/xc8Rv8AAAD/AAAA/wAA dvijsrL/z+Tl/9bw8f/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7/+wyMj/PT4/+Dc3N5UAAAACAAAAAAAA
ADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUAAAD7AAAA/wAAAP8BAwT/BQ4Q/wUOEP8FDhD/BQ4Q/wUO AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
EP8FDhD/BQ4Q/wUOEP8FDhD/BQ4Q/wUOEP8FDhD/BQ4Q/wUOEP8FDhD/BQ4Q/wUOEP8FDhD/AgQF/wAA AAA1NTUrMzMzdzo7O840NDT+V1xc9o6cnP+60dL/0e7v/9Du7//Q7u//pry8/zg5Ofo3Nzd4AAAAAAAA
AP8AAAD/AAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAD7AAAA/wAAAP8AAAD/AAAA/wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMx4yMjJrOjs7wjU1NftGS0vzfImK/IiYmf42Nzf6MjIyVwAA
AP8AAAD/AAAA/wAAAP8AAAArAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUAAACsAAAA4QAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzc3DjIyMlY5OzuqOTo65jIy
AP8AAAD/AAAA/wAAAP8AAAD/AAAAtQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAB+AAAAfAAAAHwAA MkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/g////wB///4AB//4A
AB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA AD/8AAAH+AAAB/AAAAfgAAADwAAAA4AAAAMAAAADAAAAAwAAAAEAAAABAAAAAQAAAAGAAAAAgAAAAIAA
AAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAAAAAAAAAAAAAAAAAB8AAAAfAAAAH4AAAB/AAAAfKAAAABgA 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 Z/8NDg7/iJyd/4icnf8NDg7/Zmdn/0tLS/9zhIT/0O7v/9Du7//Q7u//0O7v/36NjfY1NTVcAAAAAENG
AP8AAAD/Q6/K/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW RtDN4eH/3fPz/9zy8//c8vP/3PLz/9rx8v9zhIT/VFVV//////+rq6v/DxAQ/w8QEP+rq6v//////1RV
9/9S1vf/JmNy/wAAAP8AA1T/AAno/wEDSfwHBArkCAYDtQAAAP8AAAD/Q6/K/1LW9/9S1vf/Utb3/1LW Vf9zhIT/0O7v/9Du7//Q7u//0O7v/6W7u/9CRkalAAAAAD5AQIutvL3+3fPz/9zy8//c8vP/3PLz/9jx
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/JmNy/wAAAP8AA1T/AAnl/wcF 8v9zhIT/VFVV////////////5eXl/+Xl5f///////////1RVVf9zhIT/0O7v/9Du7//Q7u//0O7v/8jk
E/8uHQ74DAcDkgAAAP8AAAD/Q6/K/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 5f9BQ0PgAAAAADIyMkeDjY3x3fPz/9zy8//c8vP/3PLz/9bw8f9zhIT/VFVV////////////////////
9/9S1vf/Utb3/1LW9/9S1vf/JmNy/wAAAP8AA1T/AAno/wAHrv8BAQ/6AAAADAAAAP8AAAD/Q6/K/1LW /////////////1RVVf9zhIT/0O7v/9Du7//Q7u//0O7v/9Du7/9GS0vsMzMzDzc3Nw5VWFnt3fPz/9zy
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/JmNy/wAA 8//c8vP/3PLz/9bw8f9zhIT/VFVV/////////////////////////////////1RVVf9zhIT/0O7v/9Du
AP8AA0n/AAjJ/wAIyf8AA035AAARmAAAAP8AAAD/Q6/K/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW 7//Q7u//0O7v/9Du7/9teXnvNDQ0RQAAAABARETi1+vs/9zy8//c8vP/3PLz/9bw8f9zhIT/VFVV////
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/JmNy/wAAAP8MBwr/IBQb/woHFP8DAxP+AgIL+AAA /////////////////////////////1RVVf9zhIT/0O7v/9Du7//Q7u//0O7v/9Du7/+Xqqv+P0FBigAA
AP8AAAD/Q6/K/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW AABBRESoucvL/9zy8//c8vP/3PLz/9fx8f9zhIT/VFVV/////////////////////////////////1RV
9/9S1vf/JmNy/wAAAP87JBP/pGU0/5tfMf8TDQj+BQUFbwAAAP8AAAD/Q6/K/1LW9/9S1vf/Utb3/1LW Vf9zhIT/0O7v/9Du7//Q7u//0O7v/9Du7/+81tf/Q0VFzwAAAAA1NTVckp6e993z8//c8vP/3PLz/9nx
9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/Utb3/1LW9/9S1vf/JmNy/wAAAP8aEw3/STUl/z4q 8v9zhIT/VFVV/////////////////////////////////1RVVf9zhIT/0O7v/9Du7//Q7u//0O7v/9Du
Gv4fEwr7BwUC2gAAAP8AAAD/Q67J/0a41P9Cq8b/QqvG/0Krxv9Cq8b/QqvG/0Krxv9Cq8b/QqvG/0Kr 7/+2z9D/Oz097AAAAAA1NTUiYWho7N3z8//c8vP/3PLz/9zy8/+OoaL/HR4e/4iIiP+IiIj/iIiI/4iI
xv9Cq8b/QqvG/0Krxv9Cq8b/Hk9b/wAAAP9DQ0P/ubm5/wcHB/kAAABXAAAAOQAAAP8AAAD/CBUZ/wAA iP+IiIj/iIiI/xwdHf+Po6T/0O7v/9Du7//Q7u//0O7v/67Fxv5CRUXpMzMzMgAAAAAAAAAAQUND69zx
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA 8v/c8vP/3PLz/9zy8//T7u//b39//0dQUP9HUFD/R1BQ/0dQUP9HUFD/R1BQ/3CAgP/P7e7/0O7v/9Du
AP9QUFD//////5WVlfoUFBS8AAAAAAAAAP8AAAD/FzxF/0Ouyf9Hudb/R7nW/0e51v9Hudb/R7nW/0e5 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
rEEAAKxBAACsQQAArEEAA6xBAAOsQQ== rEGAAKxBgAGsQYADrEHgD6xB/B+sQQ==
</value> </value>
</data> </data>
</root> </root>

View File

@ -1,26 +0,0 @@
using System.Collections.Generic;
using System.Drawing;
using bzit.bomg.Models;
namespace FizzyLauncher.Models
{
public class AppOptions
{
public bool RestorePosition { get; set; } = true;
public bool AlwaysOnTop { get; set; } = false;
public string RunCommand { get; set; } = "{0}";
//public bool IgnoreSSL { get; set; } = false;
public Point StartPosition { get; set; } = Point.Empty;
public int Width { get; set; } = 0;
public int Height { get; set; } = 0;
public List<BookmarkModel> Items { get; set; } = new List<BookmarkModel>();
}
}

26
Models/AppSession.cs Normal file
View File

@ -0,0 +1,26 @@
namespace FizzyLauncher.Models
{
public class AppSession
{
public enum AutoSaveOption
{
Prompt = 0,
Yes,
No
}
public bool EnableAutoPosition { get; set; } = true;
public bool AlwaysOnTop { get; set; } = false;
public AutoSaveOption AutoSave { get; set; } = AutoSaveOption.Prompt;
public string RunCommand { get; set; } = "{0}";
public bool IgnoreSSL { get; set; } = false;
public bool ShowToolbar { get; set; } = false;
}
}

54
Models/BookmarkItem.cs Normal file
View File

@ -0,0 +1,54 @@
using BookmarkManager;
using System;
using System.Text;
namespace bzit.bomg.Models
{
public class BookmarkItem
{
public string SiteName { get; set; }
public string SiteAddress { get; set; }
public string SiteDescription { get; set; }
public string TreeviewPath { get; set; }
public string Notes { get; set; }
public new string ToString()
{
StringBuilder sb = new StringBuilder();
if (!string.IsNullOrWhiteSpace(this.SiteName))
{
sb.AppendLine("Name");
sb.AppendLine(this.SiteName + Environment.NewLine);
}
if (!string.IsNullOrWhiteSpace(this.SiteAddress))
{
sb.AppendLine("Address");
sb.AppendLine(this.SiteAddress + Environment.NewLine);
}
if (!string.IsNullOrWhiteSpace(this.SiteDescription))
{
sb.AppendLine("Description");
sb.AppendLine(this.SiteDescription + Environment.NewLine);
}
if (!string.IsNullOrWhiteSpace(this.Notes))
{
sb.AppendLine("Notes");
sb.AppendLine(this.Notes + Environment.NewLine);
}
return sb.ToString();
}
public string ToHash() => Crypto.GetSHA256Hash(this.SiteAddress);
}
}

View File

@ -1,60 +0,0 @@
using System;
using System.Drawing;
using System.Text;
using System.Text.Json.Serialization;
namespace bzit.bomg.Models
{
public class BookmarkModel
{
public Guid Id { get; set; } = Guid.NewGuid();
public string Title { get; set; }
public string Address { get; set; }
public string Description { get; set; }
public string IconId { get; set; }
[JsonIgnore]
public Image Icon { get; set; }
public string Path { get; set; }
public string Notes { get; set; }
public new string ToString()
{
StringBuilder sb = new StringBuilder();
if (!string.IsNullOrWhiteSpace(this.Title))
{
sb.AppendLine("Name");
sb.AppendLine(this.Title + Environment.NewLine);
}
if (!string.IsNullOrWhiteSpace(this.Address))
{
sb.AppendLine("Address");
sb.AppendLine(this.Address + Environment.NewLine);
}
if (!string.IsNullOrWhiteSpace(this.Description))
{
sb.AppendLine("Description");
sb.AppendLine(this.Description + Environment.NewLine);
}
if (!string.IsNullOrWhiteSpace(this.Notes))
{
sb.AppendLine("Notes");
sb.AppendLine(this.Notes + Environment.NewLine);
}
return sb.ToString();
}
}
}

View File

@ -1,49 +0,0 @@
using System.Text;
namespace BookmarkManager.Models
{
public class R4SaveFileModel
{
public string SiteName { get; set; }
public string SiteAddress { get; set; }
public string SiteDescription { get; set; }
public string TreeviewPath { get; set; }
public string Notes { get; set; }
public string Path
{
get
{
if (string.IsNullOrWhiteSpace(TreeviewPath))
{
return string.Empty;
}
var path = this.TreeviewPath?.Trim('\\')?.Trim() ?? string.Empty;
if (!path.Contains("\\"))
{
return path?.Trim() ?? string.Empty;
}
var sb = new StringBuilder();
var parts = path.Split("\\");
for (var i = 1; i < parts.Length; i++)
{
var item = System.Web.HttpUtility.UrlDecode(parts[i]);
sb.Append(item);
sb.Append("\n");
}
return sb.ToString()?.Trim() ?? string.Empty;
}
}
}
}

283
Net/WebParser.cs Normal file
View File

@ -0,0 +1,283 @@
using bzit.bomg.Models;
using HtmlAgilityPack;
using RyzStudio.Net;
using System;
using System.Drawing;
using System.IO;
using System.Net;
namespace BookmarkManager
{
public class WebParser
{
protected HttpWeb webClient = null;
protected WebClient webClient2 = null;
public BookmarkResult RetrieveDetails(string url, bool ignoreSSL)
{
string sourceCode = retrieveSourceCode(url, ignoreSSL);
if (string.IsNullOrWhiteSpace(sourceCode))
{
return null;
}
BookmarkResult rs = new BookmarkResult();
rs.Item = new BookmarkItem();
HtmlDocument document = new HtmlDocument();
document.LoadHtml(sourceCode);
rs.Item.SiteName = parseSiteTitle(document);
rs.Item.SiteAddress = url;
rs.Item.SiteDescription = parseSiteDescription(document);
rs.IconURL = parseSiteIcon(document);
// resolve relative URL
if (!string.IsNullOrWhiteSpace(rs.IconURL))
{
Uri iconAddressURI;
bool rv = Uri.TryCreate(new Uri(url), rs.IconURL, out iconAddressURI);
if (rv)
{
rs.IconURL = iconAddressURI.ToString();
}
}
return rs;
}
public Bitmap RetrieveImage(string url)
{
if (string.IsNullOrWhiteSpace(url))
{
return null;
}
if (webClient2 == null) webClient2 = new WebClient();
webClient2.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);
try
{
byte[] byteData = webClient2.DownloadData(url);
if (!RyzStudio.IO.FileType.IsImage(byteData))
{
throw new Exception("Not a supported image");
}
Image img = Image.FromStream(new MemoryStream(byteData));
return new Bitmap(img, 16, 16);
}
catch (Exception)
{
return null;
}
}
protected string retrieveSourceCode(string url, bool ignoreSSL)
{
if (webClient == null) webClient = new HttpWeb();
webClient.IgnoreSSL = ignoreSSL;
string sourceCode;
try
{
int statusCode = webClient.GetResponse(out sourceCode, url);
if ((statusCode == 200) || (statusCode == 301) || (statusCode == 302))
{
return sourceCode;
}
}
catch (Exception)
{
return null;
}
return null;
}
protected string parseSiteDescription(HtmlDocument doc)
{
string rs = null;
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue_Attr(doc, "//meta[@name='description']", "content", string.Empty);
}
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue_Attr(doc, "//meta[@property='og:description']", "content", string.Empty);
}
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue_Attr(doc, "//meta[@name='twitter:description']", "content", string.Empty);
}
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue_Attr(doc, "//meta[@property='og:description']", "content", string.Empty);
}
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue_Attr(doc, "//meta[@itemprop='description']", "content", string.Empty);
}
return rs;
}
protected string parseSiteIcon(HtmlDocument doc)
{
string rs = null;
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue_Attr(doc, "//link[translate(@rel, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'shortcut icon']", "href", string.Empty);
}
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue_Attr(doc, "//link[translate(@rel, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'icon']", "href", string.Empty);
}
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue_Attr(doc, "//link[translate(@rel, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'apple-touch-icon']", "href", string.Empty);
}
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue_Attr(doc, "//link[translate(@rel, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'apple-touch-icon-precomposed']", "href", string.Empty);
}
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue_Attr(doc, "//meta[translate(@property, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'og:image']", "content", string.Empty);
}
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue_Attr(doc, "//meta[translate(@name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'twitter:image']", "content", string.Empty);
}
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue_Attr(doc, "//meta[translate(@property, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'og:image']", "content", string.Empty);
}
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue_Attr(doc, "//meta[translate(@itemprop, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'image']", "content", string.Empty);
}
if (string.IsNullOrWhiteSpace(rs))
{
rs = "/favicon.ico";
}
return rs;
}
protected string parseSiteTitle(HtmlDocument doc)
{
string rs = null;
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue(doc, "//title", string.Empty);
}
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue_Attr(doc, "//meta[@property='og:title']", "content", string.Empty);
}
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue_Attr(doc, "//meta[@name='twitter:title']", "content", string.Empty);
}
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue_Attr(doc, "//meta[@property='og:site_name']", "content", string.Empty);
}
if (string.IsNullOrWhiteSpace(rs))
{
rs = parseTagValue_Attr(doc, "//meta[@itemprop='name']", "content", string.Empty);
}
return rs?.Trim() ?? string.Empty;
}
protected string parseTagValue(HtmlDocument doc, string xpath, string defaultValue = "")
{
HtmlNodeCollection hnc = doc.DocumentNode.SelectNodes(xpath);
if (hnc == null)
{
return defaultValue;
}
if (hnc.Count <= 0)
{
return defaultValue;
}
foreach (HtmlNode hn in hnc)
{
if (string.IsNullOrWhiteSpace(hn.InnerHtml))
{
continue;
}
string rs = WebUtility.HtmlDecode(hn.InnerHtml)?.Replace("\r", "")?.Replace("\n", " ")?.Trim();
if (string.IsNullOrWhiteSpace(rs))
{
continue;
}
return rs;
}
return defaultValue;
}
protected string parseTagValue_Attr(HtmlDocument doc, string xpath, string attr, string defaultValue = "")
{
HtmlNodeCollection hnc = doc.DocumentNode.SelectNodes(xpath);
if (hnc == null)
{
return defaultValue;
}
if (hnc.Count <= 0)
{
return defaultValue;
}
foreach (HtmlNode hn in hnc)
{
if (hn.Attributes[attr] == null)
{
continue;
}
if (string.IsNullOrWhiteSpace(hn.Attributes[attr].Value))
{
continue;
}
return System.Web.HttpUtility.HtmlDecode(hn.Attributes[attr].Value?.Trim());
}
return defaultValue;
}
}
}

View File

@ -1,310 +1,379 @@
using System; using System;
using System.Linq;
using System.Windows.Forms; using System.Windows.Forms;
using FizzyLauncher.Models; using FizzyLauncher.Models;
using RyzStudio.Windows.Forms;
using RyzStudio.Windows.ThemedForms; using RyzStudio.Windows.ThemedForms;
using RyzStudio.Windows.ThemedForms.PickerBox; using RyzStudio.Windows.ThemedForms.PickerBox;
namespace FizzyLauncher namespace FizzyLauncher
{ {
public class OptionsForm : Form public class OptionsForm : TDialogForm
{ {
private FlowLayoutPanel flowLayoutPanel1; private System.Windows.Forms.Label label1;
private TTogglePanel panel1; private TButton button1;
private TTogglePanel panel3; private TYesNoPickerBox pickerBox1;
private ThYesNoPickerBox yesNoPickerBox1; private System.Windows.Forms.Label label6;
private TYesNoPickerBox pickerBox2;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label8;
private TPickerBox pickerBox3;
private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator1;
private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator3;
private TTextBox textBox1;
private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator2;
private TYesNoPickerBox pickerBox4;
private Label label2; private Label label2;
private TTogglePanel panel2; private TYesNoPickerBox pickerBox5;
private ThYesNoPickerBox thYesNoPickerBox1;
private Label label1;
private ThYesNoPickerBox yesNoPickerBox2;
private Label label3; private Label label3;
private RyzStudio.Windows.ThemedForms.ButtonTextBox.ThClearableTextBox textBox1; protected MainForm parentForm = null;
private RyzStudio.Windows.ThemedForms.Composite.DialogFooter dialogFooter1;
private AppOptions _appSession = null;
public OptionsForm(AppOptions appSession) public OptionsForm(MainForm parent) : base()
{ {
InitializeComponent(); InitializeComponent();
UISetup.Dialog(this); parentForm = parent;
_appSession = appSession; pickerBox3.ComboBox.Items.Clear();
foreach (string item in Enum.GetNames(typeof(AppSession.AutoSaveOption)))
if (_appSession != null)
{ {
yesNoPickerBox1.Value = _appSession.RestorePosition; pickerBox3.ComboBox.Items.Add(item);
yesNoPickerBox2.Value = _appSession.AlwaysOnTop;
textBox1.Text = _appSession.RunCommand ?? string.Empty;
} }
if (pickerBox3.ComboBox.Items.Count > 0) pickerBox3.ComboBox.SelectedIndex = 0;
} }
private void InitializeComponent() private void InitializeComponent()
{ {
flowLayoutPanel1 = new FlowLayoutPanel(); this.label1 = new System.Windows.Forms.Label();
panel1 = new TTogglePanel(); this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
yesNoPickerBox1 = new ThYesNoPickerBox(); this.pickerBox1 = new TYesNoPickerBox();
label2 = new Label(); this.label6 = new System.Windows.Forms.Label();
panel2 = new TTogglePanel(); this.pickerBox2 = new TYesNoPickerBox();
yesNoPickerBox2 = new ThYesNoPickerBox(); this.label7 = new System.Windows.Forms.Label();
thYesNoPickerBox1 = new ThYesNoPickerBox(); this.label8 = new System.Windows.Forms.Label();
label1 = new Label(); this.pickerBox3 = new RyzStudio.Windows.ThemedForms.TPickerBox();
panel3 = new TTogglePanel(); this.tHorizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator();
textBox1 = new RyzStudio.Windows.ThemedForms.ButtonTextBox.ThClearableTextBox(); this.tHorizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator();
label3 = new Label(); this.tHorizontalSeparator3 = new RyzStudio.Windows.Forms.THorizontalSeparator();
dialogFooter1 = new RyzStudio.Windows.ThemedForms.Composite.DialogFooter(); this.textBox1 = new RyzStudio.Windows.ThemedForms.TTextBox();
flowLayoutPanel1.SuspendLayout(); this.pickerBox4 = new TYesNoPickerBox();
panel1.SuspendLayout(); this.label2 = new System.Windows.Forms.Label();
panel2.SuspendLayout(); this.pickerBox5 = new TYesNoPickerBox();
panel3.SuspendLayout(); this.label3 = new System.Windows.Forms.Label();
SuspendLayout(); this.SuspendLayout();
//
// flowLayoutPanel1
//
flowLayoutPanel1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
flowLayoutPanel1.AutoScroll = true;
flowLayoutPanel1.BackColor = System.Drawing.Color.Transparent;
flowLayoutPanel1.Controls.Add(panel1);
flowLayoutPanel1.Controls.Add(panel2);
flowLayoutPanel1.Controls.Add(panel3);
flowLayoutPanel1.FlowDirection = FlowDirection.TopDown;
flowLayoutPanel1.Location = new System.Drawing.Point(8, 12);
flowLayoutPanel1.Name = "flowLayoutPanel1";
flowLayoutPanel1.Size = new System.Drawing.Size(436, 412);
flowLayoutPanel1.TabIndex = 194;
flowLayoutPanel1.WrapContents = false;
flowLayoutPanel1.Resize += flowLayoutPanel1_Resize;
//
// panel1
//
panel1.AutoScrollMargin = new System.Drawing.Size(0, 0);
panel1.AutoScrollMinSize = new System.Drawing.Size(0, 0);
panel1.Controls.Add(yesNoPickerBox1);
panel1.Controls.Add(label2);
panel1.ExpandedHeight = 100;
panel1.ForeColor = System.Drawing.Color.FromArgb(99, 105, 119);
panel1.IsOpen = true;
panel1.Location = new System.Drawing.Point(0, 0);
panel1.Margin = new Padding(0);
panel1.Name = "panel1";
panel1.PaddingBottom = 0;
panel1.PaddingLeft = 4;
panel1.Size = new System.Drawing.Size(401, 77);
panel1.TabIndex = 0;
panel1.Title = "On Start-Up";
panel1.TitleContextMenuStrip = null;
panel1.TitleCursor = Cursors.Default;
//
// yesNoPickerBox1
//
yesNoPickerBox1.Anchor = AnchorStyles.Top | AnchorStyles.Right;
yesNoPickerBox1.BackColor = System.Drawing.Color.Transparent;
yesNoPickerBox1.EnableReactiveVisual = true;
yesNoPickerBox1.Font = new System.Drawing.Font("Segoe UI", 9F);
yesNoPickerBox1.Location = new System.Drawing.Point(307, 22);
yesNoPickerBox1.Name = "yesNoPickerBox1";
yesNoPickerBox1.SelectedIndex = 1;
yesNoPickerBox1.Size = new System.Drawing.Size(84, 34);
yesNoPickerBox1.TabIndex = 197;
yesNoPickerBox1.TabStop = false;
yesNoPickerBox1.Value = true;
//
// label2
//
label2.AutoSize = true;
label2.BackColor = System.Drawing.Color.Transparent;
label2.ForeColor = System.Drawing.SystemColors.ControlText;
label2.Location = new System.Drawing.Point(1, 22);
label2.Margin = new Padding(0);
label2.Name = "label2";
label2.Padding = new Padding(0, 8, 0, 0);
label2.Size = new System.Drawing.Size(92, 23);
label2.TabIndex = 196;
label2.Text = "Restore Position";
label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// panel2
//
panel2.AutoScrollMargin = new System.Drawing.Size(0, 0);
panel2.AutoScrollMinSize = new System.Drawing.Size(0, 0);
panel2.Controls.Add(yesNoPickerBox2);
panel2.Controls.Add(thYesNoPickerBox1);
panel2.Controls.Add(label1);
panel2.ExpandedHeight = 100;
panel2.ForeColor = System.Drawing.Color.FromArgb(99, 105, 119);
panel2.IsOpen = true;
panel2.Location = new System.Drawing.Point(0, 77);
panel2.Margin = new Padding(0);
panel2.Name = "panel2";
panel2.PaddingBottom = 0;
panel2.PaddingLeft = 4;
panel2.Size = new System.Drawing.Size(401, 77);
panel2.TabIndex = 2;
panel2.Title = "Appearance";
panel2.TitleContextMenuStrip = null;
panel2.TitleCursor = Cursors.Default;
//
// yesNoPickerBox2
//
yesNoPickerBox2.Anchor = AnchorStyles.Top | AnchorStyles.Right;
yesNoPickerBox2.BackColor = System.Drawing.Color.Transparent;
yesNoPickerBox2.EnableReactiveVisual = true;
yesNoPickerBox2.Font = new System.Drawing.Font("Segoe UI", 9F);
yesNoPickerBox2.Location = new System.Drawing.Point(307, 22);
yesNoPickerBox2.Name = "yesNoPickerBox2";
yesNoPickerBox2.SelectedIndex = 1;
yesNoPickerBox2.Size = new System.Drawing.Size(84, 34);
yesNoPickerBox2.TabIndex = 198;
yesNoPickerBox2.TabStop = false;
yesNoPickerBox2.Value = true;
//
// thYesNoPickerBox1
//
thYesNoPickerBox1.Anchor = AnchorStyles.Top | AnchorStyles.Right;
thYesNoPickerBox1.BackColor = System.Drawing.Color.Transparent;
thYesNoPickerBox1.EnableReactiveVisual = true;
thYesNoPickerBox1.Font = new System.Drawing.Font("Segoe UI", 9F);
thYesNoPickerBox1.Location = new System.Drawing.Point(508, 22);
thYesNoPickerBox1.Name = "thYesNoPickerBox1";
thYesNoPickerBox1.SelectedIndex = 1;
thYesNoPickerBox1.Size = new System.Drawing.Size(84, 34);
thYesNoPickerBox1.TabIndex = 197;
thYesNoPickerBox1.TabStop = false;
thYesNoPickerBox1.Value = true;
// //
// label1 // label1
// //
label1.AutoSize = true; this.label1.AutoSize = true;
label1.BackColor = System.Drawing.Color.Transparent; this.label1.BackColor = System.Drawing.Color.Transparent;
label1.ForeColor = System.Drawing.SystemColors.ControlText; this.label1.ForeColor = System.Drawing.SystemColors.ControlText;
label1.Location = new System.Drawing.Point(1, 22); this.label1.Location = new System.Drawing.Point(10, 235);
label1.Margin = new Padding(0); this.label1.Margin = new System.Windows.Forms.Padding(0);
label1.Name = "label1"; this.label1.Name = "label1";
label1.Padding = new Padding(0, 8, 0, 0); this.label1.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
label1.Size = new System.Drawing.Size(85, 23); this.label1.Size = new System.Drawing.Size(109, 34);
label1.TabIndex = 196; this.label1.TabIndex = 153;
label1.Text = "Always On Top"; this.label1.Text = "Custom Command";
label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
// //
// panel3 // button1
// //
panel3.AutoScrollMargin = new System.Drawing.Size(0, 0); this.button1.AcceptButton = null;
panel3.AutoScrollMinSize = new System.Drawing.Size(0, 0); this.button1.ActiveImage = null;
panel3.Controls.Add(textBox1); this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
panel3.Controls.Add(label3); this.button1.BackColor = System.Drawing.Color.Transparent;
panel3.ExpandedHeight = 100; this.button1.HoverImage = null;
panel3.ForeColor = System.Drawing.Color.FromArgb(99, 105, 119); this.button1.IdleImage = null;
panel3.IsOpen = true; this.button1.LabelText = "&Save";
panel3.Location = new System.Drawing.Point(0, 154); this.button1.Location = new System.Drawing.Point(241, 469);
panel3.Margin = new Padding(0); this.button1.Margin = new System.Windows.Forms.Padding(10, 0, 0, 10);
panel3.Name = "panel3"; this.button1.Name = "button1";
panel3.PaddingBottom = 0; this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
panel3.PaddingLeft = 4; this.button1.Size = new System.Drawing.Size(128, 32);
panel3.Size = new System.Drawing.Size(401, 77); this.button1.TabIndex = 6;
panel3.TabIndex = 1; this.button1.TabStop = false;
panel3.Title = "Behaviour"; this.button1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.button1_MouseClick);
panel3.TitleContextMenuStrip = null; //
panel3.TitleCursor = Cursors.Default; // pickerBox1
//
this.pickerBox1.AcceptButton = null;
this.pickerBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.pickerBox1.BackColor = System.Drawing.Color.Transparent;
this.pickerBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.pickerBox1.Location = new System.Drawing.Point(285, 127);
this.pickerBox1.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
this.pickerBox1.Name = "pickerBox1";
this.pickerBox1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.pickerBox1.Size = new System.Drawing.Size(84, 35);
this.pickerBox1.TabIndex = 2;
this.pickerBox1.TabStop = false;
this.pickerBox1.Value = true;
//
// label6
//
this.label6.AutoSize = true;
this.label6.BackColor = System.Drawing.Color.Transparent;
this.label6.ForeColor = System.Drawing.SystemColors.ControlText;
this.label6.Location = new System.Drawing.Point(10, 127);
this.label6.Margin = new System.Windows.Forms.Padding(0);
this.label6.Name = "label6";
this.label6.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
this.label6.Size = new System.Drawing.Size(145, 34);
this.label6.TabIndex = 182;
this.label6.Text = "Auto Position On Start-Up";
this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// pickerBox2
//
this.pickerBox2.AcceptButton = null;
this.pickerBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.pickerBox2.BackColor = System.Drawing.Color.Transparent;
this.pickerBox2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.pickerBox2.Location = new System.Drawing.Point(285, 168);
this.pickerBox2.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
this.pickerBox2.Name = "pickerBox2";
this.pickerBox2.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.pickerBox2.Size = new System.Drawing.Size(84, 35);
this.pickerBox2.TabIndex = 3;
this.pickerBox2.TabStop = false;
this.pickerBox2.Value = true;
//
// label7
//
this.label7.AutoSize = true;
this.label7.BackColor = System.Drawing.Color.Transparent;
this.label7.ForeColor = System.Drawing.SystemColors.ControlText;
this.label7.Location = new System.Drawing.Point(10, 168);
this.label7.Margin = new System.Windows.Forms.Padding(0);
this.label7.Name = "label7";
this.label7.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
this.label7.Size = new System.Drawing.Size(89, 34);
this.label7.TabIndex = 184;
this.label7.Text = "Always-On-Top";
this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// label8
//
this.label8.AutoSize = true;
this.label8.BackColor = System.Drawing.Color.Transparent;
this.label8.ForeColor = System.Drawing.SystemColors.ControlText;
this.label8.Location = new System.Drawing.Point(10, 21);
this.label8.Margin = new System.Windows.Forms.Padding(0);
this.label8.Name = "label8";
this.label8.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
this.label8.Size = new System.Drawing.Size(60, 34);
this.label8.TabIndex = 186;
this.label8.Text = "Auto Save";
this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// pickerBox3
//
this.pickerBox3.AcceptButton = null;
this.pickerBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.pickerBox3.BackColor = System.Drawing.Color.Transparent;
this.pickerBox3.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.pickerBox3.Location = new System.Drawing.Point(285, 21);
this.pickerBox3.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
this.pickerBox3.Name = "pickerBox3";
this.pickerBox3.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.pickerBox3.Size = new System.Drawing.Size(84, 35);
this.pickerBox3.TabIndex = 0;
this.pickerBox3.TabStop = false;
//
// tHorizontalSeparator1
//
this.tHorizontalSeparator1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tHorizontalSeparator1.AutoScrollMargin = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator1.AutoScrollMinSize = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator1.BackColor = System.Drawing.Color.Transparent;
this.tHorizontalSeparator1.Location = new System.Drawing.Point(10, 437);
this.tHorizontalSeparator1.Margin = new System.Windows.Forms.Padding(5, 0, 5, 10);
this.tHorizontalSeparator1.MaximumSize = new System.Drawing.Size(4920, 2);
this.tHorizontalSeparator1.MinimumSize = new System.Drawing.Size(0, 22);
this.tHorizontalSeparator1.Name = "tHorizontalSeparator1";
this.tHorizontalSeparator1.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
this.tHorizontalSeparator1.Size = new System.Drawing.Size(364, 22);
this.tHorizontalSeparator1.TabIndex = 188;
this.tHorizontalSeparator1.TabStop = false;
//
// tHorizontalSeparator2
//
this.tHorizontalSeparator2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tHorizontalSeparator2.AutoScrollMargin = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator2.AutoScrollMinSize = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator2.BackColor = System.Drawing.Color.Transparent;
this.tHorizontalSeparator2.Location = new System.Drawing.Point(10, 59);
this.tHorizontalSeparator2.Margin = new System.Windows.Forms.Padding(5, 0, 5, 10);
this.tHorizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2);
this.tHorizontalSeparator2.MinimumSize = new System.Drawing.Size(0, 22);
this.tHorizontalSeparator2.Name = "tHorizontalSeparator2";
this.tHorizontalSeparator2.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
this.tHorizontalSeparator2.Size = new System.Drawing.Size(364, 22);
this.tHorizontalSeparator2.TabIndex = 190;
this.tHorizontalSeparator2.TabStop = false;
//
// tHorizontalSeparator3
//
this.tHorizontalSeparator3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tHorizontalSeparator3.AutoScrollMargin = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator3.AutoScrollMinSize = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator3.BackColor = System.Drawing.Color.Transparent;
this.tHorizontalSeparator3.Location = new System.Drawing.Point(10, 206);
this.tHorizontalSeparator3.Margin = new System.Windows.Forms.Padding(5, 0, 5, 10);
this.tHorizontalSeparator3.MaximumSize = new System.Drawing.Size(4920, 2);
this.tHorizontalSeparator3.MinimumSize = new System.Drawing.Size(0, 22);
this.tHorizontalSeparator3.Name = "tHorizontalSeparator3";
this.tHorizontalSeparator3.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
this.tHorizontalSeparator3.Size = new System.Drawing.Size(364, 22);
this.tHorizontalSeparator3.TabIndex = 191;
this.tHorizontalSeparator3.TabStop = false;
// //
// textBox1 // textBox1
// //
textBox1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; this.textBox1.AcceptButton = null;
textBox1.BackColor = System.Drawing.Color.Transparent; this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
textBox1.ClearedValue = "{0}"; | System.Windows.Forms.AnchorStyles.Right)));
textBox1.EnableReactiveVisual = true; this.textBox1.BackColor = System.Drawing.Color.Transparent;
textBox1.Font = new System.Drawing.Font("Segoe UI", 9F); this.textBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
textBox1.Icon = "O"; this.textBox1.Location = new System.Drawing.Point(192, 234);
textBox1.IconSize = 13F; this.textBox1.Margin = new System.Windows.Forms.Padding(10, 0, 0, 10);
textBox1.Location = new System.Drawing.Point(161, 21); this.textBox1.Name = "textBox1";
textBox1.Name = "textBox1"; this.textBox1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
textBox1.Size = new System.Drawing.Size(230, 32); this.textBox1.ReadOnly = false;
textBox1.TabIndex = 203; this.textBox1.Size = new System.Drawing.Size(177, 35);
textBox1.TabStop = false; this.textBox1.TabIndex = 4;
textBox1.UseSystemPasswordChar = false; this.textBox1.TabStop = false;
this.textBox1.UseSystemPasswordChar = false;
//
// pickerBox4
//
this.pickerBox4.AcceptButton = null;
this.pickerBox4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.pickerBox4.BackColor = System.Drawing.Color.Transparent;
this.pickerBox4.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.pickerBox4.Location = new System.Drawing.Point(285, 279);
this.pickerBox4.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
this.pickerBox4.Name = "pickerBox4";
this.pickerBox4.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.pickerBox4.Size = new System.Drawing.Size(84, 35);
this.pickerBox4.TabIndex = 5;
this.pickerBox4.TabStop = false;
this.pickerBox4.Value = true;
//
// label2
//
this.label2.AutoSize = true;
this.label2.BackColor = System.Drawing.Color.Transparent;
this.label2.ForeColor = System.Drawing.SystemColors.ControlText;
this.label2.Location = new System.Drawing.Point(10, 279);
this.label2.Margin = new System.Windows.Forms.Padding(0);
this.label2.Name = "label2";
this.label2.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
this.label2.Size = new System.Drawing.Size(95, 34);
this.label2.TabIndex = 193;
this.label2.Text = "Ignore SSL Errors";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// pickerBox5
//
this.pickerBox5.AcceptButton = null;
this.pickerBox5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.pickerBox5.BackColor = System.Drawing.Color.Transparent;
this.pickerBox5.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.pickerBox5.Location = new System.Drawing.Point(285, 85);
this.pickerBox5.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
this.pickerBox5.Name = "pickerBox5";
this.pickerBox5.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.pickerBox5.Size = new System.Drawing.Size(84, 35);
this.pickerBox5.TabIndex = 1;
this.pickerBox5.TabStop = false;
this.pickerBox5.Value = true;
// //
// label3 // label3
// //
label3.AutoSize = true; this.label3.AutoSize = true;
label3.BackColor = System.Drawing.Color.Transparent; this.label3.BackColor = System.Drawing.Color.Transparent;
label3.ForeColor = System.Drawing.SystemColors.ControlText; this.label3.ForeColor = System.Drawing.SystemColors.ControlText;
label3.Location = new System.Drawing.Point(1, 21); this.label3.Location = new System.Drawing.Point(10, 85);
label3.Margin = new Padding(0); this.label3.Margin = new System.Windows.Forms.Padding(0);
label3.Name = "label3"; this.label3.Name = "label3";
label3.Padding = new Padding(0, 8, 0, 0); this.label3.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
label3.Size = new System.Drawing.Size(88, 23); this.label3.Size = new System.Drawing.Size(112, 34);
label3.TabIndex = 199; this.label3.TabIndex = 195;
label3.Text = "Run Command"; this.label3.Text = "Show Toolbar Menu";
label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// dialogFooter1
//
dialogFooter1.BackColor = System.Drawing.Color.FromArgb(240, 240, 240);
dialogFooter1.Button1Text = "&Save";
dialogFooter1.Dialog = this;
dialogFooter1.Dock = DockStyle.Bottom;
dialogFooter1.Location = new System.Drawing.Point(0, 437);
dialogFooter1.Name = "dialogFooter1";
dialogFooter1.Size = new System.Drawing.Size(444, 84);
// //
// OptionsForm // OptionsForm
// //
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
BackColor = System.Drawing.Color.White; this.ClientSize = new System.Drawing.Size(384, 521);
ClientSize = new System.Drawing.Size(444, 521); this.Controls.Add(this.pickerBox5);
Controls.Add(dialogFooter1); this.Controls.Add(this.label3);
Controls.Add(flowLayoutPanel1); this.Controls.Add(this.pickerBox4);
MinimumSize = new System.Drawing.Size(460, 560); this.Controls.Add(this.label2);
Name = "OptionsForm"; this.Controls.Add(this.textBox1);
Text = "Options"; this.Controls.Add(this.tHorizontalSeparator3);
flowLayoutPanel1.ResumeLayout(false); this.Controls.Add(this.tHorizontalSeparator2);
panel1.ResumeLayout(false); this.Controls.Add(this.tHorizontalSeparator1);
panel1.PerformLayout(); this.Controls.Add(this.pickerBox3);
panel2.ResumeLayout(false); this.Controls.Add(this.label8);
panel2.PerformLayout(); this.Controls.Add(this.pickerBox2);
panel3.ResumeLayout(false); this.Controls.Add(this.label7);
panel3.PerformLayout(); this.Controls.Add(this.pickerBox1);
ResumeLayout(false); this.Controls.Add(this.label6);
this.Controls.Add(this.button1);
this.Controls.Add(this.label1);
this.MinimumSize = new System.Drawing.Size(400, 560);
this.Name = "OptionsForm";
this.Text = "Options";
this.ResumeLayout(false);
this.PerformLayout();
} }
protected override void OnLoad(EventArgs e) protected override void OnShown(EventArgs e)
{ {
base.OnLoad(e); base.OnShown(e);
flowLayoutPanel1_Resize(null, e); if (parentForm == null)
}
private void flowLayoutPanel1_Resize(object sender, EventArgs e)
{
var width = flowLayoutPanel1.ClientRectangle.Width - SystemInformation.VerticalScrollBarWidth;
foreach (var item in flowLayoutPanel1.Controls.OfType<Control>())
{ {
item.Width = width; return;
} }
if (parentForm.CurrentSession == null)
{
return;
}
pickerBox3.ComboBox.SelectedIndex = (int)parentForm.CurrentSession.AutoSave;
pickerBox1.Value = parentForm.CurrentSession.EnableAutoPosition;
pickerBox2.Value = parentForm.CurrentSession.AlwaysOnTop;
textBox1.Text = parentForm.CurrentSession.RunCommand ?? string.Empty;
pickerBox4.Value = parentForm.CurrentSession.IgnoreSSL;
pickerBox5.Value = parentForm.CurrentSession.ShowToolbar;
} }
public AppOptions Result private void button1_MouseClick(object sender, MouseEventArgs e)
{ {
get if (parentForm != null)
{ {
if (_appSession == null) if (parentForm.CurrentSession == null) parentForm.CurrentSession = new AppSession();
{
_appSession = new AppOptions();
}
_appSession.RestorePosition = yesNoPickerBox1.Value; parentForm.CurrentSession.AutoSave = (AppSession.AutoSaveOption)pickerBox3.ComboBox.SelectedIndex;
parentForm.CurrentSession.EnableAutoPosition = pickerBox1.Value;
_appSession.AlwaysOnTop = yesNoPickerBox2.Value; parentForm.CurrentSession.AlwaysOnTop = pickerBox2.Value;
parentForm.CurrentSession.RunCommand = textBox1.Text?.Trim();
_appSession.RunCommand = textBox1.Text ?? string.Empty; parentForm.CurrentSession.IgnoreSSL = pickerBox4.Value;
parentForm.CurrentSession.ShowToolbar = pickerBox5.Value;
return _appSession;
} }
this.DialogResult = DialogResult.OK;
this.Close();
} }
} }

View File

@ -1,64 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <root>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">

147
PasswordForm.cs Normal file
View File

@ -0,0 +1,147 @@
using RyzStudio.Windows.ThemedForms;
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace FizzyLauncher
{
public class PasswordForm : TDialogForm
{
private System.Windows.Forms.Label label1;
private TButton button1;
private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator1;
private TTextBox textBox1;
public PasswordForm()
{
InitializeComponent();
textBox1.TextBox.MaxLength = 255;
textBox1.PreviewKeyDown += textBox1_PreviewKeyDown;
}
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
this.tHorizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator();
this.textBox1 = new RyzStudio.Windows.ThemedForms.TTextBox();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.BackColor = System.Drawing.Color.Transparent;
this.label1.ForeColor = System.Drawing.SystemColors.ControlText;
this.label1.Location = new System.Drawing.Point(10, 21);
this.label1.Margin = new System.Windows.Forms.Padding(0);
this.label1.Name = "label1";
this.label1.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
this.label1.Size = new System.Drawing.Size(57, 34);
this.label1.TabIndex = 153;
this.label1.Text = "Password";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// button1
//
this.button1.ActiveImage = null;
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.button1.BackColor = System.Drawing.Color.Transparent;
this.button1.HoverImage = null;
this.button1.IdleImage = null;
this.button1.LabelText = "&OK";
this.button1.Location = new System.Drawing.Point(321, 99);
this.button1.Margin = new System.Windows.Forms.Padding(10, 0, 0, 10);
this.button1.Name = "button1";
this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.button1.Size = new System.Drawing.Size(128, 32);
this.button1.TabIndex = 1;
this.button1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.button1_MouseClick);
//
// tHorizontalSeparator1
//
this.tHorizontalSeparator1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tHorizontalSeparator1.AutoScrollMargin = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator1.AutoScrollMinSize = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator1.BackColor = System.Drawing.Color.Transparent;
this.tHorizontalSeparator1.Location = new System.Drawing.Point(10, 67);
this.tHorizontalSeparator1.Margin = new System.Windows.Forms.Padding(5, 0, 5, 10);
this.tHorizontalSeparator1.MaximumSize = new System.Drawing.Size(4920, 2);
this.tHorizontalSeparator1.MinimumSize = new System.Drawing.Size(0, 22);
this.tHorizontalSeparator1.Name = "tHorizontalSeparator1";
this.tHorizontalSeparator1.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
this.tHorizontalSeparator1.Size = new System.Drawing.Size(444, 22);
this.tHorizontalSeparator1.TabIndex = 188;
this.tHorizontalSeparator1.TabStop = false;
//
// textBox1
//
this.textBox1.AcceptButton = this.button1;
this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.textBox1.BackColor = System.Drawing.Color.Transparent;
this.textBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.textBox1.Location = new System.Drawing.Point(121, 20);
this.textBox1.Margin = new System.Windows.Forms.Padding(10, 0, 0, 10);
this.textBox1.Name = "textBox1";
this.textBox1.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9);
this.textBox1.ReadOnly = false;
this.textBox1.Size = new System.Drawing.Size(328, 35);
this.textBox1.TabIndex = 0;
this.textBox1.UseSystemPasswordChar = true;
//
// PasswordForm
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(464, 151);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.tHorizontalSeparator1);
this.Controls.Add(this.button1);
this.Controls.Add(this.label1);
this.MinimumSize = new System.Drawing.Size(480, 190);
this.Name = "PasswordForm";
this.Text = "Password";
this.ResumeLayout(false);
this.PerformLayout();
}
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
textBox1.Focus();
}
[Browsable(false)]
public string Password => textBox1.Text;
private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Enter:
button1_MouseClick(sender, new MouseEventArgs(MouseButtons.Left, 1, 0, 0, 0));
break;
case Keys.Escape:
this.Close();
break;
default: break;
}
}
private void button1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.DialogResult = DialogResult.OK;
this.Close();
}
}
}
}

60
PasswordForm.resx Normal file
View File

@ -0,0 +1,60 @@
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

Binary file not shown.

View File

@ -0,0 +1,75 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v6.0/win-x64",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v6.0": {},
".NETCoreApp,Version=v6.0/win-x64": {
"Ryz3core/0.1.5.035": {
"dependencies": {
"HtmlAgilityPack": "1.11.46",
"System.Data.SQLite.Core": "1.0.117"
},
"runtime": {
"Ryz3core.dll": {}
}
},
"HtmlAgilityPack/1.11.46": {
"runtime": {
"lib/netstandard2.0/HtmlAgilityPack.dll": {
"assemblyVersion": "1.11.46.0",
"fileVersion": "1.11.46.0"
}
}
},
"Stub.System.Data.SQLite.Core.NetStandard/1.0.117": {
"runtime": {
"lib/netstandard2.1/System.Data.SQLite.dll": {
"assemblyVersion": "1.0.117.0",
"fileVersion": "1.0.117.0"
}
},
"native": {
"runtimes/win-x64/native/SQLite.Interop.dll": {
"fileVersion": "1.0.117.0"
}
}
},
"System.Data.SQLite.Core/1.0.117": {
"dependencies": {
"Stub.System.Data.SQLite.Core.NetStandard": "1.0.117"
}
}
}
},
"libraries": {
"Ryz3core/0.1.5.035": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"HtmlAgilityPack/1.11.46": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dLMn4EVfJBHWmWK4Uh0XGD76FPLHI0qr2Tm0s1m/xmgiHb1JUb9zB8AzO8HtrkBBlMN6JfCUBYddhqC0hZNR+g==",
"path": "htmlagilitypack/1.11.46",
"hashPath": "htmlagilitypack.1.11.46.nupkg.sha512"
},
"Stub.System.Data.SQLite.Core.NetStandard/1.0.117": {
"type": "package",
"serviceable": true,
"sha512": "sha512-x1zzPC/A4MmiKGDLoxLE6O5KLu7Kz7dyzhPQzlqYFTFcXmXAtM7hNNWpGw5yLEz833AnGbd/kxoitXArgR4YyA==",
"path": "stub.system.data.sqlite.core.netstandard/1.0.117",
"hashPath": "stub.system.data.sqlite.core.netstandard.1.0.117.nupkg.sha512"
},
"System.Data.SQLite.Core/1.0.117": {
"type": "package",
"serviceable": true,
"sha512": "sha512-lGfOhA3QQod9XhdWYqLgNgbgq5uZnVG6DtnhDAdPisbLpTTgZBNbeGnp+GWt8C+3EyaqBYTGJWXcxHlHKwo05A==",
"path": "system.data.sqlite.core/1.0.117",
"hashPath": "system.data.sqlite.core.1.0.117.nupkg.sha512"
}
}
}

BIN
References/Ryz3core.dll Normal file

Binary file not shown.

BIN
References/Ryz3ui.dll Normal file

Binary file not shown.

BIN
References/RyzStudio3.dll Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

56
RyzStudio/IO/FileType.cs Normal file
View File

@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace RyzStudio.IO
{
public class FileType
{
protected static readonly byte[] BMP = { 66, 77 };
protected static readonly byte[] GIF = { 71, 73, 70, 56 };
protected static readonly byte[] ICO = { 0, 0, 1, 0 };
protected static readonly byte[] JPG = { 255, 216, 255 };
protected static readonly byte[] PNG = { 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82 };
public static bool IsImage(byte[] byteArray)
{
if (byteArray == null)
{
return false;
}
if (byteArray.Length <= 0)
{
return false;
}
if (byteArray.Take(2).SequenceEqual(BMP))
{
return true;
}
if (byteArray.Take(4).SequenceEqual(GIF))
{
return true;
}
if (byteArray.Take(4).SequenceEqual(ICO))
{
return true;
}
if (byteArray.Take(3).SequenceEqual(JPG))
{
return true;
}
if (byteArray.Take(16).SequenceEqual(PNG))
{
return true;
}
return false;
}
}
}

241
RyzStudio/IO/SharpZipLib.cs Normal file
View File

@ -0,0 +1,241 @@
using System;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
namespace RyzStudio.IO
{
public class SharpZipLib
{
public static bool IsZipEncrypted(string filename)
{
bool rv = false;
try
{
ZipInputStream readStream = new ZipInputStream(System.IO.File.OpenRead(filename));
ZipEntry theEntry = null;
while ((theEntry = readStream.GetNextEntry()) != null)
{
if (theEntry.IsCrypted)
{
rv = true;
}
break;
}
readStream.Close();
readStream.Dispose();
readStream = null;
}
catch
{
// do nothing
}
return rv;
}
//public static void AddFile(ZipOutputStream zipStream, string filename, string prefixPath = null)
//{
// byte[] buffer = new byte[4096];
// string f1 = "";
// if (prefixPath != null)
// {
// f1 = Path.GetDirectoryName(filename).TrimEnd('\\') + "\\";
// f1 = f1.Replace(prefixPath, "").TrimEnd('\\') + "\\";
// f1 = f1 + Path.GetFileName(filename);
// f1 = f1.TrimStart('\\');
// }
// ZipEntry entry = new ZipEntry(f1);
// entry.DateTime = DateTime.Now;
// zipStream.PutNextEntry(entry);
// FileStream fs = File.OpenRead(filename);
// int sourceBytes;
// do
// {
// sourceBytes = fs.Read(buffer, 0, buffer.Length);
// zipStream.Write(buffer, 0, sourceBytes);
// }
// while (sourceBytes > 0);
//}
//public static void AddFolder(ZipOutputStream zipstream, string folderpath, string prefixpath = null)
//{
// foreach (string fn in Directory.GetFiles(folderpath, "*.*", System.IO.SearchOption.AllDirectories))
// {
// AddFile(zipstream, fn, prefixpath);
// }
//}
public static string ReadSingle(string filename, string password, string entryFilename)
{
string rv = null;
int size = 2048;
byte[] buffer = new byte[size];
int bufferSize = 0;
ZipEntry readEntry = null;
try
{
ZipInputStream readStream = new ZipInputStream(File.OpenRead(filename));
readStream.Password = password;
while (true)
{
readEntry = readStream.GetNextEntry();
if (readEntry == null)
{
break;
}
if (string.IsNullOrWhiteSpace(readEntry.Name))
{
continue;
}
if (!readEntry.IsFile)
{
continue;
}
if (!readEntry.Name.Equals(entryFilename))
{
continue;
}
MemoryStream ms = new MemoryStream();
buffer = new byte[size];
bufferSize = 0;
do
{
bufferSize = readStream.Read(buffer, 0, buffer.Length);
ms.Write(buffer, 0, bufferSize);
}
while (bufferSize > 0);
ms.Position = 0;
StreamReader sr = new StreamReader(ms);
rv = sr.ReadToEnd();
break;
}
readStream.Flush();
readStream.Close();
readStream.Dispose();
readStream = null;
}
catch (Exception)
{
return rv;
}
return rv;
}
public static bool TestArchive(string filename, string password = null)
{
if (string.IsNullOrWhiteSpace(filename))
{
return false;
}
if (!File.Exists(filename))
{
return false;
}
ZipEntry readEntry = null;
try
{
ZipInputStream readStream = new ZipInputStream(System.IO.File.OpenRead(filename));
readStream.Password = password;
while (true)
{
readEntry = readStream.GetNextEntry();
if (readEntry == null)
{
break;
}
//break;
}
readStream.Close();
readStream.Dispose();
readStream = null;
}
catch (Exception)
{
return false;
}
return true;
}
public static bool CreateSingle(string filename, string password, string entryFilename, string content)
{
int size = 2048;
byte[] buffer = new byte[size];
int bufferSize = 0;
try
{
ZipOutputStream zipStream = new ZipOutputStream(File.Create(filename));
zipStream.SetLevel(9);
zipStream.Password = password;
// stream
MemoryStream ms = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(content));
ms.Position = 0;
// write file entry
zipStream.PutNextEntry(new ZipEntry(entryFilename));
buffer = new byte[size];
bufferSize = 0;
do
{
bufferSize = ms.Read(buffer, 0, buffer.Length);
zipStream.Write(buffer, 0, bufferSize);
}
while (bufferSize > 0);
ms.Flush();
ms.Close();
ms.Dispose();
ms = null;
zipStream.Finish();
zipStream.Flush();
zipStream.Close();
zipStream.Dispose();
zipStream = null;
}
catch (Exception)
{
return false;
}
return true;
}
}
}

View File

@ -1,355 +0,0 @@
using System;
using System.Drawing;
using System.Net;
using System.Threading.Tasks;
using HtmlAgilityPack;
using RyzStudio.Net;
namespace BookmarkManager.Services
{
public class WebProvider
{
private readonly WebClientProvider _webClientProvider;
public WebProvider()
{
_webClientProvider = new WebClientProvider();
_webClientProvider.Timeout = 4;
}
public bool IgnoreSSL
{
get => _webClientProvider.IgnoreSSL;
set
{
_webClientProvider.IgnoreSSL = value;
}
}
public async Task<HtmlAgilityPack.HtmlDocument> RetrieveHtmlDocument(string url)
{
var sourceCode = await this.RetrieveSourceCode(url);
if (string.IsNullOrWhiteSpace(sourceCode))
{
return null;
}
var document = new HtmlAgilityPack.HtmlDocument();
try
{
document.LoadHtml(sourceCode);
}
catch (Exception)
{
return null;
}
return document;
}
public async Task<string> RetrieveSourceCode(string url)
{
if (string.IsNullOrWhiteSpace(url))
{
return null;
}
if (!Uri.TryCreate(url, UriKind.Absolute, out Uri uri))
{
return null;
}
System.Net.Http.HttpResponseMessage response;
try
{
response = await _webClientProvider.Get(url?.Trim());
}
catch (Exception)
{
return null;
}
if (response == null)
{
return null;
}
if (response.StatusCode != HttpStatusCode.OK)
{
return null;
}
var sourceCode = "";
try
{
sourceCode = await response?.Content?.ReadAsStringAsync();
}
catch (Exception)
{
// do nothing
}
if (string.IsNullOrWhiteSpace(sourceCode))
{
return null;
}
return sourceCode;
}
public async Task<Image> RetrieveImage(string url)
{
if (string.IsNullOrWhiteSpace(url))
{
return null;
}
if (!Uri.TryCreate(url, UriKind.Absolute, out Uri uri))
{
return null;
}
System.Net.Http.HttpResponseMessage response;
try
{
response = await _webClientProvider.Get(url?.Trim());
}
catch (Exception)
{
return null;
}
if (response.StatusCode != HttpStatusCode.OK)
{
return null;
}
var stream = await response?.Content?.ReadAsStreamAsync();
Image result = null;
try
{
result = Image.FromStream(stream);
}
catch (Exception)
{
return null;
}
return result;
}
public async Task<Image> RetrieveImage(HtmlAgilityPack.HtmlDocument document)
{
var iconUrl = this.ParseFavicon(document);
if (string.IsNullOrWhiteSpace(iconUrl))
{
return null;
}
return await this.RetrieveImage(iconUrl);
}
public string ParseTitle(HtmlAgilityPack.HtmlDocument document)
{
string result = null;
result = ParseTagValue(document, "//title", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
result = ParseTagValue_Attr(document, "//meta[@property='og:title']", "content", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
result = ParseTagValue_Attr(document, "//meta[@name='twitter:title']", "content", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
result = ParseTagValue_Attr(document, "//meta[@property='og:site_name']", "content", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
result = ParseTagValue_Attr(document, "//meta[@itemprop='name']", "content", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
return string.Empty;
}
public string ParseMetaDescription(HtmlAgilityPack.HtmlDocument document)
{
string result = null;
result = ParseTagValue_Attr(document, "//meta[@name='description']", "content", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
result = ParseTagValue_Attr(document, "//meta[@property='og:description']", "content", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
result = ParseTagValue_Attr(document, "//meta[@name='twitter:description']", "content", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
result = ParseTagValue_Attr(document, "//meta[@property='og:description']", "content", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
result = ParseTagValue_Attr(document, "//meta[@itemprop='description']", "content", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
return result;
}
public string ParseFavicon(HtmlAgilityPack.HtmlDocument document)
{
string result = null;
result = ParseTagValue_Attr(document, "//link[translate(@rel, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'shortcut icon']", "href", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
result = ParseTagValue_Attr(document, "//link[translate(@rel, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'icon']", "href", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
result = ParseTagValue_Attr(document, "//link[translate(@rel, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'apple-touch-icon']", "href", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
result = ParseTagValue_Attr(document, "//link[translate(@rel, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'apple-touch-icon-precomposed']", "href", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
result = ParseTagValue_Attr(document, "//meta[translate(@property, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'og:image']", "content", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
result = ParseTagValue_Attr(document, "//meta[translate(@name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'twitter:image']", "content", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
result = ParseTagValue_Attr(document, "//meta[translate(@property, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'og:image']", "content", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
result = ParseTagValue_Attr(document, "//meta[translate(@itemprop, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'image']", "content", string.Empty)?.Trim();
if (!string.IsNullOrWhiteSpace(result))
{
return result;
}
return "/favicon.ico";
}
private string ParseTagValue(HtmlAgilityPack.HtmlDocument document, string xPath, string defaultValue = "")
{
var hnc = document.DocumentNode.SelectNodes(xPath);
if (hnc == null)
{
return defaultValue;
}
if (hnc.Count <= 0)
{
return defaultValue;
}
foreach (HtmlNode hn in hnc)
{
if (string.IsNullOrWhiteSpace(hn.InnerHtml))
{
continue;
}
var result = WebUtility.HtmlDecode(hn.InnerHtml)?.Replace("\r", "")?.Replace("\n", " ")?.Trim();
if (string.IsNullOrWhiteSpace(result))
{
continue;
}
return result;
}
return defaultValue;
}
private string ParseTagValue_Attr(HtmlAgilityPack.HtmlDocument document, string xPath, string attr, string defaultValue = "")
{
var hnc = document.DocumentNode.SelectNodes(xPath);
if (hnc == null)
{
return defaultValue;
}
if (hnc.Count <= 0)
{
return defaultValue;
}
foreach (HtmlNode hn in hnc)
{
if (hn.Attributes[attr] == null)
{
continue;
}
if (string.IsNullOrWhiteSpace(hn.Attributes[attr].Value))
{
continue;
}
return System.Web.HttpUtility.HtmlDecode(hn.Attributes[attr].Value?.Trim());
}
return defaultValue;
}
}
}

View File

@ -1,438 +1,359 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.Drawing;
using System.Linq; using System.Net;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using BookmarkManager.Services; using BookmarkManager;
using bzit.bomg.Models; using bzit.bomg.Models;
using FizzyLauncher.Models;
using RyzStudio;
using RyzStudio.IO;
using RyzStudio.Windows.Forms; using RyzStudio.Windows.Forms;
using RyzStudio.Windows.ThemedForms; using RyzStudio.Windows.ThemedForms;
using RyzStudio.Windows.ThemedForms.PickerBox; using RyzStudio.Windows.ThemedForms.PickerBox;
namespace FizzyLauncher namespace FizzyLauncher
{ {
public class UpdateIconsForm : Form public class UpdateIconsForm : TDialogForm
{ {
private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label1;
private TButton button1;
private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator1;
private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator2; private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator2;
private Label label2; private Label label2;
private PictureBox pictureBox2; private PictureBox pictureBox2;
private ThYesNoPickerBox pickerBox1;
private ThButton button2; private ToolTip toolTip1;
private RyzStudio.Windows.ThemedForms.ThProgressBar progressBar1; private System.ComponentModel.IContainer components;
protected BookmarkTreeView bookmarkTreeView = null;
protected IconDatabase iconDatabase = null;
protected AppSession appSession = null;
protected WebParser webParser = null;
protected WebClient webClient = null;
private TYesNoPickerBox pickerBox1;
private TButton button2;
private readonly WebProvider _webProvider; private RyzStudio.Windows.ThemedForms.TProgressBar progressBar1;
private BookmarkTreeView _treeView; protected bool requestCancellation = false;
private bool _isBusy = false;
private Label label4;
private THorizontalSeparator tHorizontalSeparator3;
private ThButton button3;
private ThProgressBar progressBar2;
private RyzStudio.Windows.ThemedForms.Composite.DialogFooter dialogFooter1;
private bool _requestCancel = false;
public UpdateIconsForm(BookmarkTreeView treeView) public UpdateIconsForm(AppSession session, BookmarkTreeView treeView, IconDatabase database)
{ {
InitializeComponent(); InitializeComponent();
UISetup.Dialog(this); bookmarkTreeView = treeView;
iconDatabase = database;
appSession = session;
_webProvider = new WebProvider(); pickerBox1.ComboBox.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
_webProvider.IgnoreSSL = true;
_treeView = treeView;
} }
private void InitializeComponent() private void InitializeComponent()
{ {
label1 = new Label(); this.components = new System.ComponentModel.Container();
tHorizontalSeparator2 = new THorizontalSeparator(); this.label1 = new System.Windows.Forms.Label();
label2 = new Label(); this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
pictureBox2 = new PictureBox(); this.tHorizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator();
pickerBox1 = new ThYesNoPickerBox(); this.tHorizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator();
button2 = new ThButton(); this.label2 = new System.Windows.Forms.Label();
progressBar1 = new ThProgressBar(); this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
label4 = new Label(); this.pictureBox2 = new System.Windows.Forms.PictureBox();
tHorizontalSeparator3 = new THorizontalSeparator(); this.pickerBox1 = new RyzStudio.Windows.ThemedForms.PickerBox.TYesNoPickerBox();
button3 = new ThButton(); this.button2 = new RyzStudio.Windows.ThemedForms.TButton();
progressBar2 = new ThProgressBar(); this.progressBar1 = new RyzStudio.Windows.ThemedForms.TProgressBar();
dialogFooter1 = new RyzStudio.Windows.ThemedForms.Composite.DialogFooter(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
((ISupportInitialize)pictureBox2).BeginInit(); this.SuspendLayout();
SuspendLayout(); //
//
// label1 // label1
// //
label1.AutoSize = true; this.label1.AutoSize = true;
label1.BackColor = System.Drawing.Color.Transparent; this.label1.BackColor = System.Drawing.Color.Transparent;
label1.ForeColor = System.Drawing.SystemColors.ControlText; this.label1.ForeColor = System.Drawing.SystemColors.ControlText;
label1.Location = new System.Drawing.Point(10, 20); this.label1.Location = new System.Drawing.Point(10, 21);
label1.Margin = new Padding(0); this.label1.Margin = new System.Windows.Forms.Padding(0);
label1.Name = "label1"; this.label1.Name = "label1";
label1.Padding = new Padding(0, 8, 0, 0); this.label1.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
label1.Size = new System.Drawing.Size(156, 23); this.label1.Size = new System.Drawing.Size(133, 34);
label1.TabIndex = 153; this.label1.TabIndex = 153;
label1.Text = "Update Missing Icons (Only)"; this.label1.Text = "Find Missing Icons Only";
label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
// //
// button1
//
this.button1.AcceptButton = null;
this.button1.ActiveImage = null;
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.button1.BackColor = System.Drawing.Color.Transparent;
this.button1.HoverImage = null;
this.button1.IdleImage = null;
this.button1.LabelText = "&Close";
this.button1.Location = new System.Drawing.Point(241, 469);
this.button1.Margin = new System.Windows.Forms.Padding(10, 0, 0, 10);
this.button1.Name = "button1";
this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.button1.Size = new System.Drawing.Size(128, 32);
this.button1.TabIndex = 2;
this.button1.TabStop = false;
this.button1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.button1_MouseClick);
//
// tHorizontalSeparator1
//
this.tHorizontalSeparator1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tHorizontalSeparator1.AutoScrollMargin = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator1.AutoScrollMinSize = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator1.BackColor = System.Drawing.Color.Transparent;
this.tHorizontalSeparator1.Location = new System.Drawing.Point(10, 437);
this.tHorizontalSeparator1.Margin = new System.Windows.Forms.Padding(0, 10, 0, 10);
this.tHorizontalSeparator1.MaximumSize = new System.Drawing.Size(4920, 2);
this.tHorizontalSeparator1.MinimumSize = new System.Drawing.Size(0, 22);
this.tHorizontalSeparator1.Name = "tHorizontalSeparator1";
this.tHorizontalSeparator1.Size = new System.Drawing.Size(364, 22);
this.tHorizontalSeparator1.TabIndex = 188;
this.tHorizontalSeparator1.TabStop = false;
//
// tHorizontalSeparator2 // tHorizontalSeparator2
// //
tHorizontalSeparator2.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; this.tHorizontalSeparator2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
tHorizontalSeparator2.AutoScrollMargin = new System.Drawing.Size(0, 0); | System.Windows.Forms.AnchorStyles.Right)));
tHorizontalSeparator2.AutoScrollMinSize = new System.Drawing.Size(0, 0); this.tHorizontalSeparator2.AutoScrollMargin = new System.Drawing.Size(0, 0);
tHorizontalSeparator2.BackColor = System.Drawing.Color.Transparent; this.tHorizontalSeparator2.AutoScrollMinSize = new System.Drawing.Size(0, 0);
tHorizontalSeparator2.Location = new System.Drawing.Point(10, 64); this.tHorizontalSeparator2.BackColor = System.Drawing.Color.Transparent;
tHorizontalSeparator2.Margin = new Padding(0, 10, 0, 0); this.tHorizontalSeparator2.Location = new System.Drawing.Point(10, 59);
tHorizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2); this.tHorizontalSeparator2.Margin = new System.Windows.Forms.Padding(0, 10, 0, 10);
tHorizontalSeparator2.MinimumSize = new System.Drawing.Size(0, 22); this.tHorizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2);
tHorizontalSeparator2.Name = "tHorizontalSeparator2"; this.tHorizontalSeparator2.MinimumSize = new System.Drawing.Size(0, 22);
tHorizontalSeparator2.Size = new System.Drawing.Size(424, 22); this.tHorizontalSeparator2.Name = "tHorizontalSeparator2";
tHorizontalSeparator2.TabIndex = 190; this.tHorizontalSeparator2.Size = new System.Drawing.Size(364, 22);
tHorizontalSeparator2.TabStop = false; this.tHorizontalSeparator2.TabIndex = 190;
// this.tHorizontalSeparator2.TabStop = false;
//
// label2 // label2
// //
label2.AutoSize = true; this.label2.AutoSize = true;
label2.BackColor = System.Drawing.Color.Transparent; this.label2.BackColor = System.Drawing.Color.Transparent;
label2.ForeColor = System.Drawing.SystemColors.ControlText; this.label2.ForeColor = System.Drawing.SystemColors.ControlText;
label2.Location = new System.Drawing.Point(10, 136); this.label2.Location = new System.Drawing.Point(10, 85);
label2.Margin = new Padding(0); this.label2.Margin = new System.Windows.Forms.Padding(0);
label2.Name = "label2"; this.label2.Name = "label2";
label2.Padding = new Padding(0, 8, 0, 0); this.label2.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
label2.Size = new System.Drawing.Size(231, 23); this.label2.Size = new System.Drawing.Size(52, 34);
label2.TabIndex = 195; this.label2.TabIndex = 195;
label2.Text = "Retrieve supported icons from bookmarks."; this.label2.Text = "Progress";
label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
// //
// pictureBox2 // pictureBox2
// //
pictureBox2.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; this.pictureBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
pictureBox2.BackColor = System.Drawing.Color.Transparent; this.pictureBox2.BackColor = System.Drawing.Color.Transparent;
pictureBox2.ErrorImage = null; this.pictureBox2.ErrorImage = null;
pictureBox2.InitialImage = null; this.pictureBox2.InitialImage = null;
pictureBox2.Location = new System.Drawing.Point(402, 294); this.pictureBox2.Location = new System.Drawing.Point(196, 469);
pictureBox2.Name = "pictureBox2"; this.pictureBox2.Name = "pictureBox2";
pictureBox2.Size = new System.Drawing.Size(32, 32); this.pictureBox2.Size = new System.Drawing.Size(32, 32);
pictureBox2.SizeMode = PictureBoxSizeMode.CenterImage; this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
pictureBox2.TabIndex = 202; this.pictureBox2.TabIndex = 202;
pictureBox2.TabStop = false; this.pictureBox2.TabStop = false;
// //
// pickerBox1 // pickerBox1
// //
pickerBox1.Anchor = AnchorStyles.Top | AnchorStyles.Right; this.pickerBox1.AcceptButton = null;
pickerBox1.BackColor = System.Drawing.Color.Transparent; this.pickerBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
pickerBox1.EnableReactiveVisual = true; this.pickerBox1.BackColor = System.Drawing.Color.Transparent;
pickerBox1.Font = new System.Drawing.Font("Segoe UI", 9F); this.pickerBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
pickerBox1.Location = new System.Drawing.Point(350, 20); this.pickerBox1.Location = new System.Drawing.Point(285, 21);
pickerBox1.Name = "pickerBox1"; this.pickerBox1.Margin = new System.Windows.Forms.Padding(10, 10, 10, 0);
pickerBox1.SelectedIndex = 1; this.pickerBox1.Name = "pickerBox1";
pickerBox1.Size = new System.Drawing.Size(84, 35); this.pickerBox1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
pickerBox1.TabIndex = 0; this.pickerBox1.SelectedIndex = 1;
pickerBox1.TabStop = false; this.pickerBox1.Size = new System.Drawing.Size(84, 35);
pickerBox1.Value = true; this.pickerBox1.TabIndex = 0;
// this.pickerBox1.TabStop = false;
this.pickerBox1.Value = true;
//
// button2 // button2
// //
button2.ActiveImage = null; this.button2.AcceptButton = null;
button2.Anchor = AnchorStyles.Top | AnchorStyles.Right; this.button2.ActiveImage = null;
button2.BackColor = System.Drawing.Color.Transparent; this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
button2.EnableMenuOnClick = false; this.button2.BackColor = System.Drawing.Color.Transparent;
button2.EnableReactiveVisual = true; this.button2.HoverImage = null;
button2.HoverImage = null; this.button2.IdleImage = null;
button2.IdleImage = null; this.button2.LabelText = "&Run";
button2.LabelText = "&Run"; this.button2.Location = new System.Drawing.Point(241, 168);
button2.Location = new System.Drawing.Point(306, 136); this.button2.Margin = new System.Windows.Forms.Padding(10, 0, 0, 10);
button2.Name = "button2"; this.button2.Name = "button2";
button2.Size = new System.Drawing.Size(128, 32); this.button2.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
button2.TabIndex = 1; this.button2.Size = new System.Drawing.Size(128, 32);
button2.TabStop = false; this.button2.TabIndex = 1;
button2.MouseClick += button2_MouseClick; this.button2.TabStop = false;
// this.button2.MouseClick += new System.Windows.Forms.MouseEventHandler(this.button2_MouseClick);
//
// progressBar1 // progressBar1
// //
progressBar1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; this.progressBar1.AcceptButton = null;
progressBar1.BackColor = System.Drawing.Color.Transparent; this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
progressBar1.BarColour = System.Drawing.Color.FromArgb(79, 202, 130); | System.Windows.Forms.AnchorStyles.Right)));
progressBar1.BarTextColour = System.Drawing.Color.Black; this.progressBar1.BackColor = System.Drawing.Color.Transparent;
progressBar1.EnableReactiveVisual = false; this.progressBar1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
progressBar1.Font = new System.Drawing.Font("Segoe UI", 9F); this.progressBar1.Location = new System.Drawing.Point(10, 119);
progressBar1.Location = new System.Drawing.Point(10, 96); this.progressBar1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
progressBar1.Maximum = 100; this.progressBar1.Name = "progressBar1";
progressBar1.Minimum = 0; this.progressBar1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
progressBar1.Name = "progressBar1"; this.progressBar1.Size = new System.Drawing.Size(359, 33);
progressBar1.ProgressText = "50/100"; this.progressBar1.TabIndex = 206;
progressBar1.ShowProgressText = true; this.progressBar1.TabStop = false;
progressBar1.Size = new System.Drawing.Size(424, 20); //
progressBar1.TabIndex = 206;
progressBar1.TabStop = false;
progressBar1.Value = 50;
//
// label4
//
label4.AutoSize = true;
label4.BackColor = System.Drawing.Color.Transparent;
label4.ForeColor = System.Drawing.SystemColors.ControlText;
label4.Location = new System.Drawing.Point(10, 250);
label4.Margin = new Padding(0);
label4.Name = "label4";
label4.Padding = new Padding(0, 8, 0, 0);
label4.Size = new System.Drawing.Size(83, 23);
label4.TabIndex = 208;
label4.Text = "Clear all icons.";
label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// tHorizontalSeparator3
//
tHorizontalSeparator3.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
tHorizontalSeparator3.AutoScrollMargin = new System.Drawing.Size(0, 0);
tHorizontalSeparator3.AutoScrollMinSize = new System.Drawing.Size(0, 0);
tHorizontalSeparator3.BackColor = System.Drawing.Color.Transparent;
tHorizontalSeparator3.Location = new System.Drawing.Point(10, 178);
tHorizontalSeparator3.Margin = new Padding(0, 10, 0, 0);
tHorizontalSeparator3.MaximumSize = new System.Drawing.Size(4920, 2);
tHorizontalSeparator3.MinimumSize = new System.Drawing.Size(0, 22);
tHorizontalSeparator3.Name = "tHorizontalSeparator3";
tHorizontalSeparator3.Size = new System.Drawing.Size(424, 22);
tHorizontalSeparator3.TabIndex = 207;
tHorizontalSeparator3.TabStop = false;
//
// button3
//
button3.ActiveImage = null;
button3.BackColor = System.Drawing.Color.Transparent;
button3.EnableMenuOnClick = false;
button3.EnableReactiveVisual = true;
button3.HoverImage = null;
button3.IdleImage = null;
button3.LabelText = "Clear &All";
button3.Location = new System.Drawing.Point(306, 250);
button3.Name = "button3";
button3.Size = new System.Drawing.Size(128, 32);
button3.TabIndex = 209;
button3.TabStop = false;
button3.MouseClick += button3_MouseClick;
//
// progressBar2
//
progressBar2.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
progressBar2.BackColor = System.Drawing.Color.Transparent;
progressBar2.BarColour = System.Drawing.Color.FromArgb(79, 193, 203);
progressBar2.BarTextColour = System.Drawing.Color.Black;
progressBar2.EnableReactiveVisual = false;
progressBar2.Font = new System.Drawing.Font("Segoe UI", 9F);
progressBar2.Location = new System.Drawing.Point(10, 210);
progressBar2.Maximum = 100;
progressBar2.Minimum = 0;
progressBar2.Name = "progressBar2";
progressBar2.ProgressText = "50/100";
progressBar2.ShowProgressText = true;
progressBar2.Size = new System.Drawing.Size(424, 20);
progressBar2.TabIndex = 210;
progressBar2.TabStop = false;
progressBar2.Value = 50;
//
// dialogFooter1
//
dialogFooter1.BackColor = System.Drawing.Color.FromArgb(240, 240, 240);
dialogFooter1.Button1Text = "&Close";
dialogFooter1.Dialog = null;
dialogFooter1.Dock = DockStyle.Bottom;
dialogFooter1.Location = new System.Drawing.Point(0, 437);
dialogFooter1.Name = "dialogFooter1";
dialogFooter1.Size = new System.Drawing.Size(444, 84);
//
// UpdateIconsForm // UpdateIconsForm
// //
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
BackColor = System.Drawing.Color.White; this.ClientSize = new System.Drawing.Size(384, 521);
ClientSize = new System.Drawing.Size(444, 521); this.Controls.Add(this.progressBar1);
Controls.Add(dialogFooter1); this.Controls.Add(this.button2);
Controls.Add(progressBar2); this.Controls.Add(this.pickerBox1);
Controls.Add(button3); this.Controls.Add(this.pictureBox2);
Controls.Add(label4); this.Controls.Add(this.label2);
Controls.Add(tHorizontalSeparator3); this.Controls.Add(this.tHorizontalSeparator2);
Controls.Add(progressBar1); this.Controls.Add(this.tHorizontalSeparator1);
Controls.Add(button2); this.Controls.Add(this.button1);
Controls.Add(pickerBox1); this.Controls.Add(this.label1);
Controls.Add(pictureBox2); this.KeyPreview = true;
Controls.Add(label2); this.MinimumSize = new System.Drawing.Size(400, 560);
Controls.Add(tHorizontalSeparator2); this.Name = "UpdateIconsForm";
Controls.Add(label1); this.Text = "Update Icons";
KeyPreview = true; ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
MinimumSize = new System.Drawing.Size(460, 560); this.ResumeLayout(false);
Name = "UpdateIconsForm"; this.PerformLayout();
Text = "Update Icons";
((ISupportInitialize)pictureBox2).EndInit();
ResumeLayout(false);
PerformLayout();
} }
protected override void OnLoad(EventArgs e) protected override void OnLoad(EventArgs e)
{ {
base.OnLoad(e); base.OnLoad(e);
var model = _treeView.ToNodeList<BookmarkModel>(); comboBox1_SelectedIndexChanged(null, null);
if (pickerBox1.Value)
{
model = model.Where(x => x.Value.Icon == null)?.ToList() ?? new List<KeyValuePair<TreeNode, BookmarkModel>>();
}
progressBar1.Minimum = 0;
progressBar1.Value = 0;
progressBar1.Maximum = model.Count;
progressBar2.Minimum = 0;
progressBar2.Value = 0;
progressBar2.Maximum = model.Count;
pickerBox1.Focus();
}
protected override void OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
if (this.IsBusy)
{
e.Cancel = true;
}
} }
protected bool IsBusy protected new bool IsBusy
{ {
get => _isBusy; get => base.IsBusy;
set set
{ {
_isBusy = value; base.IsBusy = value;
UIControl.SetValue(pictureBox2, (this.IsBusy ? UIResource1.loading_block : null));
UIControl.SetEnable(pickerBox1, !this.IsBusy); UIControl.SetEnable(pickerBox1, !this.IsBusy);
UIControl.Invoke(button2, (x) => button2.LabelText = (this.IsBusy ? "&Stop" : "&Run");
{
button2.LabelText = (this.IsBusy ? "&Stop" : "&Run");
});
UIControl.Invoke(button3, (x) =>
{
button3.LabelText = (this.IsBusy ? "&Stop" : "Clear &All");
});
UIControl.SetValue(pictureBox2, (this.IsBusy ? RyzStudio.Windows.ThemedForms.Resource2.loading_block : null));
} }
} }
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (IsBusy)
{
return;
}
List<BookmarkItem> bookmarkList = GetBookmarkFilteredList();
progressBar1.ProgressBar.Reset(bookmarkList.Count);
}
private async void button2_MouseClick(object sender, MouseEventArgs e) private async void button2_MouseClick(object sender, MouseEventArgs e)
{
await Task.Run(async () =>
{
if (this.IsBusy)
{
_requestCancel = true;
return;
}
this.IsBusy = true;
var model = _treeView.ToNodeList<BookmarkModel>();
if (pickerBox1.Value)
{
model = model.Where(x => x.Value.Icon == null)?.ToList() ?? new List<KeyValuePair<TreeNode, BookmarkModel>>();
}
progressBar1.Minimum = 0;
progressBar1.Value = 0;
progressBar1.Maximum = model.Count;
foreach (var item in model)
{
progressBar1.Value++;
if (string.IsNullOrWhiteSpace(item.Value.Address))
{
continue;
}
if (_requestCancel)
{
break;
}
var document = await _webProvider.RetrieveHtmlDocument(item.Value.Address);
if (document == null)
{
continue;
}
if (_requestCancel)
{
break;
}
var image = await _webProvider.RetrieveImage(document);
if (image == null)
{
continue;
}
var newModel = item.Value;
newModel.Icon = image;
_treeView.UpdateNode(item.Key, newModel);
}
_requestCancel = false;
this.IsBusy = false;
});
}
private async void button3_MouseClick(object sender, MouseEventArgs e)
{ {
await Task.Run(() => await Task.Run(() =>
{ {
if (this.IsBusy) if (IsBusy)
{ {
_requestCancel = true; requestCancellation = true;
return; return;
} }
this.IsBusy = true; IsBusy = true;
var model = _treeView.ToNodeList<BookmarkModel>(); WebParser webParser = new WebParser();
List<BookmarkItem> bookmarkList = GetBookmarkFilteredList();
progressBar2.Minimum = 0; progressBar1.ProgressBar.Reset(bookmarkList.Count);
progressBar2.Value = 0;
progressBar2.Maximum = model.Count;
foreach (var item in model) for (int i=0; i<bookmarkList.Count; i++)
{ {
progressBar2.Value++; progressBar1.ProgressBar.Value = (i + 1);
if (item.Value.Icon == null) if (requestCancellation) break;
BookmarkItem item = bookmarkList[i];
BookmarkResult result = webParser.RetrieveDetails(item.SiteAddress, appSession.IgnoreSSL);
if (result == null)
{ {
continue; continue;
} }
if (_requestCancel) if (string.IsNullOrWhiteSpace(result.IconURL))
{ {
break; continue;
} }
var newModel = item.Value; if (requestCancellation) break;
newModel.Icon = null;
_treeView.UpdateNode(item.Key, newModel); Image favicon = webParser.RetrieveImage(result.IconURL);
if (favicon == null)
{
continue;
}
iconDatabase.AddIcon(item.ToHash(), favicon);
} }
_requestCancel = false; IsBusy = false;
requestCancellation = false;
this.IsBusy = false;
}); });
} }
private void button1_MouseClick(object sender, MouseEventArgs e)
{
this.DialogResult = DialogResult.OK;
this.Close();
}
protected List<BookmarkItem> GetBookmarkFilteredList()
{
List<BookmarkItem> rs = bookmarkTreeView.GetBookmarkList();
// remove empty
for (int i = 0; i < rs.Count; i++)
{
if (string.IsNullOrWhiteSpace(rs[i].SiteAddress))
{
rs.Remove(rs[i]);
}
}
if (pickerBox1.Value)
{
for (int i = 0; i < rs.Count; i++)
{
if (iconDatabase.HasIcon(rs[i].ToHash()))
{
rs.Remove(rs[i]);
}
}
}
return rs;
}
} }
} }

View File

@ -1,64 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <root>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
@ -117,4 +57,7 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root> </root>

File diff suppressed because it is too large Load Diff

View File

@ -1,15 +1,15 @@
; Script generated by the Inno Setup Script Wizard. ; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "BukkuBuddy Bookmark Manager" #define MyAppName "Bookmark Manager"
#define MyAppVersion "0.6.0.716" #define MyAppVersion "0.5.0.012"
#define MyAppPublisher "Hi, I'm Ray" #define MyAppPublisher "Hi, I'm Ray"
#define MyAppURL "https://www.hiimray.co.uk/software-bookmark-manager" #define MyAppURL "https://www.hiimray.co.uk/software-bookmark-manager"
#define MyAppExeName "bukkubuddy.exe" #define MyAppExeName "bookmarkmanager.exe"
#define AppSourcePath "L:\gitea-hiimray\bookmark-manager-r4\bin" #define AppSourcePath "L:\gitea-hiimray\bookmark-manager-r4\bin\Release\64"
#define AppReleasePath "L:\gitea-hiimray\bookmark-manager-r4\bin" #define AppReleasePath "L:\gitea-hiimray\bookmark-manager-r4\bin\Release"
#define AppReleaseName "bukkubuddy-installer" #define AppReleaseName "bookmark-manager"
[Setup] [Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications. ; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
@ -39,7 +39,8 @@ Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files] [Files]
Source: "{#AppSourcePath}\bukkubuddy.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "{#AppSourcePath}\bookmarkmanager.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#AppSourcePath}\e_sqlite3.dll"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons] [Icons]

View File

@ -1,17 +1,7 @@
RMDIR /s /q "bin\" rmdir /s /q "bin\Release\"
RMDIR /s /q "obj\" dotnet publish skye.sln -r win-x64 -c Release /p:PublishSingleFile=true /p:SelfContained=false /p:PublishReadyToRunfalse=true /p:PublishDir="bin\Release\64\"
MKDIR bin
dotnet restore skye.sln
dotnet publish skye.sln -r win-x64 -c Release /p:PublishSingleFile=true /p:SelfContained=false /p:PublishReadyToRunfalse=true /p:PublishDir="bin\"
"C:\B\Portable Files (dev)\Inno Setup\v6.0.4-2\app\ISCC.exe" "build-installer.iss" "C:\B\Portable Files (dev)\Inno Setup\v6.0.4-2\app\ISCC.exe" "build-installer.iss"
"C:\B\Portable Files\7-Zip (Portable)\23.01\App\7-Zip64\7z.exe" a -t7z "bin\bukkubuddy.7z" ".\bin\bukkubuddy.exe" -mx9 cd "bin\Release\64\"
"C:\B\Portable Files\PeaZip (Portable)\v6.5.1\App\PeaZip\res\7z\7z.exe" a -t7z "..\bookmark-manager.7z" "*" -mx9
RMDIR /s /q "bin\debug"
RMDIR /s /q "bin\release"
RMDIR /s /q "obj\"
PAUSE

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB