This repository has been archived on 2022-09-30. You can view files and clone it, but cannot push or open issues or pull requests.
bookmark-manager/Data/IconDatabase.cs

127 lines
3.7 KiB
C#

using System;
using System.Drawing;
using System.IO;
using RyzStudio.Data.SQLite;
namespace bzit.bomg.Data
{
public class IconDatabase : SQLiteDatabase2
{
public IconDatabase()
{
this.requiredTableList = new string[] { "bzt_app_bomg_icons" };
}
protected override bool prepareDatabase()
{
if (this.DBConnection == null)
{
return false;
}
return this.DoNonQuery(@"
CREATE TABLE bzt_app_bomg_icons
(
ico_id INTEGER PRIMARY KEY,
ico_key TEXT,
ico_hash TEXT,
ico_content BLOB
)
") >= 0;
}
public bool HasIcon(string url)
{
return this.DoQueryExist("SELECT 1 FROM bzt_app_bomg_icons WHERE ico_key='" + escapeValue(url) + "'");
}
/* public bool AddIcon(string url, Image image)
{
if (string.IsNullOrWhiteSpace(url))
{
return false;
}
if (image == null)
{
return false;
}
if (this.HasIcon(url))
{
return this.DoNonQuery("UPDATE bzt_app_bomg_icons SET='" + imageToSQLString(image) + "' WHERE ico_key='" + SQLiteDatabase2.escapeValue(url) + "';") >= 0;
}
else
{
return this.DoNonQuery("INSERT INTO bzt_app_bomg_icons (ico_key, ico_content) VALUES ('" + SQLiteDatabase2.escapeValue(url) + "', '" + imageToSQLString(image) + "');") >= 0;
}
}*/
public bool AddIcon(string url, byte[] image)
{
if (string.IsNullOrWhiteSpace(url))
{
return false;
}
if (image == null)
{
return false;
}
if (this.HasIcon(url))
{
return this.DoNonQuery("UPDATE bzt_app_bomg_icons SET='" + bytesToSQLString(image) + "' WHERE ico_key='" + escapeValue(url) + "';") >= 0;
}
else
{
return this.DoNonQuery("INSERT INTO bzt_app_bomg_icons (ico_key, ico_content) VALUES ('" + escapeValue(url) + "', '" + bytesToSQLString(image) + "');") >= 0;
}
}
public Image GetIcon(string url)
{
if (!this.HasIcon(url))
{
return null;
}
string rs = this.DoQuerySingle("SELECT ico_content FROM bzt_app_bomg_icons WHERE ico_key='" + escapeValue(url) + "'");
return sqlStringToImage(rs);
}
public void DeleteIcon(string url)
{
if (string.IsNullOrWhiteSpace(url))
{
return;
}
this.DoNonQuery("DELETE FROM bzt_app_bomg_icons WHERE ico_key='" + escapeValue(url) + "';");
}
protected string imageToSQLString(Image image)
{
MemoryStream stream = new MemoryStream();
image.Save(stream, new System.Drawing.Imaging.ImageFormat(image.RawFormat.Guid));
stream.Close();
byte[] byteArray = stream.ToArray();
return bytesToSQLString(byteArray);
}
protected string bytesToSQLString(byte[] image) => Convert.ToBase64String(image);
protected Image sqlStringToImage(string base64_string)
{
byte[] byteArray2 = Convert.FromBase64String(base64_string);
MemoryStream stream2 = new MemoryStream();
stream2.Write(byteArray2, 0, byteArray2.Length);
Image displayImage = Image.FromStream(stream2);
return displayImage;
}
}
}