From fd087d2d0e2ffac97aeb0ac6e2f49da1d13efaaa Mon Sep 17 00:00:00 2001 From: Ray Date: Tue, 28 Sep 2021 22:39:45 +0100 Subject: [PATCH] Added: load support for ryz filetype --- Classes/SupportedFile/JSNXSupportedFile.cs | 1 - Classes/SupportedFile/RYZSupportedFile.cs | 98 +++++++++++++++++++++- MainForm.Designer.cs | 23 ++--- 3 files changed, 107 insertions(+), 15 deletions(-) diff --git a/Classes/SupportedFile/JSNXSupportedFile.cs b/Classes/SupportedFile/JSNXSupportedFile.cs index bbfee06..a02b396 100644 --- a/Classes/SupportedFile/JSNXSupportedFile.cs +++ b/Classes/SupportedFile/JSNXSupportedFile.cs @@ -19,7 +19,6 @@ namespace BookmarkManager 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) diff --git a/Classes/SupportedFile/RYZSupportedFile.cs b/Classes/SupportedFile/RYZSupportedFile.cs index 395a83e..484b07b 100644 --- a/Classes/SupportedFile/RYZSupportedFile.cs +++ b/Classes/SupportedFile/RYZSupportedFile.cs @@ -1,6 +1,10 @@ -using RyzStudio.IO; +using bzit.bomg.Models; +using RyzStudio.IO; using RyzStudio.Windows.Forms; using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.Xml; namespace BookmarkManager { @@ -16,12 +20,100 @@ namespace BookmarkManager 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) { - return Result.Create(false); + 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 "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) diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs index 4c306e2..7056adb 100644 --- a/MainForm.Designer.cs +++ b/MainForm.Designer.cs @@ -130,7 +130,7 @@ this.newToolStripMenuItem.Image = global::BookmarkManager.UIResource.file2; this.newToolStripMenuItem.Name = "newToolStripMenuItem"; this.newToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); - this.newToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.newToolStripMenuItem.Size = new System.Drawing.Size(146, 22); this.newToolStripMenuItem.Text = "&New"; this.newToolStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click); // @@ -139,52 +139,52 @@ this.openToolStripMenuItem.Image = global::BookmarkManager.UIResource.folder2; this.openToolStripMenuItem.Name = "openToolStripMenuItem"; this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); - this.openToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.openToolStripMenuItem.Size = new System.Drawing.Size(146, 22); this.openToolStripMenuItem.Text = "&Open"; this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click); // // toolStripMenuItem13 // this.toolStripMenuItem13.Name = "toolStripMenuItem13"; - this.toolStripMenuItem13.Size = new System.Drawing.Size(177, 6); + this.toolStripMenuItem13.Size = new System.Drawing.Size(143, 6); // // closeToolStripMenuItem // this.closeToolStripMenuItem.Name = "closeToolStripMenuItem"; - this.closeToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.closeToolStripMenuItem.Size = new System.Drawing.Size(146, 22); this.closeToolStripMenuItem.Text = "&Close"; this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click); // // toolStripMenuItem14 // this.toolStripMenuItem14.Name = "toolStripMenuItem14"; - this.toolStripMenuItem14.Size = new System.Drawing.Size(177, 6); + this.toolStripMenuItem14.Size = new System.Drawing.Size(143, 6); // // saveToolStripMenuItem // this.saveToolStripMenuItem.Image = global::BookmarkManager.UIResource.disk2; this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; this.saveToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); - this.saveToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.saveToolStripMenuItem.Size = new System.Drawing.Size(146, 22); this.saveToolStripMenuItem.Text = "&Save"; this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); // // saveAsToolStripMenuItem // this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem"; - this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(146, 22); this.saveAsToolStripMenuItem.Text = "Save &As..."; this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.saveAsToolStripMenuItem_Click); // // toolStripMenuItem15 // this.toolStripMenuItem15.Name = "toolStripMenuItem15"; - this.toolStripMenuItem15.Size = new System.Drawing.Size(177, 6); + this.toolStripMenuItem15.Size = new System.Drawing.Size(143, 6); // // exitToolStripMenuItem2 // this.exitToolStripMenuItem2.Name = "exitToolStripMenuItem2"; - this.exitToolStripMenuItem2.Size = new System.Drawing.Size(180, 22); + this.exitToolStripMenuItem2.Size = new System.Drawing.Size(146, 22); this.exitToolStripMenuItem2.Text = "E&xit"; this.exitToolStripMenuItem2.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); // @@ -201,7 +201,7 @@ this.findToolStripMenuItem.Image = global::BookmarkManager.UIResource.search2; this.findToolStripMenuItem.Name = "findToolStripMenuItem"; this.findToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F))); - this.findToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.findToolStripMenuItem.Size = new System.Drawing.Size(137, 22); this.findToolStripMenuItem.Text = "&Find"; this.findToolStripMenuItem.Click += new System.EventHandler(this.findToolStripMenuItem_Click); // @@ -302,7 +302,8 @@ // openFileDialog1 // this.openFileDialog1.DefaultExt = "jsnx"; - this.openFileDialog1.Filter = "Bookmarks files (*.jsnx)|*.jsnx|Bookmarks files (*.ryz)|*.ryz"; + this.openFileDialog1.Filter = "All supported files (*.jsnx;*.ryz)|*.jsnx;*.ryz|Bookmarks files (*.jsnx)|*.jsnx|B" + + "ookmarks files (*.ryz)|*.ryz"; this.openFileDialog1.Title = "Open bookmarks file"; // // rootContextMenu