mirror of
https://github.com/chylex/TweetDuck.git
synced 2025-09-14 01:32:10 +02:00
Compare commits
92 Commits
Author | SHA1 | Date | |
---|---|---|---|
5eb64829a5 | |||
5648e9e806 | |||
2a65e20fb9 | |||
1162e9b655 | |||
b8a5c2fb9b | |||
eccd37a3eb | |||
ee282713f8 | |||
c5edad9c4b | |||
293c01b12f | |||
162bbc3221 | |||
9f27020993 | |||
c540cf45ca | |||
8bf4789646 | |||
fd97c20d37 | |||
7238e17b86 | |||
4c44da7f4a | |||
af7657e3f8 | |||
bea158b0d9 | |||
40acb49011 | |||
cc7fc7e994 | |||
ddec715dda | |||
a1365a98c0 | |||
9a29d4ff18 | |||
39816eae76 | |||
45a38d9570 | |||
a230258bec | |||
8543205b85 | |||
1d169005da | |||
f5212d88f3 | |||
03a93ad3f3 | |||
3a66fa28ab | |||
5f79b286f1 | |||
f6a4e39cfc | |||
24d8444043 | |||
0b8205dc41 | |||
98197d1e86 | |||
77bcca45ce | |||
d33d65031c | |||
8fe4aa386d | |||
05cc27b2b9 | |||
16ef1b3a34 | |||
fd350528a9 | |||
62cd076abb | |||
b63224a218 | |||
3223b3e78e | |||
8da95496bd | |||
8e1d23a53e | |||
2e2ad4edcf | |||
e8ecd00a57 | |||
e19ee6f363 | |||
3785efce78 | |||
841faf9124 | |||
f8e14cb900 | |||
2ecbbdd011 | |||
15a39de939 | |||
4142206b65 | |||
6105658602 | |||
a6e40be79e | |||
95fba6a99a | |||
aa2e4c9845 | |||
f4cfc40244 | |||
6c50bdba06 | |||
1f6fc491ef | |||
1c3a7b6ce7 | |||
b04e260fb7 | |||
4a66486e1a | |||
a335aa037a | |||
dd4c89b9dd | |||
ddbf6da061 | |||
f85e0030a7 | |||
c0271d273f | |||
2a1dc8beab | |||
c5b3bc1a0b | |||
316b1db3f6 | |||
49fa7626b6 | |||
24edcc3402 | |||
c53a1cbd01 | |||
c138b13d01 | |||
acc9b58660 | |||
b94a6acee6 | |||
b2892cc834 | |||
82a1e17b1d | |||
82a3cd8df2 | |||
b39a3a05fe | |||
f4c7eb14ec | |||
92ac138183 | |||
b0fe8cf53e | |||
016e403309 | |||
4cef0fb60d | |||
d53eff6043 | |||
f064912ac9 | |||
f9f0677da3 |
@@ -54,7 +54,13 @@ namespace TweetDck.Configuration{
|
|||||||
int pid = BitConverter.ToInt32(bytes,0);
|
int pid = BitConverter.ToInt32(bytes,0);
|
||||||
|
|
||||||
try{
|
try{
|
||||||
lockingProcess = Process.GetProcessById(pid);
|
Process foundProcess = Process.GetProcessById(pid);
|
||||||
|
|
||||||
|
using(Process currentProcess = Process.GetCurrentProcess()){
|
||||||
|
if (foundProcess.ProcessName == currentProcess.ProcessName){
|
||||||
|
lockingProcess = foundProcess;
|
||||||
|
}
|
||||||
|
}
|
||||||
}catch(ArgumentException){}
|
}catch(ArgumentException){}
|
||||||
|
|
||||||
return lockingProcess == null && CreateLockFile();
|
return lockingProcess == null && CreateLockFile();
|
||||||
@@ -74,14 +80,23 @@ namespace TweetDck.Configuration{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Unlock(){
|
public bool Unlock(){
|
||||||
|
bool result = true;
|
||||||
|
|
||||||
if (lockStream != null){
|
if (lockStream != null){
|
||||||
lockStream.Close();
|
|
||||||
lockStream.Dispose();
|
lockStream.Dispose();
|
||||||
File.Delete(file);
|
|
||||||
|
try{
|
||||||
|
File.Delete(file);
|
||||||
|
}catch(Exception e){
|
||||||
|
Program.Log(e.ToString());
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
|
||||||
lockStream = null;
|
lockStream = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CloseLockingProcess(int timeout){
|
public bool CloseLockingProcess(int timeout){
|
||||||
@@ -96,7 +111,7 @@ namespace TweetDck.Configuration{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (lockingProcess.HasExited){
|
if (lockingProcess.HasExited){
|
||||||
lockingProcess.Close();
|
lockingProcess.Dispose();
|
||||||
lockingProcess = null;
|
lockingProcess = null;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -3,16 +3,17 @@ using System.Drawing;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Runtime.Serialization;
|
using System.Runtime.Serialization;
|
||||||
using System.Runtime.Serialization.Formatters.Binary;
|
using System.Runtime.Serialization.Formatters.Binary;
|
||||||
|
using TweetDck.Core;
|
||||||
using TweetDck.Core.Handling;
|
using TweetDck.Core.Handling;
|
||||||
|
|
||||||
namespace TweetDck.Configuration{
|
namespace TweetDck.Configuration{
|
||||||
[Serializable]
|
[Serializable]
|
||||||
sealed class UserConfig{
|
sealed class UserConfig{
|
||||||
private static readonly IFormatter Formatter = new BinaryFormatter(){
|
private static readonly IFormatter Formatter = new BinaryFormatter{
|
||||||
Binder = new SerializationCompatibilityHandler()
|
Binder = new SerializationCompatibilityHandler()
|
||||||
};
|
};
|
||||||
|
|
||||||
private const int CurrentFileVersion = 1;
|
private const int CurrentFileVersion = 2;
|
||||||
|
|
||||||
// START OF CONFIGURATION
|
// START OF CONFIGURATION
|
||||||
|
|
||||||
@@ -22,8 +23,6 @@ namespace TweetDck.Configuration{
|
|||||||
public bool IsMaximized { get; set; }
|
public bool IsMaximized { get; set; }
|
||||||
public Point WindowLocation { get; set; }
|
public Point WindowLocation { get; set; }
|
||||||
public Size WindowSize { get; set; }
|
public Size WindowSize { get; set; }
|
||||||
|
|
||||||
public bool MinimizeToTray { get; set; }
|
|
||||||
public bool DisplayNotificationTimer { get; set; }
|
public bool DisplayNotificationTimer { get; set; }
|
||||||
|
|
||||||
public TweetNotification.Duration NotificationDuration { get; set; }
|
public TweetNotification.Duration NotificationDuration { get; set; }
|
||||||
@@ -34,6 +33,7 @@ namespace TweetDck.Configuration{
|
|||||||
|
|
||||||
public bool EnableUpdateCheck { get; set; }
|
public bool EnableUpdateCheck { get; set; }
|
||||||
public string DismissedUpdate { get; set; }
|
public string DismissedUpdate { get; set; }
|
||||||
|
public bool ExpandLinksOnHover { get; set; }
|
||||||
|
|
||||||
public bool IsCustomWindowLocationSet{
|
public bool IsCustomWindowLocationSet{
|
||||||
get{
|
get{
|
||||||
@@ -46,13 +46,53 @@ namespace TweetDck.Configuration{
|
|||||||
return CustomNotificationPosition.X != -32000 && CustomNotificationPosition.X != 32000;
|
return CustomNotificationPosition.X != -32000 && CustomNotificationPosition.X != 32000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool MuteNotifications{
|
||||||
|
get{
|
||||||
|
return muteNotifications;
|
||||||
|
}
|
||||||
|
|
||||||
|
set{
|
||||||
|
if (muteNotifications == value)return;
|
||||||
|
|
||||||
|
muteNotifications = value;
|
||||||
|
|
||||||
|
if (MuteToggled != null){
|
||||||
|
MuteToggled(this,new EventArgs());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public TrayIcon.Behavior TrayBehavior{
|
||||||
|
get{
|
||||||
|
return trayBehavior;
|
||||||
|
}
|
||||||
|
|
||||||
|
set{
|
||||||
|
if (trayBehavior == value)return;
|
||||||
|
|
||||||
|
trayBehavior = value;
|
||||||
|
|
||||||
|
if (TrayBehaviorChanged != null){
|
||||||
|
TrayBehaviorChanged(this,new EventArgs());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// END OF CONFIGURATION
|
// END OF CONFIGURATION
|
||||||
|
|
||||||
|
[field:NonSerialized]
|
||||||
|
public event EventHandler MuteToggled;
|
||||||
|
|
||||||
|
[field:NonSerialized]
|
||||||
|
public event EventHandler TrayBehaviorChanged;
|
||||||
|
|
||||||
[NonSerialized]
|
[NonSerialized]
|
||||||
private string file;
|
private string file;
|
||||||
|
|
||||||
private int fileVersion;
|
private int fileVersion;
|
||||||
|
private bool muteNotifications;
|
||||||
|
private TrayIcon.Behavior trayBehavior;
|
||||||
|
|
||||||
private UserConfig(string file){
|
private UserConfig(string file){
|
||||||
this.file = file;
|
this.file = file;
|
||||||
@@ -65,6 +105,7 @@ namespace TweetDck.Configuration{
|
|||||||
CustomNotificationPosition = new Point(-32000,-32000);
|
CustomNotificationPosition = new Point(-32000,-32000);
|
||||||
NotificationEdgeDistance = 8;
|
NotificationEdgeDistance = 8;
|
||||||
EnableUpdateCheck = true;
|
EnableUpdateCheck = true;
|
||||||
|
ExpandLinksOnHover = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpgradeFile(){
|
private void UpgradeFile(){
|
||||||
@@ -79,6 +120,11 @@ namespace TweetDck.Configuration{
|
|||||||
++fileVersion;
|
++fileVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fileVersion == 1){
|
||||||
|
ExpandLinksOnHover = true;
|
||||||
|
++fileVersion;
|
||||||
|
}
|
||||||
|
|
||||||
// update the version
|
// update the version
|
||||||
fileVersion = CurrentFileVersion;
|
fileVersion = CurrentFileVersion;
|
||||||
Save();
|
Save();
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using TweetDck.Core.Utils;
|
||||||
|
|
||||||
namespace TweetDck.Core.Controls{
|
namespace TweetDck.Core.Controls{
|
||||||
public partial class RichTextLabel : RichTextBox{
|
public partial class RichTextLabel : RichTextBox{
|
||||||
@@ -27,7 +28,7 @@ namespace TweetDck.Core.Controls{
|
|||||||
get{
|
get{
|
||||||
CreateParams createParams = base.CreateParams;
|
CreateParams createParams = base.CreateParams;
|
||||||
|
|
||||||
if (Program.LoadLibrary("msftedit.dll") != IntPtr.Zero){
|
if (NativeMethods.LoadLibrary("msftedit.dll") != IntPtr.Zero){
|
||||||
createParams.ClassName = "RICHEDIT50W";
|
createParams.ClassName = "RICHEDIT50W";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
16
Core/FormBrowser.Designer.cs
generated
16
Core/FormBrowser.Designer.cs
generated
@@ -24,23 +24,26 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent() {
|
private void InitializeComponent() {
|
||||||
this.components = new System.ComponentModel.Container();
|
this.components = new System.ComponentModel.Container();
|
||||||
this.trayIcon = new System.Windows.Forms.NotifyIcon(this.components);
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormBrowser));
|
||||||
|
this.trayIcon = new TweetDck.Core.TrayIcon();
|
||||||
|
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// trayIcon
|
// trayIcon
|
||||||
//
|
//
|
||||||
this.trayIcon.Icon = global::TweetDck.Properties.Resources.icon;
|
this.trayIcon.Visible = false;
|
||||||
this.trayIcon.Click += new System.EventHandler(this.trayIcon_Click);
|
|
||||||
//
|
//
|
||||||
// FormBrowser
|
// FormBrowser
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(284, 262);
|
this.ClientSize = new System.Drawing.Size(324, 386);
|
||||||
this.Icon = global::TweetDck.Properties.Resources.icon;
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
this.Location = new System.Drawing.Point(-32000, -32000);
|
this.Location = new System.Drawing.Point(-32000, -32000);
|
||||||
|
this.MinimumSize = new System.Drawing.Size(340, 424);
|
||||||
this.Name = "FormBrowser";
|
this.Name = "FormBrowser";
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
|
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
|
||||||
|
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormBrowser_FormClosing);
|
||||||
this.ResizeEnd += new System.EventHandler(this.FormBrowser_ResizeEnd);
|
this.ResizeEnd += new System.EventHandler(this.FormBrowser_ResizeEnd);
|
||||||
this.Resize += new System.EventHandler(this.FormBrowser_Resize);
|
this.Resize += new System.EventHandler(this.FormBrowser_Resize);
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
@@ -49,7 +52,8 @@
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private System.Windows.Forms.NotifyIcon trayIcon;
|
private TrayIcon trayIcon;
|
||||||
|
private System.Windows.Forms.ToolTip toolTip;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -7,8 +7,9 @@ using TweetDck.Configuration;
|
|||||||
using TweetDck.Core.Handling;
|
using TweetDck.Core.Handling;
|
||||||
using TweetDck.Core.Other;
|
using TweetDck.Core.Other;
|
||||||
using TweetDck.Resources;
|
using TweetDck.Resources;
|
||||||
using TweetDck.Core.Utils;
|
|
||||||
using TweetDck.Core.Controls;
|
using TweetDck.Core.Controls;
|
||||||
|
using System.Drawing;
|
||||||
|
using TweetDck.Updates;
|
||||||
|
|
||||||
namespace TweetDck.Core{
|
namespace TweetDck.Core{
|
||||||
sealed partial class FormBrowser : Form{
|
sealed partial class FormBrowser : Form{
|
||||||
@@ -23,6 +24,7 @@ namespace TweetDck.Core{
|
|||||||
private readonly ChromiumWebBrowser browser;
|
private readonly ChromiumWebBrowser browser;
|
||||||
private readonly TweetDeckBridge bridge;
|
private readonly TweetDeckBridge bridge;
|
||||||
private readonly FormNotification notification;
|
private readonly FormNotification notification;
|
||||||
|
private readonly UpdateHandler updates;
|
||||||
|
|
||||||
private FormSettings currentFormSettings;
|
private FormSettings currentFormSettings;
|
||||||
private FormAbout currentFormAbout;
|
private FormAbout currentFormAbout;
|
||||||
@@ -37,7 +39,11 @@ namespace TweetDck.Core{
|
|||||||
|
|
||||||
bridge = new TweetDeckBridge(this);
|
bridge = new TweetDeckBridge(this);
|
||||||
|
|
||||||
browser = new ChromiumWebBrowser("https://tweetdeck.twitter.com/"){ MenuHandler = new ContextMenuBrowser(this) };
|
browser = new ChromiumWebBrowser("https://tweetdeck.twitter.com/"){
|
||||||
|
MenuHandler = new ContextMenuBrowser(this),
|
||||||
|
DialogHandler = new DialogHandlerBrowser(this)
|
||||||
|
};
|
||||||
|
|
||||||
browser.LoadingStateChanged += Browser_LoadingStateChanged;
|
browser.LoadingStateChanged += Browser_LoadingStateChanged;
|
||||||
browser.FrameLoadEnd += Browser_FrameLoadEnd;
|
browser.FrameLoadEnd += Browser_FrameLoadEnd;
|
||||||
browser.RegisterJsObject("$TD",bridge);
|
browser.RegisterJsObject("$TD",bridge);
|
||||||
@@ -46,10 +52,18 @@ namespace TweetDck.Core{
|
|||||||
|
|
||||||
Disposed += (sender, args) => browser.Dispose();
|
Disposed += (sender, args) => browser.Dispose();
|
||||||
|
|
||||||
notification = new FormNotification(this,bridge,true){ CanMoveWindow = () => false };
|
trayIcon.ClickRestore += trayIcon_ClickRestore;
|
||||||
|
trayIcon.ClickClose += trayIcon_ClickClose;
|
||||||
|
Config.TrayBehaviorChanged += Config_TrayBehaviorChanged;
|
||||||
|
|
||||||
|
UpdateTrayIcon();
|
||||||
|
|
||||||
|
notification = CreateNotificationForm(true);
|
||||||
|
notification.CanMoveWindow = () => false;
|
||||||
notification.Show();
|
notification.Show();
|
||||||
|
|
||||||
trayIcon.Text = Program.BrandName;
|
updates = new UpdateHandler(browser,this);
|
||||||
|
updates.UpdateAccepted += updates_UpdateAccepted;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ShowChildForm(Form form){
|
private void ShowChildForm(Form form){
|
||||||
@@ -57,6 +71,15 @@ namespace TweetDck.Core{
|
|||||||
form.MoveToCenter(this);
|
form.MoveToCenter(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ForceClose(){
|
||||||
|
trayIcon.Visible = false; // checked in FormClosing event
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public FormNotification CreateNotificationForm(bool autoHide){
|
||||||
|
return new FormNotification(this,bridge,trayIcon,autoHide);
|
||||||
|
}
|
||||||
|
|
||||||
// window setup
|
// window setup
|
||||||
|
|
||||||
private void SetupWindow(){
|
private void SetupWindow(){
|
||||||
@@ -76,6 +99,10 @@ namespace TweetDck.Core{
|
|||||||
isLoaded = true;
|
isLoaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateTrayIcon(){
|
||||||
|
trayIcon.Visible = Config.TrayBehavior != TrayIcon.Behavior.Disabled;
|
||||||
|
}
|
||||||
|
|
||||||
// active event handlers
|
// active event handlers
|
||||||
|
|
||||||
private void Browser_LoadingStateChanged(object sender, LoadingStateChangedEventArgs e){
|
private void Browser_LoadingStateChanged(object sender, LoadingStateChangedEventArgs e){
|
||||||
@@ -87,9 +114,7 @@ namespace TweetDck.Core{
|
|||||||
|
|
||||||
private void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e){
|
private void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e){
|
||||||
if (e.Frame.IsMain){
|
if (e.Frame.IsMain){
|
||||||
string js = ScriptLoader.LoadResource("code.js");
|
foreach(string js in ScriptLoader.LoadResources("code.js").Where(js => js != null)){
|
||||||
|
|
||||||
if (js != null){
|
|
||||||
browser.ExecuteScriptAsync(js);
|
browser.ExecuteScriptAsync(js);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -102,9 +127,8 @@ namespace TweetDck.Core{
|
|||||||
prevState = WindowState;
|
prevState = WindowState;
|
||||||
|
|
||||||
if (WindowState == FormWindowState.Minimized){
|
if (WindowState == FormWindowState.Minimized){
|
||||||
if (Config.MinimizeToTray){
|
if (Config.TrayBehavior == TrayIcon.Behavior.MinimizeToTray){
|
||||||
Hide(); // hides taskbar too?! welp that works I guess
|
Hide(); // hides taskbar too?! welp that works I guess
|
||||||
trayIcon.Visible = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@@ -118,26 +142,77 @@ namespace TweetDck.Core{
|
|||||||
|
|
||||||
if (Location.X != -32000){
|
if (Location.X != -32000){
|
||||||
Config.IsMaximized = WindowState == FormWindowState.Maximized;
|
Config.IsMaximized = WindowState == FormWindowState.Maximized;
|
||||||
Config.WindowLocation = Location;
|
|
||||||
Config.WindowSize = Size;
|
if (WindowState == FormWindowState.Normal || (WindowState == FormWindowState.Maximized && !Screen.FromControl(this).Equals(Screen.FromPoint(Config.WindowLocation)))){
|
||||||
|
Config.WindowLocation = Location;
|
||||||
|
Config.WindowSize = Size;
|
||||||
|
}
|
||||||
|
|
||||||
Config.Save();
|
Config.Save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void trayIcon_Click(object sender, EventArgs e){
|
private void FormBrowser_FormClosing(object sender, FormClosingEventArgs e){
|
||||||
|
if (!isLoaded)return;
|
||||||
|
|
||||||
|
if (Config.TrayBehavior == TrayIcon.Behavior.CloseToTray && trayIcon.Visible && e.CloseReason == CloseReason.UserClosing){
|
||||||
|
Hide(); // hides taskbar too?! welp that works I guess
|
||||||
|
e.Cancel = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Config_TrayBehaviorChanged(object sender, EventArgs e){
|
||||||
|
if (!isLoaded)return;
|
||||||
|
|
||||||
|
UpdateTrayIcon();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void trayIcon_ClickRestore(object sender, EventArgs e){
|
||||||
|
if (!isLoaded)return;
|
||||||
|
|
||||||
isLoaded = false;
|
isLoaded = false;
|
||||||
Show();
|
Show();
|
||||||
SetupWindow();
|
SetupWindow();
|
||||||
|
Activate();
|
||||||
|
UpdateTrayIcon();
|
||||||
|
}
|
||||||
|
|
||||||
trayIcon.Visible = false;
|
private void trayIcon_ClickClose(object sender, EventArgs e){
|
||||||
|
if (!isLoaded)return;
|
||||||
|
|
||||||
|
ForceClose();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updates_UpdateAccepted(object sender, UpdateAcceptedEventArgs e){
|
||||||
|
Hide();
|
||||||
|
|
||||||
|
FormUpdateDownload downloadForm = new FormUpdateDownload(e.UpdateInfo);
|
||||||
|
downloadForm.MoveToCenter(this);
|
||||||
|
downloadForm.ShowDialog();
|
||||||
|
|
||||||
|
if (downloadForm.UpdateStatus == FormUpdateDownload.Status.Succeeded){
|
||||||
|
UpdateInstallerPath = downloadForm.InstallerPath;
|
||||||
|
ForceClose();
|
||||||
|
}
|
||||||
|
else if (downloadForm.UpdateStatus == FormUpdateDownload.Status.Manual){
|
||||||
|
ForceClose();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void WndProc(ref Message m){
|
||||||
|
if (isLoaded && m.Msg == 0x210 && (m.WParam.ToInt32() & 0xFFFF) == 0x020B){ // WM_PARENTNOTIFY, WM_XBUTTONDOWN
|
||||||
|
browser.ExecuteScriptAsync("TDGF_onMouseClickExtra",(m.WParam.ToInt32() >> 16) & 0xFFFF);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
base.WndProc(ref m);
|
||||||
}
|
}
|
||||||
|
|
||||||
// callback handlers
|
// callback handlers
|
||||||
|
|
||||||
public void InvokeSafe(Action func){
|
|
||||||
ControlExtensions.InvokeSafe(this,func);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OpenSettings(){
|
public void OpenSettings(){
|
||||||
if (currentFormSettings != null){
|
if (currentFormSettings != null){
|
||||||
currentFormSettings.BringToFront();
|
currentFormSettings.BringToFront();
|
||||||
@@ -145,7 +220,7 @@ namespace TweetDck.Core{
|
|||||||
else{
|
else{
|
||||||
bool prevEnableUpdateCheck = Config.EnableUpdateCheck;
|
bool prevEnableUpdateCheck = Config.EnableUpdateCheck;
|
||||||
|
|
||||||
currentFormSettings = new FormSettings(this);
|
currentFormSettings = new FormSettings(this,updates);
|
||||||
|
|
||||||
currentFormSettings.FormClosed += (sender, args) => {
|
currentFormSettings.FormClosed += (sender, args) => {
|
||||||
currentFormSettings = null;
|
currentFormSettings = null;
|
||||||
@@ -153,8 +228,7 @@ namespace TweetDck.Core{
|
|||||||
if (!prevEnableUpdateCheck && Config.EnableUpdateCheck){
|
if (!prevEnableUpdateCheck && Config.EnableUpdateCheck){
|
||||||
Config.DismissedUpdate = string.Empty;
|
Config.DismissedUpdate = string.Empty;
|
||||||
Config.Save();
|
Config.Save();
|
||||||
|
updates.Check(false);
|
||||||
browser.ExecuteScriptAsync("TDGF_runUpdateCheck",new object[0]);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -177,23 +251,32 @@ namespace TweetDck.Core{
|
|||||||
notification.ShowNotification(tweet);
|
notification.ShowNotification(tweet);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void BeginUpdateProcess(string versionTag, string downloadUrl){
|
public void OnTweetSound(){
|
||||||
Hide();
|
|
||||||
|
}
|
||||||
|
|
||||||
FormUpdateDownload downloadForm = new FormUpdateDownload(new UpdateInfo(versionTag,downloadUrl));
|
public void DisplayTooltip(string text, bool showInNotification){
|
||||||
downloadForm.MoveToCenter(this);
|
if (showInNotification){
|
||||||
downloadForm.ShowDialog();
|
notification.DisplayTooltip(text);
|
||||||
|
return;
|
||||||
if (downloadForm.UpdateStatus == FormUpdateDownload.Status.Succeeded){
|
|
||||||
UpdateInstallerPath = downloadForm.InstallerPath;
|
|
||||||
Close();
|
|
||||||
}
|
}
|
||||||
else if (downloadForm.UpdateStatus == FormUpdateDownload.Status.Manual){
|
|
||||||
Close();
|
if (string.IsNullOrEmpty(text)){
|
||||||
|
toolTip.Hide(this);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
Show();
|
Point position = PointToClient(Cursor.Position);
|
||||||
|
position.Offset(20,10);
|
||||||
|
toolTip.Show(text,this,position);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void OnImagePasted(){
|
||||||
|
browser.ExecuteScriptAsync("TDGF_tryPasteImage",new object[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnImagePastedFinish(){
|
||||||
|
browser.ExecuteScriptAsync("TDGF_tryPasteImageFinish",new object[0]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
383
Core/FormBrowser.resx
Normal file
383
Core/FormBrowser.resx
Normal file
@@ -0,0 +1,383 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<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: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>
|
||||||
|
<metadata name="trayIcon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>112, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<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">
|
||||||
|
<value>
|
||||||
|
AAABAAMAMDAAAAEAIACoJQAANgAAACAgAAABACAAqBAAAN4lAAAQEAAAAQAgAGgEAACGNgAAKAAAADAA
|
||||||
|
AABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHg5IrF+OlS+hjyMw4g7tcmM
|
||||||
|
PM/MjTzezY485s2OPObMjjzfyIw80MOJPLe8hDyNs387WKx8OyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApHU4FrB8OGXGijzAzo889dKR
|
||||||
|
PP/SkTz/0pE8/9GRPP/RkDz/0JA8/9CQPP/RkDz/0ZE8/9KRPP/TkTz/0pE8/86PPPbGijzCt4E8bKp6
|
||||||
|
OxoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKN1OB+9hTuLzI486NOR
|
||||||
|
PP/SkTz/0ZA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9GQ
|
||||||
|
PP/SkTz/0pE8/82OPOu9hTuOq3w8IgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACidTkFuoM8csyN
|
||||||
|
POrTkjz/0ZE8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9GRPP/Tkjz/zY887bqEPHimeDsHAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKp6
|
||||||
|
OynDiDvA05I8/9GRPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0ZA8/9ORPP/GijzFr308LgAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAArXw7UM2OPOvTkTz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/SkTz/zo887rOAPFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAACxfjxm0ZA8/NGRPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0ZE8/9GQPP64gjxtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAALaBPGXRkTz/0ZE8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9GQPP/SkTz/uIM8bAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqnk6TtCQPPzRkTz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/RkDz/0ZA8/rSA
|
||||||
|
PFUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtfDwmzo887dKRPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0ZE8/86PPPGtfDwrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZ4PAXFijzC0pE8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CURf/TpGT/2baJ/9/GpP/l0bf/59W//+fVvf/kz7P/3sOg/9mz
|
||||||
|
hP/ToWH/0JND/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9KRPP/EiTvJo3Y7CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALiC
|
||||||
|
PG/Tkjz/0JA8/9CQPP/QkDz/0JA8/9CSQf/Vq3P/5tO7//j07v//////////////////////////////
|
||||||
|
////////////////////////9vHq/+TQtf/UqG7/0JA+/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/Tkjz/uYM8dgAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAArXw8Gc2OPOzRkTz/0JA8/9CQPP/QlEX/27qP//fz7P//////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////8ObZ/9auev/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/RkTz/zI488J1x
|
||||||
|
OB8AAAAAAAAAAAAAAAAAAAAAuoM7h9OSPP/QkDz/0JA8/9GXTf/TpGb/27uS/9u6kP/ewZz/59W9//Xv
|
||||||
|
5///////////////////////////////////////////////////////////////////////////////
|
||||||
|
///r3cr/0ZxV/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/1JI8/7mDO5AAAAAAAAAAAAAAAADFj0cR0pNB6s+PO//Ojjv/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CRQP/TpGf/5NC2//38+v//////////////////////////////////////////////
|
||||||
|
////////////////////////+vf0/9auev/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0ZE8/8uOPO6SajYVAAAAAAAAAADzr1df7qxV/+WkT//ZmUT/0JA9/86O
|
||||||
|
O//Pjzv/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9GaUv/l07r/////////////////////////
|
||||||
|
///////////////////////////////////////////////////buo//0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9OSPP+ldjdoAAAAAAAAAADurFW67qxV//Ct
|
||||||
|
Vv/vrVb/6adR/92dSP/Skz//zo47/8+PO//QkDz/0JA8/9CQPP/QkDz/0JJB/9Smaf/dv5j/+fXw////
|
||||||
|
////////////////////////////////////////////////////////////////////////2riM/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9KRPP/FiTzGoHQ6Ae6s
|
||||||
|
VRrurFXz7qxV/+6sVf/urFX/761W//CuVv/sqlT/4qFM/9aVQv/Pjzv/zo47/9CQPP/VqnH/8+vh////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/////////////9aueP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9GQ
|
||||||
|
PP/Ojzz4oHM5Iu6sVU3urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/vrVX/8K5W/+6sVf/mpU//2plF/9q6
|
||||||
|
j///////////////////////////////////////////////////////////////////////////////
|
||||||
|
//////////////////////////////n18P/Rm1P/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/SkTz/rXs6Vu6sVYPurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/wrVb/6r2B////////////////////////////////////////////////////////////////////
|
||||||
|
///////////////////////////////////////////////////o18L/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/v4Y8j+6sVa3urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFb/9Onb///////+/v3/////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////1qx2/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/wYc7uO6sVcrurFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/trlr/67Zy/+m+h//y5NP/////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
////////7+TW/9CQPf/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/RkTz/yYw80e6s
|
||||||
|
VdvurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/6sme//v49P//////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/////////////////////////////9arc//QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/RkDz/zI083+6sVeLurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/u2b3/////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/////////////////////////////////////////////+fVvv/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/zo885u6sVeLurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+vL
|
||||||
|
of//////////////////////////////////////////////////////////////////////////////
|
||||||
|
//////////////////////////////////////////////////////////////r28v/Rl0r/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/zo885u6sVdrurFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7LBj//r28f//////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
///Vq3P/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/RkDz/zI083+6sVcrurFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/6cKO////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
///////////////////ewp7/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/RkTz/yYw80O6s
|
||||||
|
VazurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7NOy//z59v/u2b7/+fPr////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
///////////////////////////////////n1sD/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/SkTz/xIo8uO6sVYHurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/67Zx/+2uWf/qy6H/////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
///////////////////////////////////////////////////v5dj/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/SkTz/vYU8je6sVUvurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+nC
|
||||||
|
kP///////////////////////////////////////////////////////fz6//fu5P/w4Mv/793F//7+
|
||||||
|
/v/////////////////////////////////////////////////////////////////17eT/0JA//86O
|
||||||
|
Ov/Pjzv/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/tYA8Vu6sVRnurFXy7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7a5b//fw5///////////////////////////////////////+/jz/+7av//pwIr/67Jn/+6t
|
||||||
|
Vv/urFX/6rd1////////////////////////////////////////////////////////////////////
|
||||||
|
///48ej/6KhU/92cR//Tkj7/zo47/8+PO//QkDz/0JA8/9GQPP/Pjzz3rXw8IAAAAADurFW37qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/6b2D//////////////////////////////////nz6//qyZ3/7K9h/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/6rl6////////////////////////////////////////////////////
|
||||||
|
///////////////////9/Pr/6r6C//CuV//sqlT/4aBL/9aWQv/Pjzv/zo47/9GRPP/GijzCp3g8AQAA
|
||||||
|
AADurFVb7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/68yk///////////////////////+/fz/68+q/+2v
|
||||||
|
XP/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/6rNr//7+/f//////////////////////////////
|
||||||
|
/////////////////////////////////////////////+nEk//vrVX/8K5W/+6sVf/lpE//2ZlF/9KR
|
||||||
|
Pf+zfzpoAAAAAAAAAADurFUP7qxV5u6sVf/urFX/7qxV/+6sVf/urFX/7NGu//////////////////fu
|
||||||
|
5P/quHb/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxW//Xr3///////////////
|
||||||
|
///////////////////////////////////////////////////7+PP/+vXu///////pxJL/7qxV/+6s
|
||||||
|
Vf/wrVb/8K1W/+mnUevUmUsUAAAAAAAAAAAAAAAA7qxVgO6sVf/urFX/7qxV/+6sVf/urFX/6sqg////
|
||||||
|
////////8eLO/+yvX//urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+nF
|
||||||
|
lf/////////////////////////////////////////////////////////////////8+vf/6cWV/+q5
|
||||||
|
ev/s07H/6rd1/+6sVf/urFX/7qxV/++tVogAAAAAAAAAAAAAAAAAAAAA7qxVFe6sVejurFX/7qxV/+6s
|
||||||
|
Vf/urFX/6bp8///////w4Mn/7a1Z/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/x4cz////////////////////////////////////////////////////+//7+
|
||||||
|
/v/////////+/+m8gP/urFX/7a1Y/+6sVf/urFX/7qxV7O6sVRoAAAAAAAAAAAAAAAAAAAAAAAAAAO6s
|
||||||
|
VWburFX/7qxV/+6sVf/urFX/7a5b/+zTs//sr1//7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/sr1//8uPQ////////////////////////////////////
|
||||||
|
////////6suj/+qzav/pxpj/9Onb//n07f/rr2D/7qxV/+6sVf/urFX/7qxVbwAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAO6sVQPurFW67qxV/+6sVf/urFX/7qxV/+6sVv/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7axY/+nGl//27uP/////////
|
||||||
|
/////////fz6//Lj0P/qunv/7qxV/+6sVf/urFX/7qxV/+m9gv/qt3X/7qxV/+6sVf/urFXB7qxVBQAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADurFUg7qxV6O6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/qtnP/6sqg/+3WuP/s07P/6cSS/+uyZf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVv/trVr/7qxV/+6s
|
||||||
|
VezurFUlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7qxVRu6sVfjurFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV++6sVUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO6s
|
||||||
|
VVzurFX97qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxVYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAADurFVd7qxV+O6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVfvurFVjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7qxVR+6sVeXurFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV6O6sVU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO6sVSPurFW37qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFW77qxVJgAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AADurFUB7qxVae6sVeTurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV5+6sVW3urFUDAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAO6sVRjurFWA7qxV4u6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVeTurFWE7qxVGwAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7qxVEu6sVV7urFW17qxV7+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVfDurFW47qxVX+6s
|
||||||
|
VRMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAA7qxVG+6sVUzurFWA7qxVrO6sVcnurFXa7qxV4u6sVeLurFXa7qxVye6sVa3urFWC7qxVTe6s
|
||||||
|
VR0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAP//gAH//6gr//wAAD//qCv/8AAAD/+oK//AAAAD/6gr/4AAAAH/qCv/AAAAAP+oK/4A
|
||||||
|
AAAAf6gr/AAAAAA/qCv4AAAAAB+oK/AAAAAAD6gr4AAAAAAHqCvgAAAAAAeoK8AAAAAAA6grwAAAAAAD
|
||||||
|
qCuAAAAAAAGoK4AAAAAAAagrgAAAAAAAqCsAAAAAAACoKwAAAAAAAKgrAAAAAAAAqCsAAAAAAACoKwAA
|
||||||
|
AAAAAKgrAAAAAAAAqCsAAAAAAACoKwAAAAAAAKgrAAAAAAAAqCsAAAAAAACoKwAAAAAAAKgrAAAAAAAA
|
||||||
|
qCsAAAAAAACoKwAAAAAAAKgrgAAAAAAAqCuAAAAAAAGoK4AAAAAAAagrwAAAAAADqCvAAAAAAAOoK+AA
|
||||||
|
AAAAB6gr4AAAAAAHqCvwAAAAAA+oK/gAAAAAH6gr/AAAAAA/qCv+AAAAAH+oK/8AAAAA/6gr/4AAAAH/
|
||||||
|
qCv/wAAAA/+oK//wAAAP/6gr//wAAD//qCv//4AB//+oKygAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApHY4FrR/
|
||||||
|
Ole+hjuVxos7w8uNPNvOjzznzo8858uNPNzGijzEvoU7l7WBO1mpejsYAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHg5Kr6F
|
||||||
|
O5XLjTvo0pE8/9ORPP/SkTz/0ZE8/9CQPP/QkDz/0ZE8/9KRPP/TkTz/0pE8/82OPOq/hjyZrXw7LAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo3U6CbuE
|
||||||
|
O4bPjzz005I8/9GRPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0ZE8/9OS
|
||||||
|
PP/PkDz1vYU8iah6PAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKR3
|
||||||
|
OibGizvG05E8/9GQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9GQPP/TkTz/yIs8yqx8PCkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AACsezsxy40849KRPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/zI485rKAPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAApXc6JMuNPOTSkTz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/zI485659PCcAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAKd4OwnHizzJ0pE8/9CQPP/QkDz/0JA9/9OgYP/YtIX/38Sh/+LMr//iy67/3sOf/9iy
|
||||||
|
gv/Tn13/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/x4s8zaV4
|
||||||
|
OwsAAAAAAAAAAAAAAAAAAAAAu4Q8hNOSPP/QkDz/0JA8/9GXS//YtIX/6NfC//Xv5//8+vj/////////
|
||||||
|
///8+vf/9O3k/+fVvv/YsYH/0JRF/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/Tkjz/u4Q7iQAAAAAAAAAAAAAAAKx7OyTPjzz10ZA8/9GXS//Ztoj/8une////////////////////
|
||||||
|
///////////////////////////////////38uz/3L2V/9CRP//QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9GRPP/Ojzz3onU5KQAAAAAAAAAAxo1BlNGQO//Ojjv/0JNC/9GWSP/QlET/0ZpR/9au
|
||||||
|
eP/n1b3//v79////////////////////////////////////////////7+TV/9GdWP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9SSPP+4gjqaAAAAAPGuVhHvrVXq5qRO/9qZRP/QkT3/zo46/8+P
|
||||||
|
O//QkDz/0JA8/9CQPP/To2P/8+vh////////////////////////////////////////////+fXw/9Oh
|
||||||
|
Yf/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0pE8/8qMO+2WbTYV7qxVUe6sVf/wrVb/761W/+mo
|
||||||
|
Uv/enUj/05M//86PO//PkD7/3cCZ//Lp3v/7+PT/////////////////////////////////////////
|
||||||
|
////////+PTv/9GcVf/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/05I8/699OljurFWR7qxV/+6s
|
||||||
|
Vf/urFX/761W//CuV//sqlT/4qJQ/+zdyf//////////////////////////////////////////////
|
||||||
|
////////////////////////7+TV/9CRP//QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/Tkjz/vIQ7mO6s
|
||||||
|
Vb/urFX/7qxV/+6sVf/urFX/7qxV/++tVf/ry5///v79//7+/f//////////////////////////////
|
||||||
|
////////////////////////////////////////2rqO/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9KR
|
||||||
|
PP/GijvF7qxV2u6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+u1bv/t1bb//fv4////////////////////
|
||||||
|
///////////////////////////////////////////////////48+3/0ZRG/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0ZA8/8uNPNzurFXl7qxV/+6sVf/urFX/7qxV/+6sVf/rsWP/9OjZ////////////////////
|
||||||
|
///////////////////////////////////////////////////////////////////YtIX/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/zo886O6sVeXurFX/7qxV/+6sVf/urFX/7qxW//Hiz///////////////
|
||||||
|
/////////////////////////////////////////////////////////////////////////////+rb
|
||||||
|
yP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/Ojzzo7qxV2e6sVf/urFX/7qxV/+6sVf/quHb/////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
////////+fXw/9CURf/QkDz/0JA8/9CQPP/QkDz/0ZA8/8yOPNzurFW/7qxV/+6sVf/urFX/7qxV/+nA
|
||||||
|
if/s1LT/9Onb////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////0Z5b/9CQPP/QkDz/0JA8/9CQPP/SkTz/x4s8xe6sVY/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+nEk//+/fz////////////////////////////+/v3/+PHo//To2f/+/v7/////////
|
||||||
|
///////////////////////////////////VqGz/zo46/8+PO//QkDz/0JA8/9KRPP+/hjyX7qxVUO6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/ssGH//Pr2///////////////////////y49D/6cOR/+qyaf/urVb/6rJp////
|
||||||
|
/////////////////////////////////////////////+e7f//goEr/1ZVB/8+PO//Ojzv/0pE8/7WB
|
||||||
|
PFfurFUQ7qxV6O6sVf/urFX/7qxV/+m+hv/////////////////z5tX/6rl6/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/qs2r////+////////////////////////////////////////////+PLp/+y4c//urFX/5aRO/9qZ
|
||||||
|
RP/Mjjztp3g6FQAAAADurFWQ7qxV/+6sVf/urFX/6cKP////////////682m/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+2sV//17N////////////////////////////////////////7+/v/06Nn/8uTT/+qz
|
||||||
|
a//wrVb/761W/+alUZYAAAAAAAAAAO6sVSHurFX07qxV/+6sVf/quXj//////+nDkf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+m+hP////////////////////////////////////////////jy
|
||||||
|
6v/qtnH/67Fj/+6sVf/urFX2761WJQAAAAAAAAAAAAAAAO6sVX7urFX/7qxV/+2vW//pvID/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+nEkv/7+PT//////////////////fz6/+rJ
|
||||||
|
n//rtW7/682n/+zTs//urFb/7qxV/+6sVYQAAAAAAAAAAAAAAAAAAAAA7qxVB+6sVcTurFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+u0bP/qy6H/7da4/+vN
|
||||||
|
pv/qtnP/7qxV/+6sVf/urFX/7K9f/+2sWP/urFXI7qxVCQAAAAAAAAAAAAAAAAAAAAAAAAAA7qxVIO6s
|
||||||
|
VeDurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV4+6sVSMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAA7qxVLO6sVd/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVeLurFUwAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAA7qxVIu6sVcHurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFXE7qxVJAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7qxVBu6sVX/urFXw7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFXy7qxVgu6sVQgAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO6sVSXurFWP7qxV5e6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFXl7qxVke6sVScAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AADurFUS7qxVUO6sVY7urFW97qxV2O6sVeXurFXl7qxV2O6sVb7urFWP7qxVUu6sVRMAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8AD//8AAP/8AAA/+AAAH/AAAA/gAAAHwAAAA8AA
|
||||||
|
AAOAAAABgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA
|
||||||
|
AAGAAAABwAAAA8AAAAPgAAAH8AAAD/gAAB/8AAA//wAA///AA/8oAAAAEAAAACAAAAABACAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKx7Oja9hTqTyYw8zs6PPOfOjzznyYw8zr6G
|
||||||
|
PJSvfjw3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo3Y7CbyEO5PRkDz805I8/9GRPP/QkDz/0JA8/9GR
|
||||||
|
PP/TkTz/0ZA8/b+GPJWrfDwKAAAAAAAAAAAAAAAAp3g8CcSJPLfTkjz/0ZA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/Tkjz/xoo8uqx8PQoAAAAAAAAAAL2FPJPUk0D/06Rm/92/mf/izK//4sut/9u6
|
||||||
|
j//Snlr/0JA8/9CQPP/QkDz/0JA8/9OSPP+9hTyWAAAAALiEQDLQkDz90JpS/93Amf/u4tP/////////
|
||||||
|
/////////fv5/+DIqP/QkkH/0JA8/9CQPP/RkDz/0JA8/qN1OTTtq1WS56VP/9qaRf/RkT3/0JdO/+rc
|
||||||
|
yP//////////////////////693L/9CSQf/QkDz/0JA8/9SSPP+3gTqW761Vz++tVv/wrVb/6K5h//fy
|
||||||
|
6v/////////////////////////////////gx6b/0JA8/9CQPP/RkTz/yYw80e6sVefurFX/7qxV/+q+
|
||||||
|
hP/69vD//////////////////////////////////fz7/9GbU//QkDz/0JA8/8+PPOnurFXn7qxV/+yw
|
||||||
|
Y//79/P////////////////////////////////////////////ZuIz/0JA8/9CQPP/Pjzzp7qxVz+6s
|
||||||
|
Vf/sr2H/8eLO/////////////v7+//n07f/+/v7/////////////////48yu/8+PO//Qjzv/yYs80e6s
|
||||||
|
VZLurFX/67Jm//7+/f/8+fb/68yl/+qza//rsmf//v37//////////////////Pn2P/ip1n/2phC/8CH
|
||||||
|
PJXurFUw7qxV/eq2c//169//6rNr/+6sVf/urFX/7q1W//Pm1f/////////////////8+fX/67+G/++t
|
||||||
|
Vf3lpVEyAAAAAO6sVZHtrVr/7a9c/+6sVf/urFX/7qxV/+6sVf/rsWP/7de5//Lj0P/pxJL/67Zy/+qz
|
||||||
|
av/urFWTAAAAAAAAAADurFUI7qxVtO6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFW37qxVCQAAAAAAAAAAAAAAAO6sVQjurFWQ7qxV++6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
VfvurFWS7qxVCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO6sVTPurFWQ7qxVzO6sVeburFXm7qxVzO6s
|
||||||
|
VZDurFU0AAAAAAAAAAAAAAAAAAAAAPAPrEHAA6xBgAGsQYABrEEAAKxBAACsQQAArEEAAKxBAACsQQAA
|
||||||
|
rEEAAKxBAACsQYABrEGAAaxBwAOsQfAPrEE=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
12
Core/FormNotification.Designer.cs
generated
12
Core/FormNotification.Designer.cs
generated
@@ -28,12 +28,14 @@ namespace TweetDck.Core {
|
|||||||
this.components = new System.ComponentModel.Container();
|
this.components = new System.ComponentModel.Container();
|
||||||
this.panelBrowser = new System.Windows.Forms.Panel();
|
this.panelBrowser = new System.Windows.Forms.Panel();
|
||||||
this.timerProgress = new System.Windows.Forms.Timer(this.components);
|
this.timerProgress = new System.Windows.Forms.Timer(this.components);
|
||||||
this.progressBarTimer = new FlatProgressBar();
|
this.progressBarTimer = new TweetDck.Core.Controls.FlatProgressBar();
|
||||||
|
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// panelBrowser
|
// panelBrowser
|
||||||
//
|
//
|
||||||
this.panelBrowser.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
this.panelBrowser.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)));
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.panelBrowser.BackColor = System.Drawing.Color.White;
|
this.panelBrowser.BackColor = System.Drawing.Color.White;
|
||||||
this.panelBrowser.Location = new System.Drawing.Point(0, 0);
|
this.panelBrowser.Location = new System.Drawing.Point(0, 0);
|
||||||
@@ -49,6 +51,8 @@ namespace TweetDck.Core {
|
|||||||
//
|
//
|
||||||
// progressBarTimer
|
// progressBarTimer
|
||||||
//
|
//
|
||||||
|
this.progressBarTimer.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.progressBarTimer.BackColor = System.Drawing.SystemColors.Control;
|
this.progressBarTimer.BackColor = System.Drawing.SystemColors.Control;
|
||||||
this.progressBarTimer.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(28)))), ((int)(((byte)(99)))), ((int)(((byte)(153)))));
|
this.progressBarTimer.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(28)))), ((int)(((byte)(99)))), ((int)(((byte)(153)))));
|
||||||
this.progressBarTimer.Location = new System.Drawing.Point(0, 118);
|
this.progressBarTimer.Location = new System.Drawing.Point(0, 118);
|
||||||
@@ -68,7 +72,10 @@ namespace TweetDck.Core {
|
|||||||
this.Controls.Add(this.panelBrowser);
|
this.Controls.Add(this.panelBrowser);
|
||||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
|
||||||
this.Location = new System.Drawing.Point(-32000, -32000);
|
this.Location = new System.Drawing.Point(-32000, -32000);
|
||||||
|
this.MaximizeBox = false;
|
||||||
|
this.MinimizeBox = false;
|
||||||
this.Name = "FormNotification";
|
this.Name = "FormNotification";
|
||||||
|
this.ShowIcon = false;
|
||||||
this.ShowInTaskbar = false;
|
this.ShowInTaskbar = false;
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
|
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
|
||||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormNotification_FormClosing);
|
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormNotification_FormClosing);
|
||||||
@@ -81,5 +88,6 @@ namespace TweetDck.Core {
|
|||||||
private System.Windows.Forms.Panel panelBrowser;
|
private System.Windows.Forms.Panel panelBrowser;
|
||||||
private Controls.FlatProgressBar progressBarTimer;
|
private Controls.FlatProgressBar progressBarTimer;
|
||||||
private System.Windows.Forms.Timer timerProgress;
|
private System.Windows.Forms.Timer timerProgress;
|
||||||
|
private System.Windows.Forms.ToolTip toolTip;
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -7,12 +7,14 @@ using CefSharp.WinForms;
|
|||||||
using TweetDck.Configuration;
|
using TweetDck.Configuration;
|
||||||
using TweetDck.Core.Handling;
|
using TweetDck.Core.Handling;
|
||||||
using TweetDck.Resources;
|
using TweetDck.Resources;
|
||||||
|
using TweetDck.Core.Utils;
|
||||||
|
|
||||||
namespace TweetDck.Core{
|
namespace TweetDck.Core{
|
||||||
sealed partial class FormNotification : Form{
|
sealed partial class FormNotification : Form{
|
||||||
public Func<bool> CanMoveWindow = () => true;
|
public Func<bool> CanMoveWindow = () => true;
|
||||||
|
|
||||||
private readonly Form owner;
|
private readonly Form owner;
|
||||||
|
private readonly TrayIcon trayIcon;
|
||||||
private readonly ChromiumWebBrowser browser;
|
private readonly ChromiumWebBrowser browser;
|
||||||
|
|
||||||
private readonly Queue<TweetNotification> tweetQueue = new Queue<TweetNotification>(4);
|
private readonly Queue<TweetNotification> tweetQueue = new Queue<TweetNotification>(4);
|
||||||
@@ -21,36 +23,55 @@ namespace TweetDck.Core{
|
|||||||
|
|
||||||
private readonly string notificationJS;
|
private readonly string notificationJS;
|
||||||
|
|
||||||
public FormNotification(Form owner, TweetDeckBridge bridge, bool autoHide){
|
protected override bool ShowWithoutActivation{
|
||||||
|
get{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool FreezeTimer { get; set; }
|
||||||
|
public bool ContextMenuOpen { get; set; }
|
||||||
|
public string CurrentUrl { get; private set; }
|
||||||
|
|
||||||
|
private static int BaseClientWidth{
|
||||||
|
get{
|
||||||
|
int level = TweetNotification.FontSizeLevel;
|
||||||
|
return level == 0 ? 284 : (int)Math.Round(284.0*(1.0+0.05*level));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int BaseClientHeight{
|
||||||
|
get{
|
||||||
|
int level = TweetNotification.FontSizeLevel;
|
||||||
|
return level == 0 ? 118 : (int)Math.Round(118.0*(1.0+0.075*level));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public FormNotification(Form owner, TweetDeckBridge bridge, TrayIcon trayIcon, bool autoHide){
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
Text = Program.BrandName;
|
Text = Program.BrandName;
|
||||||
|
|
||||||
this.owner = owner;
|
this.owner = owner;
|
||||||
|
this.trayIcon = trayIcon;
|
||||||
this.autoHide = autoHide;
|
this.autoHide = autoHide;
|
||||||
|
|
||||||
owner.FormClosed += (sender, args) => Close();
|
owner.FormClosed += (sender, args) => Close();
|
||||||
|
|
||||||
notificationJS = ScriptLoader.LoadResource("notification.js");
|
notificationJS = ScriptLoader.LoadResource("notification.js");
|
||||||
|
|
||||||
browser = new ChromiumWebBrowser("about:blank"){ MenuHandler = new ContextMenuNotification() };
|
browser = new ChromiumWebBrowser("about:blank"){ MenuHandler = new ContextMenuNotification(this,autoHide) };
|
||||||
browser.FrameLoadEnd += Browser_FrameLoadEnd;
|
browser.FrameLoadEnd += Browser_FrameLoadEnd;
|
||||||
|
browser.RegisterJsObject("$TD",bridge);
|
||||||
if (bridge != null){
|
|
||||||
browser.RegisterJsObject("$TD",bridge);
|
|
||||||
}
|
|
||||||
|
|
||||||
panelBrowser.Controls.Add(browser);
|
panelBrowser.Controls.Add(browser);
|
||||||
|
|
||||||
Disposed += (sender, args) => browser.Dispose();
|
if (autoHide){
|
||||||
}
|
Program.UserConfig.MuteToggled += Config_MuteToggled;
|
||||||
|
Disposed += (sender, args) => Program.UserConfig.MuteToggled -= Config_MuteToggled;
|
||||||
public FormNotification(Form owner, bool autoHide) : this(owner,null,autoHide){}
|
|
||||||
|
|
||||||
private void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e){
|
|
||||||
if (e.Frame.IsMain && notificationJS != null){
|
|
||||||
browser.ExecuteScriptAsync(notificationJS);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Disposed += (sender, args) => browser.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void WndProc(ref Message m){
|
protected override void WndProc(ref Message m){
|
||||||
@@ -61,25 +82,74 @@ namespace TweetDck.Core{
|
|||||||
base.WndProc(ref m);
|
base.WndProc(ref m);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ShowNotification(TweetNotification notification){
|
// event handlers
|
||||||
MoveToVisibleLocation();
|
|
||||||
|
|
||||||
tweetQueue.Enqueue(notification);
|
private void timerHideProgress_Tick(object sender, EventArgs e){
|
||||||
|
if (Bounds.Contains(Cursor.Position) || FreezeTimer || ContextMenuOpen)return;
|
||||||
|
|
||||||
if (!timerProgress.Enabled){
|
timeLeft -= timerProgress.Interval;
|
||||||
LoadNextNotification();
|
progressBarTimer.SetValueInstant((int)Math.Min(1000,Math.Round(1050.0*(totalTime-timeLeft)/totalTime)));
|
||||||
|
|
||||||
|
if (timeLeft <= 0){
|
||||||
|
FinishCurrentTweet();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ShowNotificationForSettings(bool resetAnimation){
|
private void Config_MuteToggled(object sender, EventArgs e){
|
||||||
|
if (Program.UserConfig.MuteNotifications){
|
||||||
|
HideNotification();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if (tweetQueue.Count > 0){
|
||||||
|
MoveToVisibleLocation();
|
||||||
|
LoadNextNotification();
|
||||||
|
}
|
||||||
|
|
||||||
|
trayIcon.HasNotifications = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e){
|
||||||
|
if (e.Frame.IsMain && notificationJS != null && browser.Address != "about:blank"){
|
||||||
|
browser.ExecuteScriptAsync(notificationJS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FormNotification_FormClosing(object sender, FormClosingEventArgs e){
|
||||||
|
if (e.CloseReason == CloseReason.UserClosing){
|
||||||
|
HideNotification();
|
||||||
|
tweetQueue.Clear();
|
||||||
|
e.Cancel = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// notification methods
|
||||||
|
|
||||||
|
public void ShowNotification(TweetNotification notification){
|
||||||
|
if (Program.UserConfig.MuteNotifications){
|
||||||
|
tweetQueue.Enqueue(notification);
|
||||||
|
trayIcon.HasNotifications = true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
MoveToVisibleLocation();
|
||||||
|
|
||||||
|
tweetQueue.Enqueue(notification);
|
||||||
|
UpdateTitle();
|
||||||
|
|
||||||
|
if (!timerProgress.Enabled){
|
||||||
|
LoadNextNotification();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ShowNotificationForSettings(bool reset){
|
||||||
if (browser.Address == "about:blank"){
|
if (browser.Address == "about:blank"){
|
||||||
browser.Load("about:blank"); // required, otherwise shit breaks
|
browser.Load("about:blank"); // required, otherwise shit breaks
|
||||||
browser.LoadHtml(TweetNotification.ExampleTweet.GenerateHtml(),"http://tweetdeck.twitter.com/");
|
reset = true;
|
||||||
resetAnimation = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resetAnimation){
|
if (reset){
|
||||||
totalTime = timeLeft = TweetNotification.ExampleTweet.GetDisplayDuration(Program.UserConfig.NotificationDuration);
|
LoadTweet(TweetNotification.ExampleTweet);
|
||||||
timerProgress.Start();
|
timerProgress.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,10 +159,22 @@ namespace TweetDck.Core{
|
|||||||
public void HideNotification(){
|
public void HideNotification(){
|
||||||
browser.LoadHtml("","about:blank");
|
browser.LoadHtml("","about:blank");
|
||||||
Location = new Point(-32000,-32000);
|
Location = new Point(-32000,-32000);
|
||||||
TopMost = false;
|
progressBarTimer.Value = 0;
|
||||||
timerProgress.Stop();
|
timerProgress.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void FinishCurrentTweet(){
|
||||||
|
if (tweetQueue.Count > 0){
|
||||||
|
LoadNextNotification();
|
||||||
|
}
|
||||||
|
else if (autoHide){
|
||||||
|
HideNotification();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
timerProgress.Stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void LoadNextNotification(){
|
private void LoadNextNotification(){
|
||||||
TweetNotification tweet = tweetQueue.Dequeue();
|
TweetNotification tweet = tweetQueue.Dequeue();
|
||||||
|
|
||||||
@@ -100,23 +182,34 @@ namespace TweetDck.Core{
|
|||||||
browser.Load("about:blank"); // required, otherwise shit breaks
|
browser.Load("about:blank"); // required, otherwise shit breaks
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LoadTweet(tweet);
|
||||||
|
timerProgress.Stop();
|
||||||
|
timerProgress.Start();
|
||||||
|
|
||||||
|
UpdateTitle();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LoadTweet(TweetNotification tweet){
|
||||||
browser.LoadHtml(tweet.GenerateHtml(),"http://tweetdeck.twitter.com/");
|
browser.LoadHtml(tweet.GenerateHtml(),"http://tweetdeck.twitter.com/");
|
||||||
|
|
||||||
totalTime = timeLeft = tweet.GetDisplayDuration(Program.UserConfig.NotificationDuration);
|
totalTime = timeLeft = tweet.GetDisplayDuration(Program.UserConfig.NotificationDuration);
|
||||||
timerProgress.Stop();
|
progressBarTimer.Value = 0;
|
||||||
timerProgress.Start();
|
|
||||||
|
CurrentUrl = tweet.Url;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MoveToVisibleLocation(){
|
private void MoveToVisibleLocation(){
|
||||||
|
bool needsReactivating = Location.X == -32000;
|
||||||
|
|
||||||
UserConfig config = Program.UserConfig;
|
UserConfig config = Program.UserConfig;
|
||||||
Screen screen = Screen.FromControl(owner);
|
Screen screen = Screen.FromControl(owner);
|
||||||
|
|
||||||
if (config.DisplayNotificationTimer){
|
if (config.DisplayNotificationTimer){
|
||||||
ClientSize = new Size(ClientSize.Width,122);
|
ClientSize = new Size(BaseClientWidth,BaseClientHeight+4);
|
||||||
progressBarTimer.Visible = true;
|
progressBarTimer.Visible = true;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
ClientSize = new Size(ClientSize.Width,118);
|
ClientSize = new Size(BaseClientWidth,BaseClientHeight);
|
||||||
progressBarTimer.Visible = false;
|
progressBarTimer.Visible = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,30 +246,23 @@ namespace TweetDck.Core{
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
TopMost = true;
|
if (needsReactivating){
|
||||||
}
|
NativeMethods.SetFormPos(this,NativeMethods.HWND_TOPMOST,NativeMethods.SWP_NOACTIVATE);
|
||||||
|
|
||||||
private void timerHideProgress_Tick(object sender, EventArgs e){
|
|
||||||
if (Bounds.Contains(Cursor.Position))return;
|
|
||||||
|
|
||||||
timeLeft -= timerProgress.Interval;
|
|
||||||
progressBarTimer.SetValueInstant((int)Math.Min(1000,Math.Round(1050.0*(totalTime-timeLeft)/totalTime)));
|
|
||||||
|
|
||||||
if (timeLeft <= 0){
|
|
||||||
if (tweetQueue.Count > 0){
|
|
||||||
LoadNextNotification();
|
|
||||||
}
|
|
||||||
else if (autoHide){
|
|
||||||
HideNotification();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FormNotification_FormClosing(object sender, FormClosingEventArgs e){
|
private void UpdateTitle(){
|
||||||
if (e.CloseReason == CloseReason.UserClosing){
|
Text = tweetQueue.Count > 0 ? Program.BrandName+" ("+tweetQueue.Count+" more left)" : Program.BrandName;
|
||||||
HideNotification();
|
}
|
||||||
tweetQueue.Clear();
|
|
||||||
e.Cancel = true;
|
public void DisplayTooltip(string text){
|
||||||
|
if (string.IsNullOrEmpty(text)){
|
||||||
|
toolTip.Hide(this);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Point position = PointToClient(Cursor.Position);
|
||||||
|
position.Offset(20,5);
|
||||||
|
toolTip.Show(text,this,position);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -12,9 +12,7 @@ namespace TweetDck.Core.Handling{
|
|||||||
private const int MenuCopyImageUrl = 26504;
|
private const int MenuCopyImageUrl = 26504;
|
||||||
|
|
||||||
public virtual void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model){
|
public virtual void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model){
|
||||||
RemoveSeparatorIfLast(model);
|
if (parameters.TypeFlags.HasFlag(ContextMenuType.Link) && !parameters.UnfilteredLinkUrl.EndsWith("tweetdeck.twitter.com/#")){
|
||||||
|
|
||||||
if (parameters.TypeFlags.HasFlag(ContextMenuType.Link)){
|
|
||||||
model.AddItem((CefMenuCommand)MenuOpenUrlInBrowser,"Open in browser");
|
model.AddItem((CefMenuCommand)MenuOpenUrlInBrowser,"Open in browser");
|
||||||
model.AddItem((CefMenuCommand)MenuCopyUrl,"Copy link address");
|
model.AddItem((CefMenuCommand)MenuCopyUrl,"Copy link address");
|
||||||
model.AddSeparator();
|
model.AddSeparator();
|
||||||
@@ -35,7 +33,7 @@ namespace TweetDck.Core.Handling{
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case MenuCopyUrl:
|
case MenuCopyUrl:
|
||||||
Clipboard.SetText(parameters.UnfilteredLinkUrl,TextDataFormat.Text);
|
Clipboard.SetText(string.IsNullOrEmpty(TweetDeckBridge.LastRightClickedLink) ? parameters.UnfilteredLinkUrl : TweetDeckBridge.LastRightClickedLink,TextDataFormat.UnicodeText);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MenuOpenImageInBrowser:
|
case MenuOpenImageInBrowser:
|
||||||
@@ -66,7 +64,7 @@ namespace TweetDck.Core.Handling{
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case MenuCopyImageUrl:
|
case MenuCopyImageUrl:
|
||||||
Clipboard.SetText(parameters.SourceUrl,TextDataFormat.Text);
|
Clipboard.SetText(parameters.SourceUrl,TextDataFormat.UnicodeText);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,12 +77,6 @@ namespace TweetDck.Core.Handling{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void RemoveSeparatorIfFirst(IMenuModel model){
|
|
||||||
if (model.Count > 0 && model.GetTypeAt(model.Count-1) == MenuItemType.Separator){
|
|
||||||
model.RemoveAt(model.Count-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void RemoveSeparatorIfLast(IMenuModel model){
|
protected void RemoveSeparatorIfLast(IMenuModel model){
|
||||||
if (model.Count > 0 && model.GetTypeAt(model.Count-1) == MenuItemType.Separator){
|
if (model.Count > 0 && model.GetTypeAt(model.Count-1) == MenuItemType.Separator){
|
||||||
model.RemoveAt(model.Count-1);
|
model.RemoveAt(model.Count-1);
|
||||||
|
@@ -1,9 +1,14 @@
|
|||||||
using CefSharp;
|
using CefSharp;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using TweetDck.Core.Controls;
|
||||||
|
|
||||||
namespace TweetDck.Core.Handling{
|
namespace TweetDck.Core.Handling{
|
||||||
class ContextMenuBrowser : ContextMenuBase{
|
class ContextMenuBrowser : ContextMenuBase{
|
||||||
private const int MenuSettings = 26600;
|
private const int MenuSettings = 26600;
|
||||||
private const int MenuAbout = 26601;
|
private const int MenuAbout = 26601;
|
||||||
|
private const int MenuMute = 26602;
|
||||||
|
private const int MenuCopyTweetUrl = 26603;
|
||||||
|
private const int MenuCopyTweetEmbeddedUrl = 26604;
|
||||||
|
|
||||||
private readonly FormBrowser form;
|
private readonly FormBrowser form;
|
||||||
|
|
||||||
@@ -16,12 +21,28 @@ namespace TweetDck.Core.Handling{
|
|||||||
model.Remove(CefMenuCommand.Forward);
|
model.Remove(CefMenuCommand.Forward);
|
||||||
model.Remove(CefMenuCommand.Print);
|
model.Remove(CefMenuCommand.Print);
|
||||||
model.Remove(CefMenuCommand.ViewSource);
|
model.Remove(CefMenuCommand.ViewSource);
|
||||||
|
RemoveSeparatorIfLast(model);
|
||||||
|
|
||||||
RemoveSeparatorIfFirst(model);
|
if (!string.IsNullOrEmpty(TweetDeckBridge.LastHighlightedTweet)){
|
||||||
|
model.AddItem((CefMenuCommand)MenuCopyTweetUrl,"Copy tweet address");
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(TweetDeckBridge.LastHighlightedTweetEmbedded)){
|
||||||
|
model.AddItem((CefMenuCommand)MenuCopyTweetEmbeddedUrl,"Copy quoted tweet address");
|
||||||
|
}
|
||||||
|
|
||||||
|
model.AddSeparator();
|
||||||
|
}
|
||||||
|
|
||||||
base.OnBeforeContextMenu(browserControl,browser,frame,parameters,model);
|
base.OnBeforeContextMenu(browserControl,browser,frame,parameters,model);
|
||||||
|
|
||||||
|
if (model.Count > 0){
|
||||||
|
RemoveSeparatorIfLast(model);
|
||||||
|
model.AddSeparator();
|
||||||
|
}
|
||||||
|
|
||||||
model.AddItem(CefMenuCommand.Reload,"Reload");
|
model.AddItem(CefMenuCommand.Reload,"Reload");
|
||||||
|
model.AddCheckItem((CefMenuCommand)MenuMute,"Mute notifications");
|
||||||
|
model.SetChecked((CefMenuCommand)MenuMute,Program.UserConfig.MuteNotifications);
|
||||||
model.AddSeparator();
|
model.AddSeparator();
|
||||||
|
|
||||||
if (TweetNotification.IsReady){
|
if (TweetNotification.IsReady){
|
||||||
@@ -38,17 +59,27 @@ namespace TweetDck.Core.Handling{
|
|||||||
|
|
||||||
switch((int)commandId){
|
switch((int)commandId){
|
||||||
case MenuSettings:
|
case MenuSettings:
|
||||||
|
form.InvokeSafe(form.OpenSettings);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case MenuAbout:
|
||||||
|
form.InvokeSafe(form.OpenAbout);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case MenuMute:
|
||||||
form.InvokeSafe(() => {
|
form.InvokeSafe(() => {
|
||||||
form.OpenSettings();
|
Program.UserConfig.MuteNotifications = !Program.UserConfig.MuteNotifications;
|
||||||
|
Program.UserConfig.Save();
|
||||||
});
|
});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case MenuAbout:
|
case MenuCopyTweetUrl:
|
||||||
form.InvokeSafe(() => {
|
Clipboard.SetText(TweetDeckBridge.LastHighlightedTweet,TextDataFormat.UnicodeText);
|
||||||
form.OpenAbout();
|
return true;
|
||||||
});
|
|
||||||
|
|
||||||
|
case MenuCopyTweetEmbeddedUrl:
|
||||||
|
Clipboard.SetText(TweetDeckBridge.LastHighlightedTweetEmbedded,TextDataFormat.UnicodeText);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,16 +1,77 @@
|
|||||||
using CefSharp;
|
using System.Windows.Forms;
|
||||||
|
using CefSharp;
|
||||||
|
using TweetDck.Core.Controls;
|
||||||
|
|
||||||
namespace TweetDck.Core.Handling{
|
namespace TweetDck.Core.Handling{
|
||||||
class ContextMenuNotification : ContextMenuBase{
|
class ContextMenuNotification : ContextMenuBase{
|
||||||
|
private const int MenuSkipTweet = 26600;
|
||||||
|
private const int MenuFreeze = 26601;
|
||||||
|
private const int MenuCopyTweetUrl = 26602;
|
||||||
|
private const int MenuCopyTweetEmbeddedUrl = 26603;
|
||||||
|
|
||||||
|
private readonly FormNotification form;
|
||||||
|
private readonly bool enableCustomMenu;
|
||||||
|
|
||||||
|
public ContextMenuNotification(FormNotification form, bool enableCustomMenu){
|
||||||
|
this.form = form;
|
||||||
|
this.enableCustomMenu = enableCustomMenu;
|
||||||
|
}
|
||||||
|
|
||||||
public override void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model){
|
public override void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model){
|
||||||
model.Clear();
|
model.Clear();
|
||||||
|
|
||||||
|
if (enableCustomMenu){
|
||||||
|
model.AddItem((CefMenuCommand)MenuSkipTweet,"Skip tweet");
|
||||||
|
model.AddCheckItem((CefMenuCommand)MenuFreeze,"Freeze");
|
||||||
|
model.SetChecked((CefMenuCommand)MenuFreeze,form.FreezeTimer);
|
||||||
|
model.AddSeparator();
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(form.CurrentUrl)){
|
||||||
|
model.AddItem((CefMenuCommand)MenuCopyTweetUrl,"Copy tweet address");
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(TweetDeckBridge.NotificationTweetEmbedded)){
|
||||||
|
model.AddItem((CefMenuCommand)MenuCopyTweetEmbeddedUrl,"Copy quoted tweet address");
|
||||||
|
}
|
||||||
|
|
||||||
|
model.AddSeparator();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
base.OnBeforeContextMenu(browserControl,browser,frame,parameters,model);
|
base.OnBeforeContextMenu(browserControl,browser,frame,parameters,model);
|
||||||
RemoveSeparatorIfLast(model);
|
RemoveSeparatorIfLast(model);
|
||||||
|
|
||||||
|
form.InvokeSafe(() => form.ContextMenuOpen = true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags){
|
public override bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags){
|
||||||
|
if (base.OnContextMenuCommand(browserControl,browser,frame,parameters,commandId,eventFlags)){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch((int)commandId){
|
||||||
|
case MenuSkipTweet:
|
||||||
|
form.InvokeSafe(form.FinishCurrentTweet);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case MenuFreeze:
|
||||||
|
form.InvokeSafe(() => form.FreezeTimer = !form.FreezeTimer);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case MenuCopyTweetUrl:
|
||||||
|
Clipboard.SetText(form.CurrentUrl,TextDataFormat.UnicodeText);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case MenuCopyTweetEmbeddedUrl:
|
||||||
|
Clipboard.SetText(TweetDeckBridge.NotificationTweetEmbedded,TextDataFormat.UnicodeText);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame){
|
||||||
|
base.OnContextMenuDismissed(browserControl,browser,frame);
|
||||||
|
form.InvokeSafe(() => form.ContextMenuOpen = false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
27
Core/Handling/DialogHandlerBrowser.cs
Normal file
27
Core/Handling/DialogHandlerBrowser.cs
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
using CefSharp;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using TweetDck.Core.Controls;
|
||||||
|
|
||||||
|
namespace TweetDck.Core.Handling{
|
||||||
|
class DialogHandlerBrowser : IDialogHandler{
|
||||||
|
private readonly FormBrowser form;
|
||||||
|
|
||||||
|
public DialogHandlerBrowser(FormBrowser form){
|
||||||
|
this.form = form;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool OnFileDialog(IWebBrowser browserControl, IBrowser browser, CefFileDialogMode mode, string title, string defaultFilePath, List<string> acceptFilters, int selectedAcceptFilter, IFileDialogCallback callback){
|
||||||
|
if (!string.IsNullOrEmpty(TweetDeckBridge.ClipboardImagePath)){
|
||||||
|
callback.Continue(selectedAcceptFilter,new List<string>{ TweetDeckBridge.ClipboardImagePath });
|
||||||
|
|
||||||
|
form.InvokeSafe(() => {
|
||||||
|
TweetDeckBridge.ClipboardImagePath = string.Empty;
|
||||||
|
});
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -1,7 +1,19 @@
|
|||||||
using TweetDck.Core.Utils;
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
using System.IO;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using TweetDck.Core.Utils;
|
||||||
|
using TweetDck.Core.Controls;
|
||||||
|
|
||||||
namespace TweetDck.Core.Handling{
|
namespace TweetDck.Core.Handling{
|
||||||
class TweetDeckBridge{
|
class TweetDeckBridge{
|
||||||
|
public static string LastRightClickedLink = string.Empty;
|
||||||
|
public static string LastHighlightedTweet = string.Empty;
|
||||||
|
public static string LastHighlightedTweetEmbedded = string.Empty;
|
||||||
|
public static string NotificationTweetEmbedded = string.Empty;
|
||||||
|
public static string ClipboardImagePath = string.Empty;
|
||||||
|
|
||||||
private readonly FormBrowser form;
|
private readonly FormBrowser form;
|
||||||
|
|
||||||
public string BrandName{
|
public string BrandName{
|
||||||
@@ -16,15 +28,15 @@ namespace TweetDck.Core.Handling{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool UpdateCheckEnabled{
|
public bool MuteNotifications{
|
||||||
get{
|
get{
|
||||||
return Program.UserConfig.EnableUpdateCheck;
|
return Program.UserConfig.MuteNotifications;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string DismissedVersionTag{
|
public bool ExpandLinksOnHover{
|
||||||
get{
|
get{
|
||||||
return Program.UserConfig.DismissedUpdate ?? string.Empty;
|
return Program.UserConfig.ExpandLinksOnHover;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,28 +56,70 @@ namespace TweetDck.Core.Handling{
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetLastRightClickedLink(string link){
|
||||||
|
form.InvokeSafe(() => LastRightClickedLink = link);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetLastHighlightedTweet(string link, string embeddedLink){
|
||||||
|
form.InvokeSafe(() => {
|
||||||
|
LastHighlightedTweet = link;
|
||||||
|
LastHighlightedTweetEmbedded = embeddedLink;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetNotificationTweetEmbedded(string link){
|
||||||
|
form.InvokeSafe(() => NotificationTweetEmbedded = link);
|
||||||
|
}
|
||||||
|
|
||||||
public void OpenSettingsMenu(){
|
public void OpenSettingsMenu(){
|
||||||
|
form.InvokeSafe(form.OpenSettings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnTweetPopup(string tweetHtml, string tweetUrl, int tweetCharacters){
|
||||||
form.InvokeSafe(() => {
|
form.InvokeSafe(() => {
|
||||||
form.OpenSettings();
|
form.OnTweetPopup(new TweetNotification(tweetHtml,tweetUrl,tweetCharacters));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnTweetPopup(string tweetHtml, int tweetCharacters){
|
public void OnTweetSound(){
|
||||||
|
form.InvokeSafe(form.OnTweetSound);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DisplayTooltip(string text, bool showInNotification){
|
||||||
form.InvokeSafe(() => {
|
form.InvokeSafe(() => {
|
||||||
form.OnTweetPopup(new TweetNotification(tweetHtml,tweetCharacters));
|
form.DisplayTooltip(text,showInNotification);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnUpdateAccepted(string versionTag, string downloadUrl){
|
public void TryPasteImage(){
|
||||||
form.InvokeSafe(() => {
|
form.InvokeSafe(() => {
|
||||||
form.BeginUpdateProcess(versionTag,downloadUrl);
|
if (Clipboard.ContainsImage()){
|
||||||
|
Image img = Clipboard.GetImage();
|
||||||
|
if (img == null)return;
|
||||||
|
|
||||||
|
try{
|
||||||
|
Directory.CreateDirectory(Program.TemporaryPath);
|
||||||
|
|
||||||
|
ClipboardImagePath = Path.Combine(Program.TemporaryPath,"TD-Img-"+DateTime.Now.Ticks+".png");
|
||||||
|
img.Save(ClipboardImagePath,ImageFormat.Png);
|
||||||
|
|
||||||
|
form.OnImagePasted();
|
||||||
|
}catch(Exception e){
|
||||||
|
Program.HandleException("Could not paste image from clipboard.",e);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnUpdateDismissed(string versionTag){
|
public void ClickUploadImage(int offsetX, int offsetY){
|
||||||
form.InvokeSafe(() => {
|
form.InvokeSafe(() => {
|
||||||
Program.UserConfig.DismissedUpdate = versionTag;
|
Point prevPos = Cursor.Position;
|
||||||
Program.UserConfig.Save();
|
|
||||||
|
Cursor.Position = form.PointToScreen(new Point(offsetX,offsetY));
|
||||||
|
NativeMethods.SimulateMouseClick(NativeMethods.MouseButton.Left);
|
||||||
|
Cursor.Position = prevPos;
|
||||||
|
|
||||||
|
form.OnImagePastedFinish();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -12,6 +12,18 @@ namespace TweetDck.Core.Handling{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int FontSizeLevel{
|
||||||
|
get{
|
||||||
|
switch(FontSizeClass){
|
||||||
|
case "largest": return 4;
|
||||||
|
case "large": return 3;
|
||||||
|
case "medium": return 2;
|
||||||
|
case "small": return 1;
|
||||||
|
default: return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static TweetNotification ExampleTweet{
|
public static TweetNotification ExampleTweet{
|
||||||
get{
|
get{
|
||||||
StringBuilder build = new StringBuilder();
|
StringBuilder build = new StringBuilder();
|
||||||
@@ -26,7 +38,7 @@ namespace TweetDck.Core.Handling{
|
|||||||
build.Append(@"<div class='tweet-body'><p class='js-tweet-text tweet-text with-linebreaks'>This is an example tweet, which lets you test the location and duration of popup notifications.</p></div>");
|
build.Append(@"<div class='tweet-body'><p class='js-tweet-text tweet-text with-linebreaks'>This is an example tweet, which lets you test the location and duration of popup notifications.</p></div>");
|
||||||
build.Append(@"</div></div></article>");
|
build.Append(@"</div></div></article>");
|
||||||
|
|
||||||
return new TweetNotification(build.ToString(),95);
|
return new TweetNotification(build.ToString(),"",95);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,11 +58,19 @@ namespace TweetDck.Core.Handling{
|
|||||||
Short, Medium, Long, VeryLong
|
Short, Medium, Long, VeryLong
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string Url{
|
||||||
|
get{
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private readonly string html;
|
private readonly string html;
|
||||||
|
private readonly string url;
|
||||||
private readonly int characters;
|
private readonly int characters;
|
||||||
|
|
||||||
public TweetNotification(string html, int characters){
|
public TweetNotification(string html, string url, int characters){
|
||||||
this.html = html;
|
this.html = html;
|
||||||
|
this.url = url;
|
||||||
this.characters = characters;
|
this.characters = characters;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,9 +90,9 @@ namespace TweetDck.Core.Handling{
|
|||||||
public string GenerateHtml(){
|
public string GenerateHtml(){
|
||||||
StringBuilder build = new StringBuilder();
|
StringBuilder build = new StringBuilder();
|
||||||
build.Append("<!DOCTYPE html>");
|
build.Append("<!DOCTYPE html>");
|
||||||
build.Append("<html class='os-windows ").Append(FontSizeClass).Append("'>");
|
build.Append("<html class='os-windows txt-base-").Append(FontSizeClass).Append("'>");
|
||||||
build.Append("<head>").Append(HeadTag).Append("</head>");
|
build.Append("<head>").Append(HeadTag).Append("</head>");
|
||||||
build.Append("<body class='hearty'><div class='app-columns-container'><div class='column' style='width:100%'>");
|
build.Append("<body class='hearty'><div class='app-columns-container'><div class='column scroll-styled-v' style='width:100%;overflow-y:auto'>");
|
||||||
build.Append(html);
|
build.Append(html);
|
||||||
build.Append("</div></div></body>");
|
build.Append("</div></div></body>");
|
||||||
build.Append("</html>");
|
build.Append("</html>");
|
||||||
|
121
Core/Other/FormAbout.Designer.cs
generated
121
Core/Other/FormAbout.Designer.cs
generated
@@ -25,44 +25,131 @@ namespace TweetDck.Core.Other {
|
|||||||
/// the contents of this method with the code editor.
|
/// the contents of this method with the code editor.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent() {
|
private void InitializeComponent() {
|
||||||
this.labelAbout = new TweetDck.Core.Controls.RichTextLabel();
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormAbout));
|
||||||
|
this.pictureLogo = new System.Windows.Forms.PictureBox();
|
||||||
|
this.labelDescription = new System.Windows.Forms.Label();
|
||||||
|
this.labelSourceCode = new System.Windows.Forms.LinkLabel();
|
||||||
|
this.labelWebsite = new System.Windows.Forms.LinkLabel();
|
||||||
|
this.tablePanelLinks = new System.Windows.Forms.TableLayoutPanel();
|
||||||
|
this.labelIssues = new System.Windows.Forms.LinkLabel();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.pictureLogo)).BeginInit();
|
||||||
|
this.tablePanelLinks.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// labelAbout
|
// pictureLogo
|
||||||
//
|
//
|
||||||
this.labelAbout.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
this.pictureLogo.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
|
||||||
|
this.pictureLogo.ErrorImage = null;
|
||||||
|
this.pictureLogo.Image = ((System.Drawing.Image)(resources.GetObject("pictureLogo.Image")));
|
||||||
|
this.pictureLogo.InitialImage = null;
|
||||||
|
this.pictureLogo.Location = new System.Drawing.Point(12, 12);
|
||||||
|
this.pictureLogo.Name = "pictureLogo";
|
||||||
|
this.pictureLogo.Size = new System.Drawing.Size(96, 96);
|
||||||
|
this.pictureLogo.TabIndex = 0;
|
||||||
|
this.pictureLogo.TabStop = false;
|
||||||
|
//
|
||||||
|
// labelDescription
|
||||||
|
//
|
||||||
|
this.labelDescription.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||||
| System.Windows.Forms.AnchorStyles.Left)
|
| System.Windows.Forms.AnchorStyles.Left)
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.labelAbout.BackColor = System.Drawing.Color.White;
|
this.labelDescription.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||||
this.labelAbout.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
this.labelDescription.Location = new System.Drawing.Point(114, 12);
|
||||||
this.labelAbout.Location = new System.Drawing.Point(12, 12);
|
this.labelDescription.Name = "labelDescription";
|
||||||
this.labelAbout.Name = "labelAbout";
|
this.labelDescription.Size = new System.Drawing.Size(232, 109);
|
||||||
this.labelAbout.ReadOnly = true;
|
this.labelDescription.TabIndex = 1;
|
||||||
this.labelAbout.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None;
|
//
|
||||||
this.labelAbout.Size = new System.Drawing.Size(360, 126);
|
// labelSourceCode
|
||||||
this.labelAbout.TabIndex = 0;
|
//
|
||||||
this.labelAbout.TabStop = false;
|
this.labelSourceCode.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.labelAbout.Text = "";
|
this.labelSourceCode.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||||
this.labelAbout.Click += new System.EventHandler(this.labelAbout_Click);
|
this.labelSourceCode.LinkArea = new System.Windows.Forms.LinkArea(0, 0);
|
||||||
|
this.labelSourceCode.Location = new System.Drawing.Point(117, 0);
|
||||||
|
this.labelSourceCode.Margin = new System.Windows.Forms.Padding(0);
|
||||||
|
this.labelSourceCode.Name = "labelSourceCode";
|
||||||
|
this.labelSourceCode.Size = new System.Drawing.Size(99, 16);
|
||||||
|
this.labelSourceCode.TabIndex = 3;
|
||||||
|
this.labelSourceCode.Text = "Source Code";
|
||||||
|
this.labelSourceCode.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||||
|
this.labelSourceCode.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.OnLinkClicked);
|
||||||
|
//
|
||||||
|
// labelWebsite
|
||||||
|
//
|
||||||
|
this.labelWebsite.AutoSize = true;
|
||||||
|
this.labelWebsite.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.labelWebsite.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||||
|
this.labelWebsite.LinkArea = new System.Windows.Forms.LinkArea(0, 0);
|
||||||
|
this.labelWebsite.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.labelWebsite.Margin = new System.Windows.Forms.Padding(0);
|
||||||
|
this.labelWebsite.Name = "labelWebsite";
|
||||||
|
this.labelWebsite.Size = new System.Drawing.Size(117, 16);
|
||||||
|
this.labelWebsite.TabIndex = 2;
|
||||||
|
this.labelWebsite.Text = "Official Website";
|
||||||
|
this.labelWebsite.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||||
|
this.labelWebsite.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.OnLinkClicked);
|
||||||
|
//
|
||||||
|
// tablePanelLinks
|
||||||
|
//
|
||||||
|
this.tablePanelLinks.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.tablePanelLinks.ColumnCount = 3;
|
||||||
|
this.tablePanelLinks.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 35.16F));
|
||||||
|
this.tablePanelLinks.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 29.7F));
|
||||||
|
this.tablePanelLinks.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 35.14F));
|
||||||
|
this.tablePanelLinks.Controls.Add(this.labelIssues, 2, 0);
|
||||||
|
this.tablePanelLinks.Controls.Add(this.labelWebsite, 0, 0);
|
||||||
|
this.tablePanelLinks.Controls.Add(this.labelSourceCode, 1, 0);
|
||||||
|
this.tablePanelLinks.Location = new System.Drawing.Point(12, 124);
|
||||||
|
this.tablePanelLinks.Name = "tablePanelLinks";
|
||||||
|
this.tablePanelLinks.RowCount = 1;
|
||||||
|
this.tablePanelLinks.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||||
|
this.tablePanelLinks.Size = new System.Drawing.Size(334, 16);
|
||||||
|
this.tablePanelLinks.TabIndex = 4;
|
||||||
|
//
|
||||||
|
// labelIssues
|
||||||
|
//
|
||||||
|
this.labelIssues.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.labelIssues.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||||
|
this.labelIssues.LinkArea = new System.Windows.Forms.LinkArea(0, 0);
|
||||||
|
this.labelIssues.Location = new System.Drawing.Point(216, 0);
|
||||||
|
this.labelIssues.Margin = new System.Windows.Forms.Padding(0);
|
||||||
|
this.labelIssues.Name = "labelIssues";
|
||||||
|
this.labelIssues.Size = new System.Drawing.Size(118, 16);
|
||||||
|
this.labelIssues.TabIndex = 4;
|
||||||
|
this.labelIssues.Text = "Report an Issue";
|
||||||
|
this.labelIssues.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||||
|
this.labelIssues.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.OnLinkClicked);
|
||||||
//
|
//
|
||||||
// FormAbout
|
// FormAbout
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.BackColor = System.Drawing.Color.White;
|
this.BackColor = System.Drawing.Color.White;
|
||||||
this.ClientSize = new System.Drawing.Size(384, 150);
|
this.ClientSize = new System.Drawing.Size(358, 152);
|
||||||
this.Controls.Add(this.labelAbout);
|
this.Controls.Add(this.tablePanelLinks);
|
||||||
|
this.Controls.Add(this.labelDescription);
|
||||||
|
this.Controls.Add(this.pictureLogo);
|
||||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||||
this.MaximizeBox = false;
|
this.MaximizeBox = false;
|
||||||
this.MinimizeBox = false;
|
this.MinimizeBox = false;
|
||||||
this.Name = "FormAbout";
|
this.Name = "FormAbout";
|
||||||
|
this.ShowIcon = false;
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.pictureLogo)).EndInit();
|
||||||
|
this.tablePanelLinks.ResumeLayout(false);
|
||||||
|
this.tablePanelLinks.PerformLayout();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private Controls.RichTextLabel labelAbout;
|
private System.Windows.Forms.PictureBox pictureLogo;
|
||||||
|
private System.Windows.Forms.Label labelDescription;
|
||||||
|
private System.Windows.Forms.LinkLabel labelSourceCode;
|
||||||
|
private System.Windows.Forms.LinkLabel labelWebsite;
|
||||||
|
private System.Windows.Forms.TableLayoutPanel tablePanelLinks;
|
||||||
|
private System.Windows.Forms.LinkLabel labelIssues;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -1,43 +1,25 @@
|
|||||||
using System;
|
using System.Windows.Forms;
|
||||||
using System.Text;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
using TweetDck.Core.Controls;
|
|
||||||
using TweetDck.Core.Utils;
|
using TweetDck.Core.Utils;
|
||||||
|
|
||||||
namespace TweetDck.Core.Other{
|
namespace TweetDck.Core.Other{
|
||||||
sealed partial class FormAbout : Form{
|
sealed partial class FormAbout : Form{
|
||||||
private const string GitHubLink = "https://github.com/chylex/TweetDuck";
|
private const string GitHubLink = "https://github.com/chylex/TweetDuck";
|
||||||
|
private const string IssuesLink = "https://github.com/chylex/TweetDuck/issues";
|
||||||
|
|
||||||
public FormAbout(){
|
public FormAbout(){
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
Text = "About "+Program.BrandName+" "+Program.VersionTag;
|
Text = "About "+Program.BrandName+" "+Program.VersionTag;
|
||||||
|
|
||||||
StringBuilder build = new StringBuilder();
|
labelDescription.Text = Program.BrandName+" was created by chylex as a replacement to the discontinued official TweetDeck client for Windows.\n\nThe program is available for free under the open source MIT license.";
|
||||||
build.Append(@"\fs22").Append(Program.BrandName).Append(@" was created by chylex as a replacement to the discontinued TweetDeck client for Windows, and is released under the MIT license.\par ");
|
|
||||||
build.Append(@"Official Website: ").Append(RichTextLabel.AddLink(Program.Website)).Append(@"\line ");
|
labelWebsite.Links.Add(new LinkLabel.Link(0,labelWebsite.Text.Length,Program.Website));
|
||||||
build.Append(@"Source Code: ").Append(RichTextLabel.AddLink(GitHubLink));
|
labelSourceCode.Links.Add(new LinkLabel.Link(0,labelSourceCode.Text.Length,GitHubLink));
|
||||||
|
labelIssues.Links.Add(new LinkLabel.Link(0,labelIssues.Text.Length,IssuesLink));
|
||||||
labelAbout.Rtf = RichTextLabel.Wrap(build.ToString());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void labelAbout_Click(object sender, EventArgs e){ // LinkClicked isn't working so fuck that
|
private void OnLinkClicked(object sender, LinkLabelLinkClickedEventArgs e){
|
||||||
if (Cursor.Current != Cursors.Hand)return;
|
BrowserUtils.OpenExternalBrowser(e.Link.LinkData as string);
|
||||||
|
|
||||||
// I don't even give a fuck, someone else PR a proper fix please
|
|
||||||
int index = labelAbout.GetCharIndexFromPosition(((MouseEventArgs)e).Location);
|
|
||||||
|
|
||||||
if (IsClickingOn(index,Program.Website)){
|
|
||||||
BrowserUtils.OpenExternalBrowser(Program.Website);
|
|
||||||
}
|
|
||||||
else if (IsClickingOn(index,GitHubLink)){
|
|
||||||
BrowserUtils.OpenExternalBrowser(GitHubLink);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool IsClickingOn(int index, string substringSearch){
|
|
||||||
int substringIndex = labelAbout.Text.IndexOf(substringSearch,StringComparison.Ordinal);
|
|
||||||
return index >= substringIndex && index <= substringIndex+substringSearch.Length;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
246
Core/Other/FormAbout.resx
Normal file
246
Core/Other/FormAbout.resx
Normal file
@@ -0,0 +1,246 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<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: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>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="pictureLogo.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
|
||||||
|
DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
|
||||||
|
bGUAAEjHnZZ3VFTXFofPvXd6oc0wAlKG3rvAANJ7k15FYZgZYCgDDjM0sSGiAhFFRJoiSFDEgNFQJFZE
|
||||||
|
sRAUVLAHJAgoMRhFVCxvRtaLrqy89/Ly++Osb+2z97n77L3PWhcAkqcvl5cGSwGQyhPwgzyc6RGRUXTs
|
||||||
|
AIABHmCAKQBMVka6X7B7CBDJy82FniFyAl8EAfB6WLwCcNPQM4BOB/+fpFnpfIHomAARm7M5GSwRF4g4
|
||||||
|
JUuQLrbPipgalyxmGCVmvihBEcuJOWGRDT77LLKjmNmpPLaIxTmns1PZYu4V8bZMIUfEiK+ICzO5nCwR
|
||||||
|
3xKxRoowlSviN+LYVA4zAwAUSWwXcFiJIjYRMYkfEuQi4uUA4EgJX3HcVyzgZAvEl3JJS8/hcxMSBXQd
|
||||||
|
li7d1NqaQffkZKVwBALDACYrmcln013SUtOZvBwAFu/8WTLi2tJFRbY0tba0NDQzMv2qUP91829K3NtF
|
||||||
|
ehn4uWcQrf+L7a/80hoAYMyJarPziy2uCoDOLQDI3fti0zgAgKSobx3Xv7oPTTwviQJBuo2xcVZWlhGX
|
||||||
|
wzISF/QP/U+Hv6GvvmckPu6P8tBdOfFMYYqALq4bKy0lTcinZ6QzWRy64Z+H+B8H/nUeBkGceA6fwxNF
|
||||||
|
hImmjMtLELWbx+YKuGk8Opf3n5r4D8P+pMW5FonS+BFQY4yA1HUqQH7tBygKESDR+8Vd/6NvvvgwIH55
|
||||||
|
4SqTi3P/7zf9Z8Gl4iWDm/A5ziUohM4S8jMX98TPEqABAUgCKpAHykAd6ABDYAasgC1wBG7AG/iDEBAJ
|
||||||
|
VgMWSASpgA+yQB7YBApBMdgJ9oBqUAcaQTNoBcdBJzgFzoNL4Bq4AW6D+2AUTIBnYBa8BgsQBGEhMkSB
|
||||||
|
5CEVSBPSh8wgBmQPuUG+UBAUCcVCCRAPEkJ50GaoGCqDqqF6qBn6HjoJnYeuQIPQXWgMmoZ+h97BCEyC
|
||||||
|
qbASrAUbwwzYCfaBQ+BVcAK8Bs6FC+AdcCXcAB+FO+Dz8DX4NjwKP4PnEIAQERqiihgiDMQF8UeikHiE
|
||||||
|
j6xHipAKpAFpRbqRPuQmMorMIG9RGBQFRUcZomxRnqhQFAu1BrUeVYKqRh1GdaB6UTdRY6hZ1Ec0Ga2I
|
||||||
|
1kfboL3QEegEdBa6EF2BbkK3oy+ib6Mn0K8xGAwNo42xwnhiIjFJmLWYEsw+TBvmHGYQM46Zw2Kx8lh9
|
||||||
|
rB3WH8vECrCF2CrsUexZ7BB2AvsGR8Sp4Mxw7rgoHA+Xj6vAHcGdwQ3hJnELeCm8Jt4G749n43PwpfhG
|
||||||
|
fDf+On4Cv0CQJmgT7AghhCTCJkIloZVwkfCA8JJIJKoRrYmBRC5xI7GSeIx4mThGfEuSIemRXEjRJCFp
|
||||||
|
B+kQ6RzpLuklmUzWIjuSo8gC8g5yM/kC+RH5jQRFwkjCS4ItsUGiRqJDYkjiuSReUlPSSXK1ZK5kheQJ
|
||||||
|
yeuSM1J4KS0pFymm1HqpGqmTUiNSc9IUaVNpf+lU6RLpI9JXpKdksDJaMm4ybJkCmYMyF2TGKQhFneJC
|
||||||
|
YVE2UxopFykTVAxVm+pFTaIWU7+jDlBnZWVkl8mGyWbL1sielh2lITQtmhcthVZKO04bpr1borTEaQln
|
||||||
|
yfYlrUuGlszLLZVzlOPIFcm1yd2WeydPl3eTT5bfJd8p/1ABpaCnEKiQpbBf4aLCzFLqUtulrKVFS48v
|
||||||
|
vacIK+opBimuVTyo2K84p6Ss5KGUrlSldEFpRpmm7KicpFyufEZ5WoWiYq/CVSlXOavylC5Ld6Kn0Cvp
|
||||||
|
vfRZVUVVT1Whar3qgOqCmrZaqFq+WpvaQ3WCOkM9Xr1cvUd9VkNFw08jT6NF454mXpOhmai5V7NPc15L
|
||||||
|
Wytca6tWp9aUtpy2l3audov2Ax2yjoPOGp0GnVu6GF2GbrLuPt0berCehV6iXo3edX1Y31Kfq79Pf9AA
|
||||||
|
bWBtwDNoMBgxJBk6GWYathiOGdGMfI3yjTqNnhtrGEcZ7zLuM/5oYmGSYtJoct9UxtTbNN+02/R3Mz0z
|
||||||
|
llmN2S1zsrm7+QbzLvMXy/SXcZbtX3bHgmLhZ7HVosfig6WVJd+y1XLaSsMq1qrWaoRBZQQwShiXrdHW
|
||||||
|
ztYbrE9Zv7WxtBHYHLf5zdbQNtn2iO3Ucu3lnOWNy8ft1OyYdvV2o/Z0+1j7A/ajDqoOTIcGh8eO6o5s
|
||||||
|
xybHSSddpySno07PnU2c+c7tzvMuNi7rXM65Iq4erkWuA24ybqFu1W6P3NXcE9xb3Gc9LDzWepzzRHv6
|
||||||
|
eO7yHPFS8mJ5NXvNelt5r/Pu9SH5BPtU+zz21fPl+3b7wX7efrv9HqzQXMFb0ekP/L38d/s/DNAOWBPw
|
||||||
|
YyAmMCCwJvBJkGlQXlBfMCU4JvhI8OsQ55DSkPuhOqHC0J4wybDosOaw+XDX8LLw0QjjiHUR1yIVIrmR
|
||||||
|
XVHYqLCopqi5lW4r96yciLaILoweXqW9KnvVldUKq1NWn46RjGHGnIhFx4bHHol9z/RnNjDn4rziauNm
|
||||||
|
WS6svaxnbEd2OXuaY8cp40zG28WXxU8l2CXsTphOdEisSJzhunCruS+SPJPqkuaT/ZMPJX9KCU9pS8Wl
|
||||||
|
xqae5Mnwknm9acpp2WmD6frphemja2zW7Fkzy/fhN2VAGasyugRU0c9Uv1BHuEU4lmmfWZP5Jiss60S2
|
||||||
|
dDYvuz9HL2d7zmSue+63a1FrWWt78lTzNuWNrXNaV78eWh+3vmeD+oaCDRMbPTYe3kTYlLzpp3yT/LL8
|
||||||
|
V5vDN3cXKBVsLBjf4rGlpVCikF84stV2a9021DbutoHt5turtn8sYhddLTYprih+X8IqufqN6TeV33za
|
||||||
|
Eb9joNSydP9OzE7ezuFdDrsOl0mX5ZaN7/bb3VFOLy8qf7UnZs+VimUVdXsJe4V7Ryt9K7uqNKp2Vr2v
|
||||||
|
Tqy+XeNc01arWLu9dn4fe9/Qfsf9rXVKdcV17w5wD9yp96jvaNBqqDiIOZh58EljWGPft4xvm5sUmoqb
|
||||||
|
PhziHRo9HHS4t9mqufmI4pHSFrhF2DJ9NProje9cv+tqNWytb6O1FR8Dx4THnn4f+/3wcZ/jPScYJ1p/
|
||||||
|
0Pyhtp3SXtQBdeR0zHYmdo52RXYNnvQ+2dNt293+o9GPh06pnqo5LXu69AzhTMGZT2dzz86dSz83cz7h
|
||||||
|
/HhPTM/9CxEXbvUG9g5c9Ll4+ZL7pQt9Tn1nL9tdPnXF5srJq4yrndcsr3X0W/S3/2TxU/uA5UDHdavr
|
||||||
|
XTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxS
|
||||||
|
fNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+
|
||||||
|
tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/
|
||||||
|
6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAAuIgAALiIBquLdkgAAEVpJREFUeF7tXQl0VNd5
|
||||||
|
Thq3Tk7tc+qmiZMm7YmdJj1OT3Gd0kTMG3mJnZQEJzaSjXETx0lqNwt2jWscQGixBAJLSMhgA8YYbIyQ
|
||||||
|
hHYJI4lFGMwioQWxyewgMdoXtKFd4u/337lPjDRv9pk3g+A75zsMWv577/fd+9/l3Rl9johu0Y/U/OIt
|
||||||
|
6sfrLwIYT2de+SJ4F/j34LfB+8Ap4L9J8uvvgfy9b4DfBO8EPy9DBBwC3gCI93fgDHAuuA7cDVaDzWAX
|
||||||
|
OAAOgcNgP9gN8vc+A4vB9eBr4M/Be8GAMiPgDIBAXwVDwbXgEbAPJC+RDToGvgfOBr8mi/UbAsIACMFp
|
||||||
|
ZRaYC7aBWuL5gh3gdvBZ8C5ZHV3hVwPQaM7hS0ETqCWQnqwDE8Apsnq6wC8GoJEPgFtAzt9aYviTPJ9k
|
||||||
|
gkGyuj6FrgagUd8CeVIcBLUaH0gcATeD35XV9wl0MQCN4OXjn8EroFZjA5m8qooE/1o2x6vwuQGouAEs
|
||||||
|
A7UadyPxOPgj2SyvwacGoMILwRsh3ThLTksx4BdkEz2GTwxABb8C8pJSqxGTgTvAb8jmegSvG4CK/QvI
|
||||||
|
O1Wtik8mXgSnyma7Da8agAo9Auq5kfI3+Shkhmy+W/CaAajI42CvrNjNRJ7jZksZXIZXDEAFWPxA3FTp
|
||||||
|
xVHQLRM8NgAFPwTejD1/InkH/biUxWl4ZAAK5LP3mynnO+JV0KWJ2W0DUNCXwVOy4Fu8zhrQ6SWqJwbk
|
||||||
|
WxQa2Mxop6fSWyk0rYlCUhspZEs9zdxSJ8iv+WuhW5vpqYw27d93nXvB26RUduGWAQg+36KwwCULv7VF
|
||||||
|
iDx3Wx1tPNxCBy92UU17P7VdHaLWniE619JLu8900Nv7m+jFLBgCM9gs/l3NmCqlqU+nt+D/msYtk3LZ
|
||||||
|
hcsGIPB/gPaPF7jyKrW+rwNZnJCUBoraUU9H63po9No1NM8++odGac/ZDno5r45C2QitESGF59gv5dVT
|
||||||
|
clUHzc5gEyb8XOaVa6DDsyMU67wBCHg7WCULsEkezi9/jEptbfKLCdzrn0s30b5znWiS6xgeuUaby1so
|
||||||
|
NKVubDSwGZzCOG3NzTdRQXW7+NnM4+b2atUDPAPeIeXTBEK4ZMA8i+Ca5Ir+LrOOOvtHKGkfcit6kp4m
|
||||||
|
sBh/zDGRqaMfzfEMh5CuZiXXUOgWE72Ua6L1Jc10qqmXRkbNo4nT2PMw2sHcESvl0wTCOGcAAv0DyFtv
|
||||||
|
rULGyAKsO9SMUERD6EnRO+t1M4F76++zTNTUNSjK9wYutvVhzujTTGGrMG/wqNCqiwX5IsA/SxmtgDBO
|
||||||
|
G7DBIqhN8oR3suEqQpnRh7watcOcU31pAvfCWUgZ1Y3Xy/YlCk+Z28rlqrTTvkwpoxUQyrEBCPCvoONz
|
||||||
|
fVTg1xkm6hkYQajr4Mktdpd5uecrE9jg5IpWWaJvwRN1SHKtaA/PCfMLmyiq2DxPaNUN5KMKg5RzHBDO
|
||||||
|
KQNSLYLZJFfgVSz3tMBDeM0BrMNlr9H6fXfJ8V7AErK7f1iW5hsMjYxSSnkjPbnxLP1vbq2YE04399KV
|
||||||
|
vmGak9/kqF0FUs5xQFj7BuAXvwM6ddDGOfiNnQ0IYxvbTrYjVWDiwkrFW6OB83DaEd/3/obOfiq71Ekt
|
||||||
|
3YOkzgg8NUTxPOdgLpiV1TE6K7vzASnrGBDCoQF8b0cz6ESyqDG77BvAOI2VxJycy7bX2q4QJoYgDVxo
|
||||||
|
7ZPR9QVv4OzNb7OyOll8mpnWTNPXnlwnZR0DQtg2AAHuAPnCkmbwieQREFZQjzCOwfPChlJs/3mt7cFo
|
||||||
|
YAPn5NTRsFwa6on3kII05zUIjt4uXv9icx099u5pCn7rKBkSynoMC1K/LuUVQBi7BswcF9gBWYzfZ5vE
|
||||||
|
RsZZnG/powjsVsXc4IYR/DtLix2POm+C9wGrPjWfK1nWl3v6MxA+FB1xxgeX6OF3TpKSdASsIiMMMK48
|
||||||
|
TkpM4RwprwDC2TUgTw3uFFEZXgo2dA4glPNgu8pruyms0HxAJnaWThrBP7v2oHnfoQd48xWBelqmHe7t
|
||||||
|
Is2kNNJ/rj9HD648RsoKC+FVwgBj/MGDUl4BhNQ2AIH/FuTLq1aNtkfuFYWfXUEo18FGHKvrofg9DfRs
|
||||||
|
mknEcjQq2ABejeiFyEKTWXyUbU4z7fSLj0z06NpTELnKLLyl6BOZVDVgDM+8R8ps14AQy4Y6S1fmAXvg
|
||||||
|
npZ/oo0iiuro2VSYkdIgVhocX0zc0hQ2YDWWt3phIdrGp5+hW1vpZxsv0SOcZrR6uy1iFAQvLvqDlNmu
|
||||||
|
Ae9aCus0IQzn8/LL3QjnHbAZpZe6RE9fsL2O/jvTJFIdlzMz2URRhZflT/oer+fX0E/ePUXBttKMI3Ia
|
||||||
|
enNfhpRZ2wAI+XnQ4amnLXLamPdxHQ1i4+IL8AqqHvMMp6vdZ65Q8en2sXW5r/HbjZVYzVRoi+sMYZwx
|
||||||
|
saxWWbj1Swhn04B/BPkQSVNgu+TUAHKefB/LzMkE3s3PXgfxsbLRFNd5XlMWZT6AkDYN+JmVsE5QLEPz
|
||||||
|
WujXGY0iZ3N60GOHqheuDgzT4++U80SqJarz5DQUXfAcQlobACE5/fAb4jRFtkdOPatLWqmrf4RSKlvo
|
||||||
|
1fzL9MSGM7TuQJ04R7nR0dDRSw8mlGqL6gpXniDjkp2xyoKULyCslQH81MutCZgNWLz7+qaI83Jz9yAm
|
||||||
|
0A5q6/HeGb2/cPxyBxnivWEAT8T7c4Mjc+5EWCsD/gbkt4JqimyP6rGA+sRosqHgWD0Zlh/WFtUVsgHL
|
||||||
|
S44aI3O/hrBWBvCboN273cwTMJaHvEKZjEgsOkNKogcrIJViJVTeaIzefi/CWhnA7zJvGiesC+TVT85x
|
||||||
|
8wPryYYXNpl3upqiukQYsKKyR1my63sIa2UAv3WU3xelKbAj8k71lXz/nE76Em09A/Tjt5B+PF0BqUw6
|
||||||
|
MogN2RSEtjKAHz+6twdg8k6Yz4NOuXceFKgorm7yTv5XmXRkVIk78H2EtjLgfpBv+moL7AR5Mv5NRp1X
|
||||||
|
byf4GzH5n3kn/6vkkbS8dCpCWxnAnzrikQFMPiRbWFAnbkXc6OAN2BNreAPmjfwvyQbEH9I0gD/yxfM3
|
||||||
|
W/BxRFqTuBrYOzj+lsSNht0nG72bfphJVddgwL8jvJUBHk3C4yhNeCXfRJfaPL+p5i+8ln4Cq59KbSHd
|
||||||
|
ZVLloLJs7/0Ib2UAL0NbxgnpCWEC75Bnp5rog7IW6ujz7dURb+NsYxdvmswpQ0tItyiWod1KTJHmMpQ3
|
||||||
|
YvxhR9qCukiekGenN4tHjU9+VENPbzpLcbtq6GS9954X+BLLtp/y7uTLNG/EmozRBd9GEVYG8Gf37LEU
|
||||||
|
0RNy7/+o8gqdae6jQxc76eCFTqqo7aTGzsBPSRdbeuihRG/3fpANiC85qkTkaB5F8Adr8CeaaArqKsUj
|
||||||
|
yiJ9by14C2/keXnpqXIV5pTYPblB8zZ9BcVYGcDH0f9nKaJH5I1ZSgMduNCF8DcOjtS0k+L13C/JBize
|
||||||
|
EWeYn3wbihpvgHwgw+/71RbUDfIo+FNuvdWl3UAFn+a+KM59vLzyUWl+IPMbFHVd97EXZgPuAb3yKSfq
|
||||||
|
ZSUeBbFFNSgi8PHRwRrzut8Xvd/Ma8FR+XYfSf4FyJ+PoymqM1TvRIakNtP098/TQ5h4psWXUnzBaRQT
|
||||||
|
uDhZ1yknXi/uei0JHZTlpbVBr6z7IoqzNkAlRHR9Ira4E/lEcv31O5Hq9Q2Qe9bCrJPU3T+EYgILPajT
|
||||||
|
r96v8F3qYSL/G5bszuKOjiLHeP2FBETkj5G0FlmDapp5amsrzfiwhh5ZPeFOpCXxNSWxnGauKaed2OI7
|
||||||
|
8eZF3RCejXqjbj5MPWYDInJfZo1RpF0D+EOX7L4nbOzqdWqTSDN8J3Kst2sVbkF+sMGj4fmNlZR2uFas
|
||||||
|
uYflg3t/mLJy11lf530Q6/+3qoaw+vkOa4xibRvAgMj8oaYTRLe+eu3UnUgt8mhgIxLKKBhLvsdXltDc
|
||||||
|
zRV0qUXfXfKHBy7pID4ongUfKpfyOmXAf00U3ubVa0+IOCzAM+vKqOxCG6qhHzbziodvOvhq0rUk0k9Q
|
||||||
|
WPpLUl4BVMG2AbOyu+4CW1j8Jx1dvXaHLDx6/09XHabU0loaHNb32cG7n1zQT3w+fkgs75r6Pwl3S3kF
|
||||||
|
UA3bBjB+vvH8CnH1WqYLzeCukEcNVhnc459YXSaGf0evvk/O2OjovGqZdnQQn/l2NQVF5G2Qso4B1bFv
|
||||||
|
gCEs/X6kmhHNoCp5NHBDBPm1ShYbTKwQPZ1723T09tfTT4hnrL2D+h9N17Zdpd9uNI88UUet9viCGAFB
|
||||||
|
r29WpKxjQJXsG8AwLtv3sbhOpxUYjZi+5hg9s+E4zVpfRT9ZeZh+nFRKP11ZRqFry+mFD6soKreakg/V
|
||||||
|
iPzuz/V/TqVJ1E2s83UVX9yE2294baPV3y5AtRwboIRnT0OgUavAko++fZR++cFxKj7VQgPDI9Q3OCKE
|
||||||
|
HhgKjLOfc03d9ErqcX1TjiVhADLJdCnnOKB6jg1gGOP2pwsntQpAbxLzw/JSCsuqprNocCCgoaOPEgrP
|
||||||
|
0MOJJeZjZT17vUo++Vz6yU4poxVQTScNWJT5XfSefvNmQqMgJhuBhirxJTQ/4wRVXGqnUT9c0Drf3E3L
|
||||||
|
IfyPON2Ina0fer0gVoxJVcNBr31g9QZtFaiucwYwjEt2xdqcCywpRgRWOph0f7m+QuT/y+1XfbrD5Ztr
|
||||||
|
24/V05wtR8Wmzr/CS7JWscWrpHyaQNWdN0AJS7vDmFh2zmYqmkiZmnjF8WBCibhbuWbPeTqMyZiXnp4Y
|
||||||
|
wgdnfF2cl7Gc3x9Db+ccr/sEa4u87l9R3hAcnvllKZ8m0BTnDWAo4VmPGldyIXZSkRalGdwzeWTwaonP
|
||||||
|
gRZlV9O6vRcoq8JEu7E0LTnXSidMHSKNHK29Qofwf76Xw99/Dz8XiRXV7z48QjPeLkOqg+gwN2BEtyRv
|
||||||
|
WCNyQqRsNuGyAQxlya44p1KRPaqGQDxhCnrvGFlYlRZf558TcwxP+IEmuCXFI8eda6RcduGWAcaFaX9p
|
||||||
|
jD/0qdOp6GYia7K8pCp4UfqXpFx24ZYBDGVB6jeNKypMt0ywoPm8p9UYkW3zI8omwm0DGIbXN//AuKKy
|
||||||
|
VxSsVaGbiWYNhrBpdenPnHhkAAMTzUwUPnxTm6C2PWrbc1IWp+GxAQxDePavxlXkpiLazO2OKfqjlMMl
|
||||||
|
eMUABruPCt1kI4HbiuVm9PY/SRlchtcMYBjCMkJQMcwJN8HEzB0tqWrIGF3wvGy+W/CqAQwlLH2aknDY
|
||||||
|
xGthzYpPBnIHW1HRYozMeUw222143QDGtD8n3yP2CcKESZaSeAOaUFpuDM+8TzbXI/jEAIZxYepfGaIL
|
||||||
|
48yVngQpiVMO2qHEFq81Lkr32p819JkBKgyLMmeYD/Bu4NHAdU8sr1Ui85+SzfIafG4Aw7go4y5jbPEy
|
||||||
|
8TzhRpobxMitGjYu3fOOMWzrV2VzvApdDFDxw3mbpyhL92aL09RATkuibhitb35agIn2h7L6PoGuBqgw
|
||||||
|
hOc8Zow7UCQayyMiIPYOnONlmow7sEeJzPPoL+Q5C78YoAI76KBpMTtXK4nlLcZV6HVqz9MUyEfkMpkr
|
||||||
|
KnuMSz/ZpETkPCyrpwv8aoCKH8zdcPe0yG0vYum6X8wTLIivRoZczQgmVQ2izBIluvBVZeHWb8nq6IqA
|
||||||
|
MMASWDX9k+GN7X8wxO5JU5aXnjeLxoKxIVI4YYzKCQKrX7cUWpiJf/n7CWW1yrJ9WcaYwpeU8Cynj419
|
||||||
|
hYAzwBJB8zbdHhyVd78xpuA5ZfHOWEzgWeixFVgSNiBldGG0DICj4uE7PyEzvx4Q6YQ/ECm+5Cgm0jxl
|
||||||
|
8Y5lyhsfPw9zpyrzU3zyp8ndRUAbwFDrZViQdlvQ/NQ7kKPvNkYX3GuIKbpPWfrJFP7IFyXu4FQYM1V5
|
||||||
|
c//3lWV7p/A70JWobfcq4dlfN4Zn3WmYn3y7GseSgYCxulhW7Bb1p+YXb1Ev0uf+H9A3E1Z4VJUaAAAA
|
||||||
|
AElFTkSuQmCC
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
3
Core/Other/FormBackgroundWork.Designer.cs
generated
3
Core/Other/FormBackgroundWork.Designer.cs
generated
@@ -26,7 +26,7 @@ namespace TweetDck.Core.Other {
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent() {
|
private void InitializeComponent() {
|
||||||
this.progressBarUseless = new System.Windows.Forms.ProgressBar();
|
this.progressBarUseless = new System.Windows.Forms.ProgressBar();
|
||||||
this.labelDescription = new RichTextLabel();
|
this.labelDescription = new TweetDck.Core.Controls.RichTextLabel();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// progressBarUseless
|
// progressBarUseless
|
||||||
@@ -64,6 +64,7 @@ namespace TweetDck.Core.Other {
|
|||||||
this.Controls.Add(this.progressBarUseless);
|
this.Controls.Add(this.progressBarUseless);
|
||||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||||
this.Name = "FormBackgroundWork";
|
this.Name = "FormBackgroundWork";
|
||||||
|
this.ShowIcon = false;
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||||
this.Text = "TweetDeck Migration";
|
this.Text = "TweetDeck Migration";
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
242
Core/Other/FormSettings.Designer.cs
generated
242
Core/Other/FormSettings.Designer.cs
generated
@@ -23,6 +23,7 @@
|
|||||||
/// the contents of this method with the code editor.
|
/// the contents of this method with the code editor.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent() {
|
private void InitializeComponent() {
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormSettings));
|
||||||
this.groupNotificationLocation = new System.Windows.Forms.GroupBox();
|
this.groupNotificationLocation = new System.Windows.Forms.GroupBox();
|
||||||
this.labelDisplay = new System.Windows.Forms.Label();
|
this.labelDisplay = new System.Windows.Forms.Label();
|
||||||
this.comboBoxDisplay = new System.Windows.Forms.ComboBox();
|
this.comboBoxDisplay = new System.Windows.Forms.ComboBox();
|
||||||
@@ -36,20 +37,33 @@
|
|||||||
this.tableLayout = new System.Windows.Forms.TableLayoutPanel();
|
this.tableLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||||
this.tableColumn2Panel = new System.Windows.Forms.Panel();
|
this.tableColumn2Panel = new System.Windows.Forms.Panel();
|
||||||
this.groupUserInterface = new System.Windows.Forms.GroupBox();
|
this.groupUserInterface = new System.Windows.Forms.GroupBox();
|
||||||
|
this.checkExpandLinks = new System.Windows.Forms.CheckBox();
|
||||||
|
this.comboBoxTrayType = new System.Windows.Forms.ComboBox();
|
||||||
|
this.labelTrayType = new System.Windows.Forms.Label();
|
||||||
|
this.checkUpdateNotifications = new System.Windows.Forms.CheckBox();
|
||||||
this.checkNotificationTimer = new System.Windows.Forms.CheckBox();
|
this.checkNotificationTimer = new System.Windows.Forms.CheckBox();
|
||||||
this.checkMinimizeTray = new System.Windows.Forms.CheckBox();
|
|
||||||
this.groupNotificationDuration = new System.Windows.Forms.GroupBox();
|
this.groupNotificationDuration = new System.Windows.Forms.GroupBox();
|
||||||
this.radioDurVeryLong = new System.Windows.Forms.RadioButton();
|
this.radioDurVeryLong = new System.Windows.Forms.RadioButton();
|
||||||
this.radioDurLong = new System.Windows.Forms.RadioButton();
|
this.radioDurLong = new System.Windows.Forms.RadioButton();
|
||||||
this.radioDurMedium = new System.Windows.Forms.RadioButton();
|
this.radioDurMedium = new System.Windows.Forms.RadioButton();
|
||||||
this.radioDurShort = new System.Windows.Forms.RadioButton();
|
this.radioDurShort = new System.Windows.Forms.RadioButton();
|
||||||
this.checkUpdateNotifications = new System.Windows.Forms.CheckBox();
|
this.tableColumn3Panel = new System.Windows.Forms.Panel();
|
||||||
|
this.groupAdvancedSettings = new System.Windows.Forms.GroupBox();
|
||||||
|
this.btnClearCache = new System.Windows.Forms.Button();
|
||||||
|
this.labelMiscellaneous = new System.Windows.Forms.Label();
|
||||||
|
this.checkHardwareAcceleration = new System.Windows.Forms.CheckBox();
|
||||||
|
this.tableColumn1Panel = new System.Windows.Forms.Panel();
|
||||||
|
this.labelUpdateNotifications = new System.Windows.Forms.Label();
|
||||||
|
this.btnCheckUpdates = new System.Windows.Forms.Button();
|
||||||
this.groupNotificationLocation.SuspendLayout();
|
this.groupNotificationLocation.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.trackBarEdgeDistance)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.trackBarEdgeDistance)).BeginInit();
|
||||||
this.tableLayout.SuspendLayout();
|
this.tableLayout.SuspendLayout();
|
||||||
this.tableColumn2Panel.SuspendLayout();
|
this.tableColumn2Panel.SuspendLayout();
|
||||||
this.groupUserInterface.SuspendLayout();
|
this.groupUserInterface.SuspendLayout();
|
||||||
this.groupNotificationDuration.SuspendLayout();
|
this.groupNotificationDuration.SuspendLayout();
|
||||||
|
this.tableColumn3Panel.SuspendLayout();
|
||||||
|
this.groupAdvancedSettings.SuspendLayout();
|
||||||
|
this.tableColumn1Panel.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// groupNotificationLocation
|
// groupNotificationLocation
|
||||||
@@ -66,18 +80,18 @@
|
|||||||
this.groupNotificationLocation.Controls.Add(this.radioLocBL);
|
this.groupNotificationLocation.Controls.Add(this.radioLocBL);
|
||||||
this.groupNotificationLocation.Controls.Add(this.radioLocTR);
|
this.groupNotificationLocation.Controls.Add(this.radioLocTR);
|
||||||
this.groupNotificationLocation.Controls.Add(this.radioLocTL);
|
this.groupNotificationLocation.Controls.Add(this.radioLocTL);
|
||||||
this.groupNotificationLocation.Location = new System.Drawing.Point(6, 6);
|
this.groupNotificationLocation.Location = new System.Drawing.Point(3, 3);
|
||||||
this.groupNotificationLocation.Name = "groupNotificationLocation";
|
this.groupNotificationLocation.Name = "groupNotificationLocation";
|
||||||
this.groupNotificationLocation.Size = new System.Drawing.Size(183, 270);
|
this.groupNotificationLocation.Size = new System.Drawing.Size(183, 324);
|
||||||
this.groupNotificationLocation.TabIndex = 0;
|
this.groupNotificationLocation.TabIndex = 0;
|
||||||
this.groupNotificationLocation.TabStop = false;
|
this.groupNotificationLocation.TabStop = false;
|
||||||
this.groupNotificationLocation.Text = "Notification Location";
|
this.groupNotificationLocation.Text = "Notification Location";
|
||||||
//
|
//
|
||||||
// labelDisplay
|
// labelDisplay
|
||||||
//
|
//
|
||||||
this.labelDisplay.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
|
||||||
this.labelDisplay.AutoSize = true;
|
this.labelDisplay.AutoSize = true;
|
||||||
this.labelDisplay.Location = new System.Drawing.Point(6, 154);
|
this.labelDisplay.Location = new System.Drawing.Point(3, 148);
|
||||||
|
this.labelDisplay.Margin = new System.Windows.Forms.Padding(3, 12, 3, 0);
|
||||||
this.labelDisplay.Name = "labelDisplay";
|
this.labelDisplay.Name = "labelDisplay";
|
||||||
this.labelDisplay.Size = new System.Drawing.Size(41, 13);
|
this.labelDisplay.Size = new System.Drawing.Size(41, 13);
|
||||||
this.labelDisplay.TabIndex = 8;
|
this.labelDisplay.TabIndex = 8;
|
||||||
@@ -85,22 +99,21 @@
|
|||||||
//
|
//
|
||||||
// comboBoxDisplay
|
// comboBoxDisplay
|
||||||
//
|
//
|
||||||
this.comboBoxDisplay.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
this.comboBoxDisplay.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.comboBoxDisplay.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.comboBoxDisplay.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.comboBoxDisplay.FormattingEnabled = true;
|
this.comboBoxDisplay.FormattingEnabled = true;
|
||||||
this.comboBoxDisplay.Location = new System.Drawing.Point(9, 170);
|
this.comboBoxDisplay.Location = new System.Drawing.Point(6, 164);
|
||||||
this.comboBoxDisplay.Margin = new System.Windows.Forms.Padding(3, 3, 3, 12);
|
|
||||||
this.comboBoxDisplay.Name = "comboBoxDisplay";
|
this.comboBoxDisplay.Name = "comboBoxDisplay";
|
||||||
this.comboBoxDisplay.Size = new System.Drawing.Size(168, 21);
|
this.comboBoxDisplay.Size = new System.Drawing.Size(171, 21);
|
||||||
this.comboBoxDisplay.TabIndex = 7;
|
this.comboBoxDisplay.TabIndex = 7;
|
||||||
this.comboBoxDisplay.SelectedValueChanged += new System.EventHandler(this.comboBoxDisplay_SelectedValueChanged);
|
this.comboBoxDisplay.SelectedValueChanged += new System.EventHandler(this.comboBoxDisplay_SelectedValueChanged);
|
||||||
//
|
//
|
||||||
// labelEdgeDistance
|
// labelEdgeDistance
|
||||||
//
|
//
|
||||||
this.labelEdgeDistance.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
|
||||||
this.labelEdgeDistance.AutoSize = true;
|
this.labelEdgeDistance.AutoSize = true;
|
||||||
this.labelEdgeDistance.Location = new System.Drawing.Point(6, 203);
|
this.labelEdgeDistance.Location = new System.Drawing.Point(3, 197);
|
||||||
|
this.labelEdgeDistance.Margin = new System.Windows.Forms.Padding(3, 9, 3, 0);
|
||||||
this.labelEdgeDistance.Name = "labelEdgeDistance";
|
this.labelEdgeDistance.Name = "labelEdgeDistance";
|
||||||
this.labelEdgeDistance.Size = new System.Drawing.Size(103, 13);
|
this.labelEdgeDistance.Size = new System.Drawing.Size(103, 13);
|
||||||
this.labelEdgeDistance.TabIndex = 6;
|
this.labelEdgeDistance.TabIndex = 6;
|
||||||
@@ -108,10 +121,10 @@
|
|||||||
//
|
//
|
||||||
// trackBarEdgeDistance
|
// trackBarEdgeDistance
|
||||||
//
|
//
|
||||||
this.trackBarEdgeDistance.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
this.trackBarEdgeDistance.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.trackBarEdgeDistance.LargeChange = 8;
|
this.trackBarEdgeDistance.LargeChange = 8;
|
||||||
this.trackBarEdgeDistance.Location = new System.Drawing.Point(6, 219);
|
this.trackBarEdgeDistance.Location = new System.Drawing.Point(6, 213);
|
||||||
this.trackBarEdgeDistance.Maximum = 40;
|
this.trackBarEdgeDistance.Maximum = 40;
|
||||||
this.trackBarEdgeDistance.Minimum = 8;
|
this.trackBarEdgeDistance.Minimum = 8;
|
||||||
this.trackBarEdgeDistance.Name = "trackBarEdgeDistance";
|
this.trackBarEdgeDistance.Name = "trackBarEdgeDistance";
|
||||||
@@ -189,11 +202,13 @@
|
|||||||
//
|
//
|
||||||
// tableLayout
|
// tableLayout
|
||||||
//
|
//
|
||||||
this.tableLayout.ColumnCount = 2;
|
this.tableLayout.ColumnCount = 3;
|
||||||
this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33F));
|
||||||
this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33F));
|
||||||
|
this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.34F));
|
||||||
|
this.tableLayout.Controls.Add(this.tableColumn1Panel, 0, 0);
|
||||||
this.tableLayout.Controls.Add(this.tableColumn2Panel, 1, 0);
|
this.tableLayout.Controls.Add(this.tableColumn2Panel, 1, 0);
|
||||||
this.tableLayout.Controls.Add(this.groupNotificationLocation, 0, 0);
|
this.tableLayout.Controls.Add(this.tableColumn3Panel, 2, 0);
|
||||||
this.tableLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.tableLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.tableLayout.GrowStyle = System.Windows.Forms.TableLayoutPanelGrowStyle.FixedSize;
|
this.tableLayout.GrowStyle = System.Windows.Forms.TableLayoutPanelGrowStyle.FixedSize;
|
||||||
this.tableLayout.Location = new System.Drawing.Point(0, 0);
|
this.tableLayout.Location = new System.Drawing.Point(0, 0);
|
||||||
@@ -201,38 +216,90 @@
|
|||||||
this.tableLayout.Padding = new System.Windows.Forms.Padding(3);
|
this.tableLayout.Padding = new System.Windows.Forms.Padding(3);
|
||||||
this.tableLayout.RowCount = 1;
|
this.tableLayout.RowCount = 1;
|
||||||
this.tableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
this.tableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||||
this.tableLayout.Size = new System.Drawing.Size(384, 282);
|
this.tableLayout.Size = new System.Drawing.Size(576, 336);
|
||||||
this.tableLayout.TabIndex = 2;
|
this.tableLayout.TabIndex = 2;
|
||||||
//
|
//
|
||||||
// tableColumn2Panel
|
// tableColumn2Panel
|
||||||
//
|
//
|
||||||
this.tableColumn2Panel.Controls.Add(this.groupUserInterface);
|
|
||||||
this.tableColumn2Panel.Controls.Add(this.groupNotificationDuration);
|
this.tableColumn2Panel.Controls.Add(this.groupNotificationDuration);
|
||||||
|
this.tableColumn2Panel.Controls.Add(this.groupUserInterface);
|
||||||
this.tableColumn2Panel.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.tableColumn2Panel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.tableColumn2Panel.Location = new System.Drawing.Point(192, 3);
|
this.tableColumn2Panel.Location = new System.Drawing.Point(192, 3);
|
||||||
this.tableColumn2Panel.Margin = new System.Windows.Forms.Padding(0);
|
this.tableColumn2Panel.Margin = new System.Windows.Forms.Padding(0);
|
||||||
this.tableColumn2Panel.Name = "tableColumn2Panel";
|
this.tableColumn2Panel.Name = "tableColumn2Panel";
|
||||||
this.tableColumn2Panel.Size = new System.Drawing.Size(189, 276);
|
this.tableColumn2Panel.Size = new System.Drawing.Size(189, 330);
|
||||||
this.tableColumn2Panel.TabIndex = 3;
|
this.tableColumn2Panel.TabIndex = 3;
|
||||||
//
|
//
|
||||||
// groupUserInterface
|
// groupUserInterface
|
||||||
//
|
//
|
||||||
this.groupUserInterface.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
this.groupUserInterface.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)));
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.groupUserInterface.Controls.Add(this.btnCheckUpdates);
|
||||||
|
this.groupUserInterface.Controls.Add(this.labelUpdateNotifications);
|
||||||
|
this.groupUserInterface.Controls.Add(this.checkExpandLinks);
|
||||||
|
this.groupUserInterface.Controls.Add(this.comboBoxTrayType);
|
||||||
|
this.groupUserInterface.Controls.Add(this.labelTrayType);
|
||||||
this.groupUserInterface.Controls.Add(this.checkUpdateNotifications);
|
this.groupUserInterface.Controls.Add(this.checkUpdateNotifications);
|
||||||
this.groupUserInterface.Controls.Add(this.checkNotificationTimer);
|
this.groupUserInterface.Controls.Add(this.checkNotificationTimer);
|
||||||
this.groupUserInterface.Controls.Add(this.checkMinimizeTray);
|
|
||||||
this.groupUserInterface.Location = new System.Drawing.Point(3, 128);
|
this.groupUserInterface.Location = new System.Drawing.Point(3, 128);
|
||||||
this.groupUserInterface.Name = "groupUserInterface";
|
this.groupUserInterface.Name = "groupUserInterface";
|
||||||
this.groupUserInterface.Size = new System.Drawing.Size(183, 145);
|
this.groupUserInterface.Size = new System.Drawing.Size(183, 199);
|
||||||
this.groupUserInterface.TabIndex = 3;
|
this.groupUserInterface.TabIndex = 3;
|
||||||
this.groupUserInterface.TabStop = false;
|
this.groupUserInterface.TabStop = false;
|
||||||
this.groupUserInterface.Text = "User Interface";
|
this.groupUserInterface.Text = "User Interface";
|
||||||
//
|
//
|
||||||
|
// checkExpandLinks
|
||||||
|
//
|
||||||
|
this.checkExpandLinks.AutoSize = true;
|
||||||
|
this.checkExpandLinks.Location = new System.Drawing.Point(6, 45);
|
||||||
|
this.checkExpandLinks.Margin = new System.Windows.Forms.Padding(3, 4, 3, 3);
|
||||||
|
this.checkExpandLinks.Name = "checkExpandLinks";
|
||||||
|
this.checkExpandLinks.Size = new System.Drawing.Size(166, 17);
|
||||||
|
this.checkExpandLinks.TabIndex = 11;
|
||||||
|
this.checkExpandLinks.Text = "Expand Links When Hovered";
|
||||||
|
this.checkExpandLinks.UseVisualStyleBackColor = true;
|
||||||
|
this.checkExpandLinks.CheckedChanged += new System.EventHandler(this.checkExpandLinks_CheckedChanged);
|
||||||
|
//
|
||||||
|
// comboBoxTrayType
|
||||||
|
//
|
||||||
|
this.comboBoxTrayType.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.comboBoxTrayType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
|
this.comboBoxTrayType.FormattingEnabled = true;
|
||||||
|
this.comboBoxTrayType.Location = new System.Drawing.Point(6, 92);
|
||||||
|
this.comboBoxTrayType.Name = "comboBoxTrayType";
|
||||||
|
this.comboBoxTrayType.Size = new System.Drawing.Size(171, 21);
|
||||||
|
this.comboBoxTrayType.TabIndex = 10;
|
||||||
|
this.comboBoxTrayType.SelectedIndexChanged += new System.EventHandler(this.comboBoxTrayType_SelectedIndexChanged);
|
||||||
|
//
|
||||||
|
// labelTrayType
|
||||||
|
//
|
||||||
|
this.labelTrayType.AutoSize = true;
|
||||||
|
this.labelTrayType.Location = new System.Drawing.Point(3, 76);
|
||||||
|
this.labelTrayType.Margin = new System.Windows.Forms.Padding(3, 11, 3, 0);
|
||||||
|
this.labelTrayType.Name = "labelTrayType";
|
||||||
|
this.labelTrayType.Size = new System.Drawing.Size(52, 13);
|
||||||
|
this.labelTrayType.TabIndex = 9;
|
||||||
|
this.labelTrayType.Text = "Tray Icon";
|
||||||
|
//
|
||||||
|
// checkUpdateNotifications
|
||||||
|
//
|
||||||
|
this.checkUpdateNotifications.AutoSize = true;
|
||||||
|
this.checkUpdateNotifications.Location = new System.Drawing.Point(6, 145);
|
||||||
|
this.checkUpdateNotifications.Margin = new System.Windows.Forms.Padding(3, 5, 3, 3);
|
||||||
|
this.checkUpdateNotifications.Name = "checkUpdateNotifications";
|
||||||
|
this.checkUpdateNotifications.Size = new System.Drawing.Size(165, 17);
|
||||||
|
this.checkUpdateNotifications.TabIndex = 5;
|
||||||
|
this.checkUpdateNotifications.Text = "Check Updates Automatically";
|
||||||
|
this.checkUpdateNotifications.UseVisualStyleBackColor = true;
|
||||||
|
this.checkUpdateNotifications.CheckedChanged += new System.EventHandler(this.checkUpdateNotifications_CheckedChanged);
|
||||||
|
//
|
||||||
// checkNotificationTimer
|
// checkNotificationTimer
|
||||||
//
|
//
|
||||||
this.checkNotificationTimer.AutoSize = true;
|
this.checkNotificationTimer.AutoSize = true;
|
||||||
this.checkNotificationTimer.Location = new System.Drawing.Point(6, 43);
|
this.checkNotificationTimer.Location = new System.Drawing.Point(6, 21);
|
||||||
|
this.checkNotificationTimer.Margin = new System.Windows.Forms.Padding(3, 5, 3, 3);
|
||||||
this.checkNotificationTimer.Name = "checkNotificationTimer";
|
this.checkNotificationTimer.Name = "checkNotificationTimer";
|
||||||
this.checkNotificationTimer.Size = new System.Drawing.Size(145, 17);
|
this.checkNotificationTimer.Size = new System.Drawing.Size(145, 17);
|
||||||
this.checkNotificationTimer.TabIndex = 4;
|
this.checkNotificationTimer.TabIndex = 4;
|
||||||
@@ -240,17 +307,6 @@
|
|||||||
this.checkNotificationTimer.UseVisualStyleBackColor = true;
|
this.checkNotificationTimer.UseVisualStyleBackColor = true;
|
||||||
this.checkNotificationTimer.CheckedChanged += new System.EventHandler(this.checkNotificationTimer_CheckedChanged);
|
this.checkNotificationTimer.CheckedChanged += new System.EventHandler(this.checkNotificationTimer_CheckedChanged);
|
||||||
//
|
//
|
||||||
// checkMinimizeTray
|
|
||||||
//
|
|
||||||
this.checkMinimizeTray.AutoSize = true;
|
|
||||||
this.checkMinimizeTray.Location = new System.Drawing.Point(6, 20);
|
|
||||||
this.checkMinimizeTray.Name = "checkMinimizeTray";
|
|
||||||
this.checkMinimizeTray.Size = new System.Drawing.Size(102, 17);
|
|
||||||
this.checkMinimizeTray.TabIndex = 0;
|
|
||||||
this.checkMinimizeTray.Text = "Minimize to Tray";
|
|
||||||
this.checkMinimizeTray.UseVisualStyleBackColor = true;
|
|
||||||
this.checkMinimizeTray.CheckedChanged += new System.EventHandler(this.checkMinimizeTray_CheckedChanged);
|
|
||||||
//
|
|
||||||
// groupNotificationDuration
|
// groupNotificationDuration
|
||||||
//
|
//
|
||||||
this.groupNotificationDuration.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
this.groupNotificationDuration.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
@@ -318,25 +374,101 @@
|
|||||||
this.radioDurShort.CheckedChanged += new System.EventHandler(this.radioDur_CheckedChanged);
|
this.radioDurShort.CheckedChanged += new System.EventHandler(this.radioDur_CheckedChanged);
|
||||||
this.radioDurShort.Click += new System.EventHandler(this.radioDur_Click);
|
this.radioDurShort.Click += new System.EventHandler(this.radioDur_Click);
|
||||||
//
|
//
|
||||||
// checkUpdateNotifications
|
// tableColumn3Panel
|
||||||
//
|
//
|
||||||
this.checkUpdateNotifications.AutoSize = true;
|
this.tableColumn3Panel.Controls.Add(this.groupAdvancedSettings);
|
||||||
this.checkUpdateNotifications.Location = new System.Drawing.Point(6, 67);
|
this.tableColumn3Panel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.checkUpdateNotifications.Name = "checkUpdateNotifications";
|
this.tableColumn3Panel.Location = new System.Drawing.Point(381, 3);
|
||||||
this.checkUpdateNotifications.Size = new System.Drawing.Size(122, 17);
|
this.tableColumn3Panel.Margin = new System.Windows.Forms.Padding(0);
|
||||||
this.checkUpdateNotifications.TabIndex = 5;
|
this.tableColumn3Panel.Name = "tableColumn3Panel";
|
||||||
this.checkUpdateNotifications.Text = "Update Notifications";
|
this.tableColumn3Panel.Size = new System.Drawing.Size(192, 330);
|
||||||
this.checkUpdateNotifications.UseVisualStyleBackColor = true;
|
this.tableColumn3Panel.TabIndex = 4;
|
||||||
this.checkUpdateNotifications.CheckedChanged += new System.EventHandler(this.checkUpdateNotifications_CheckedChanged);
|
//
|
||||||
|
// groupAdvancedSettings
|
||||||
|
//
|
||||||
|
this.groupAdvancedSettings.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.groupAdvancedSettings.Controls.Add(this.btnClearCache);
|
||||||
|
this.groupAdvancedSettings.Controls.Add(this.labelMiscellaneous);
|
||||||
|
this.groupAdvancedSettings.Controls.Add(this.checkHardwareAcceleration);
|
||||||
|
this.groupAdvancedSettings.Location = new System.Drawing.Point(3, 3);
|
||||||
|
this.groupAdvancedSettings.Name = "groupAdvancedSettings";
|
||||||
|
this.groupAdvancedSettings.Size = new System.Drawing.Size(183, 324);
|
||||||
|
this.groupAdvancedSettings.TabIndex = 0;
|
||||||
|
this.groupAdvancedSettings.TabStop = false;
|
||||||
|
this.groupAdvancedSettings.Text = "Advanced Settings";
|
||||||
|
//
|
||||||
|
// btnClearCache
|
||||||
|
//
|
||||||
|
this.btnClearCache.Location = new System.Drawing.Point(9, 68);
|
||||||
|
this.btnClearCache.Name = "btnClearCache";
|
||||||
|
this.btnClearCache.Size = new System.Drawing.Size(171, 23);
|
||||||
|
this.btnClearCache.TabIndex = 11;
|
||||||
|
this.btnClearCache.Text = "Clear Cache (calculating)";
|
||||||
|
this.btnClearCache.UseVisualStyleBackColor = true;
|
||||||
|
this.btnClearCache.Click += new System.EventHandler(this.btnClearCache_Click);
|
||||||
|
//
|
||||||
|
// labelMiscellaneous
|
||||||
|
//
|
||||||
|
this.labelMiscellaneous.AutoSize = true;
|
||||||
|
this.labelMiscellaneous.Location = new System.Drawing.Point(6, 52);
|
||||||
|
this.labelMiscellaneous.Margin = new System.Windows.Forms.Padding(3, 11, 3, 0);
|
||||||
|
this.labelMiscellaneous.Name = "labelMiscellaneous";
|
||||||
|
this.labelMiscellaneous.Size = new System.Drawing.Size(74, 13);
|
||||||
|
this.labelMiscellaneous.TabIndex = 10;
|
||||||
|
this.labelMiscellaneous.Text = "Miscellaneous";
|
||||||
|
//
|
||||||
|
// checkHardwareAcceleration
|
||||||
|
//
|
||||||
|
this.checkHardwareAcceleration.AutoSize = true;
|
||||||
|
this.checkHardwareAcceleration.Location = new System.Drawing.Point(6, 21);
|
||||||
|
this.checkHardwareAcceleration.Margin = new System.Windows.Forms.Padding(3, 5, 3, 3);
|
||||||
|
this.checkHardwareAcceleration.Name = "checkHardwareAcceleration";
|
||||||
|
this.checkHardwareAcceleration.Size = new System.Drawing.Size(134, 17);
|
||||||
|
this.checkHardwareAcceleration.TabIndex = 5;
|
||||||
|
this.checkHardwareAcceleration.Text = "Hardware Acceleration";
|
||||||
|
this.checkHardwareAcceleration.UseVisualStyleBackColor = true;
|
||||||
|
this.checkHardwareAcceleration.CheckedChanged += new System.EventHandler(this.checkHardwareAcceleration_CheckedChanged);
|
||||||
|
//
|
||||||
|
// tableColumn1Panel
|
||||||
|
//
|
||||||
|
this.tableColumn1Panel.Controls.Add(this.groupNotificationLocation);
|
||||||
|
this.tableColumn1Panel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.tableColumn1Panel.Location = new System.Drawing.Point(3, 3);
|
||||||
|
this.tableColumn1Panel.Margin = new System.Windows.Forms.Padding(0);
|
||||||
|
this.tableColumn1Panel.Name = "tableColumn1Panel";
|
||||||
|
this.tableColumn1Panel.Size = new System.Drawing.Size(189, 330);
|
||||||
|
this.tableColumn1Panel.TabIndex = 5;
|
||||||
|
//
|
||||||
|
// labelUpdateNotifications
|
||||||
|
//
|
||||||
|
this.labelUpdateNotifications.AutoSize = true;
|
||||||
|
this.labelUpdateNotifications.Location = new System.Drawing.Point(3, 127);
|
||||||
|
this.labelUpdateNotifications.Margin = new System.Windows.Forms.Padding(3, 11, 3, 0);
|
||||||
|
this.labelUpdateNotifications.Name = "labelUpdateNotifications";
|
||||||
|
this.labelUpdateNotifications.Size = new System.Drawing.Size(103, 13);
|
||||||
|
this.labelUpdateNotifications.TabIndex = 12;
|
||||||
|
this.labelUpdateNotifications.Text = "Update Notifications";
|
||||||
|
//
|
||||||
|
// btnCheckUpdates
|
||||||
|
//
|
||||||
|
this.btnCheckUpdates.Location = new System.Drawing.Point(6, 168);
|
||||||
|
this.btnCheckUpdates.Name = "btnCheckUpdates";
|
||||||
|
this.btnCheckUpdates.Size = new System.Drawing.Size(171, 23);
|
||||||
|
this.btnCheckUpdates.TabIndex = 13;
|
||||||
|
this.btnCheckUpdates.Text = "Check Updates Now";
|
||||||
|
this.btnCheckUpdates.UseVisualStyleBackColor = true;
|
||||||
|
this.btnCheckUpdates.Click += new System.EventHandler(this.btnCheckUpdates_Click);
|
||||||
//
|
//
|
||||||
// FormSettings
|
// FormSettings
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(384, 282);
|
this.ClientSize = new System.Drawing.Size(576, 336);
|
||||||
this.Controls.Add(this.tableLayout);
|
this.Controls.Add(this.tableLayout);
|
||||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||||
this.Icon = global::TweetDck.Properties.Resources.icon;
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
this.MaximizeBox = false;
|
this.MaximizeBox = false;
|
||||||
this.MinimizeBox = false;
|
this.MinimizeBox = false;
|
||||||
this.Name = "FormSettings";
|
this.Name = "FormSettings";
|
||||||
@@ -351,6 +483,10 @@
|
|||||||
this.groupUserInterface.PerformLayout();
|
this.groupUserInterface.PerformLayout();
|
||||||
this.groupNotificationDuration.ResumeLayout(false);
|
this.groupNotificationDuration.ResumeLayout(false);
|
||||||
this.groupNotificationDuration.PerformLayout();
|
this.groupNotificationDuration.PerformLayout();
|
||||||
|
this.tableColumn3Panel.ResumeLayout(false);
|
||||||
|
this.groupAdvancedSettings.ResumeLayout(false);
|
||||||
|
this.groupAdvancedSettings.PerformLayout();
|
||||||
|
this.tableColumn1Panel.ResumeLayout(false);
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -375,8 +511,18 @@
|
|||||||
private System.Windows.Forms.RadioButton radioDurLong;
|
private System.Windows.Forms.RadioButton radioDurLong;
|
||||||
private System.Windows.Forms.RadioButton radioDurMedium;
|
private System.Windows.Forms.RadioButton radioDurMedium;
|
||||||
private System.Windows.Forms.RadioButton radioDurShort;
|
private System.Windows.Forms.RadioButton radioDurShort;
|
||||||
private System.Windows.Forms.CheckBox checkMinimizeTray;
|
|
||||||
private System.Windows.Forms.CheckBox checkNotificationTimer;
|
private System.Windows.Forms.CheckBox checkNotificationTimer;
|
||||||
private System.Windows.Forms.CheckBox checkUpdateNotifications;
|
private System.Windows.Forms.CheckBox checkUpdateNotifications;
|
||||||
|
private System.Windows.Forms.ComboBox comboBoxTrayType;
|
||||||
|
private System.Windows.Forms.Label labelTrayType;
|
||||||
|
private System.Windows.Forms.CheckBox checkExpandLinks;
|
||||||
|
private System.Windows.Forms.Panel tableColumn3Panel;
|
||||||
|
private System.Windows.Forms.GroupBox groupAdvancedSettings;
|
||||||
|
private System.Windows.Forms.CheckBox checkHardwareAcceleration;
|
||||||
|
private System.Windows.Forms.Label labelMiscellaneous;
|
||||||
|
private System.Windows.Forms.Button btnClearCache;
|
||||||
|
private System.Windows.Forms.Panel tableColumn1Panel;
|
||||||
|
private System.Windows.Forms.Label labelUpdateNotifications;
|
||||||
|
private System.Windows.Forms.Button btnCheckUpdates;
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -1,7 +1,11 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using TweetDck.Configuration;
|
using TweetDck.Configuration;
|
||||||
using TweetDck.Core.Handling;
|
using TweetDck.Core.Handling;
|
||||||
|
using TweetDck.Core.Utils;
|
||||||
|
using TweetDck.Core.Controls;
|
||||||
|
using TweetDck.Updates;
|
||||||
|
|
||||||
namespace TweetDck.Core.Other{
|
namespace TweetDck.Core.Other{
|
||||||
sealed partial class FormSettings : Form{
|
sealed partial class FormSettings : Form{
|
||||||
@@ -12,15 +16,24 @@ namespace TweetDck.Core.Other{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private readonly FormNotification notification;
|
private readonly FormNotification notification;
|
||||||
private bool isLoaded;
|
private readonly UpdateHandler updates;
|
||||||
|
|
||||||
public FormSettings(FormBrowser browserForm){
|
private bool isLoaded;
|
||||||
|
private int updateCheckEventId;
|
||||||
|
|
||||||
|
public FormSettings(FormBrowser browserForm, UpdateHandler updates){
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
Shown += (sender, args) => isLoaded = true;
|
Shown += (sender, args) => isLoaded = true;
|
||||||
|
|
||||||
Text = Program.BrandName+" Settings";
|
Text = Program.BrandName+" Settings";
|
||||||
|
|
||||||
notification = new FormNotification(browserForm,false){ CanMoveWindow = () => radioLocCustom.Checked };
|
this.updates = updates;
|
||||||
|
|
||||||
|
updates.CheckFinished += updates_CheckFinished;
|
||||||
|
Disposed += (sender, args) => updates.CheckFinished -= updates_CheckFinished;
|
||||||
|
|
||||||
|
notification = browserForm.CreateNotificationForm(false);
|
||||||
|
notification.CanMoveWindow = () => radioLocCustom.Checked;
|
||||||
|
|
||||||
notification.Move += (sender, args) => {
|
notification.Move += (sender, args) => {
|
||||||
if (radioLocCustom.Checked){
|
if (radioLocCustom.Checked){
|
||||||
@@ -53,10 +66,26 @@ namespace TweetDck.Core.Other{
|
|||||||
|
|
||||||
comboBoxDisplay.SelectedIndex = Math.Min(comboBoxDisplay.Items.Count-1,Config.NotificationDisplay);
|
comboBoxDisplay.SelectedIndex = Math.Min(comboBoxDisplay.Items.Count-1,Config.NotificationDisplay);
|
||||||
|
|
||||||
|
comboBoxTrayType.Items.Add("Disabled");
|
||||||
|
comboBoxTrayType.Items.Add("Display Icon Only");
|
||||||
|
comboBoxTrayType.Items.Add("Minimize to Tray");
|
||||||
|
comboBoxTrayType.Items.Add("Close to Tray");
|
||||||
|
comboBoxTrayType.SelectedIndex = Math.Min(Math.Max((int)Config.TrayBehavior,0),comboBoxTrayType.Items.Count-1);
|
||||||
|
|
||||||
trackBarEdgeDistance.Value = Config.NotificationEdgeDistance;
|
trackBarEdgeDistance.Value = Config.NotificationEdgeDistance;
|
||||||
checkMinimizeTray.Checked = Config.MinimizeToTray;
|
|
||||||
checkNotificationTimer.Checked = Config.DisplayNotificationTimer;
|
checkNotificationTimer.Checked = Config.DisplayNotificationTimer;
|
||||||
|
checkExpandLinks.Checked = Config.ExpandLinksOnHover;
|
||||||
checkUpdateNotifications.Checked = Config.EnableUpdateCheck;
|
checkUpdateNotifications.Checked = Config.EnableUpdateCheck;
|
||||||
|
checkHardwareAcceleration.Checked = HardwareAcceleration.IsEnabled;
|
||||||
|
|
||||||
|
BrowserCache.CalculateCacheSize(bytes => this.InvokeSafe(() => {
|
||||||
|
if (bytes == -1L){
|
||||||
|
btnClearCache.Text = "Clear Cache (unknown size)";
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
btnClearCache.Text = "Clear Cache ("+(int)Math.Ceiling(bytes/(1024.0*1024.0))+" MB)";
|
||||||
|
}
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FormSettings_FormClosing(object sender, FormClosingEventArgs e){
|
private void FormSettings_FormClosing(object sender, FormClosingEventArgs e){
|
||||||
@@ -119,10 +148,10 @@ namespace TweetDck.Core.Other{
|
|||||||
notification.ShowNotificationForSettings(true);
|
notification.ShowNotificationForSettings(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkMinimizeTray_CheckedChanged(object sender, EventArgs e){
|
private void comboBoxTrayType_SelectedIndexChanged(object sender, EventArgs e){
|
||||||
if (!isLoaded)return;
|
if (!isLoaded)return;
|
||||||
|
|
||||||
Config.MinimizeToTray = checkMinimizeTray.Checked;
|
Config.TrayBehavior = (TrayIcon.Behavior)comboBoxTrayType.SelectedIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkNotificationTimer_CheckedChanged(object sender, EventArgs e){
|
private void checkNotificationTimer_CheckedChanged(object sender, EventArgs e){
|
||||||
@@ -132,10 +161,79 @@ namespace TweetDck.Core.Other{
|
|||||||
notification.ShowNotificationForSettings(true);
|
notification.ShowNotificationForSettings(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void checkExpandLinks_CheckedChanged(object sender, EventArgs e){
|
||||||
|
if (!isLoaded)return;
|
||||||
|
|
||||||
|
Config.ExpandLinksOnHover = checkExpandLinks.Checked;
|
||||||
|
}
|
||||||
|
|
||||||
private void checkUpdateNotifications_CheckedChanged(object sender, EventArgs e){
|
private void checkUpdateNotifications_CheckedChanged(object sender, EventArgs e){
|
||||||
if (!isLoaded)return;
|
if (!isLoaded)return;
|
||||||
|
|
||||||
Config.EnableUpdateCheck = checkUpdateNotifications.Checked;
|
Config.EnableUpdateCheck = checkUpdateNotifications.Checked;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void checkHardwareAcceleration_CheckedChanged(object sender, EventArgs e){
|
||||||
|
if (!isLoaded)return;
|
||||||
|
|
||||||
|
bool succeeded = false;
|
||||||
|
|
||||||
|
if (checkHardwareAcceleration.Checked){
|
||||||
|
if (HardwareAcceleration.CanEnable){
|
||||||
|
succeeded = HardwareAcceleration.Enable();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
MessageBox.Show("Cannot enable hardware acceleration, the libraries libEGL.dll and libGLESv2.dll could not be restored.",Program.BrandName+" Settings",MessageBoxButtons.OK,MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
succeeded = HardwareAcceleration.Disable();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (succeeded && MessageBox.Show("The application must restart for the setting to take place. Do you want to restart now?",Program.BrandName+" Settings",MessageBoxButtons.YesNo,MessageBoxIcon.Information) == DialogResult.Yes){ // TODO
|
||||||
|
Process.Start(Application.ExecutablePath,"-restart");
|
||||||
|
Application.Exit();
|
||||||
|
}
|
||||||
|
else if (!succeeded){
|
||||||
|
checkHardwareAcceleration.CheckedChanged -= checkHardwareAcceleration_CheckedChanged;
|
||||||
|
checkHardwareAcceleration.Checked = HardwareAcceleration.IsEnabled;
|
||||||
|
checkHardwareAcceleration.CheckedChanged += checkHardwareAcceleration_CheckedChanged;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnClearCache_Click(object sender, EventArgs e){
|
||||||
|
if (!isLoaded)return;
|
||||||
|
|
||||||
|
isLoaded = false;
|
||||||
|
btnClearCache.Enabled = false;
|
||||||
|
isLoaded = true; // OTHERWISE WINFORMS CALLS THE ONCLICK EVENT FOR A RANDOM RADIO BUTTON WHAT THE CUNTFUCK IS THIS
|
||||||
|
|
||||||
|
BrowserCache.SetClearOnExit();
|
||||||
|
|
||||||
|
MessageBox.Show("Cache will be automatically cleared when "+Program.BrandName+" exits.","Clear Cache",MessageBoxButtons.OK,MessageBoxIcon.Information);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnCheckUpdates_Click(object sender, EventArgs e){
|
||||||
|
if (!isLoaded)return;
|
||||||
|
|
||||||
|
Config.DismissedUpdate = string.Empty;
|
||||||
|
Config.Save();
|
||||||
|
|
||||||
|
updateCheckEventId = updates.Check(true);
|
||||||
|
|
||||||
|
isLoaded = false;
|
||||||
|
btnCheckUpdates.Enabled = false;
|
||||||
|
isLoaded = true; // SAME AS ABOVE
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updates_CheckFinished(object sender, UpdateCheckEventArgs e){
|
||||||
|
if (e.EventId == updateCheckEventId){
|
||||||
|
btnCheckUpdates.Enabled = true;
|
||||||
|
|
||||||
|
if (!e.UpdateAvailable){
|
||||||
|
MessageBox.Show("Your version of "+Program.BrandName+" is up to date.","No Updates Available",MessageBoxButtons.OK,MessageBoxIcon.Information);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
377
Core/Other/FormSettings.resx
Normal file
377
Core/Other/FormSettings.resx
Normal file
@@ -0,0 +1,377 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<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: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>
|
||||||
|
<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">
|
||||||
|
<value>
|
||||||
|
AAABAAMAMDAAAAEAIACoJQAANgAAACAgAAABACAAqBAAAN4lAAAQEAAAAQAgAGgEAACGNgAAKAAAADAA
|
||||||
|
AABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHg5IrF+OlS+hjyMw4g7tcmM
|
||||||
|
PM/MjTzezY485s2OPObMjjzfyIw80MOJPLe8hDyNs387WKx8OyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApHU4FrB8OGXGijzAzo889dKR
|
||||||
|
PP/SkTz/0pE8/9GRPP/RkDz/0JA8/9CQPP/RkDz/0ZE8/9KRPP/TkTz/0pE8/86PPPbGijzCt4E8bKp6
|
||||||
|
OxoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKN1OB+9hTuLzI486NOR
|
||||||
|
PP/SkTz/0ZA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9GQ
|
||||||
|
PP/SkTz/0pE8/82OPOu9hTuOq3w8IgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACidTkFuoM8csyN
|
||||||
|
POrTkjz/0ZE8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9GRPP/Tkjz/zY887bqEPHimeDsHAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKp6
|
||||||
|
OynDiDvA05I8/9GRPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0ZA8/9ORPP/GijzFr308LgAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAArXw7UM2OPOvTkTz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/SkTz/zo887rOAPFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAACxfjxm0ZA8/NGRPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0ZE8/9GQPP64gjxtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAALaBPGXRkTz/0ZE8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9GQPP/SkTz/uIM8bAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqnk6TtCQPPzRkTz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/RkDz/0ZA8/rSA
|
||||||
|
PFUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtfDwmzo887dKRPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0ZE8/86PPPGtfDwrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZ4PAXFijzC0pE8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CURf/TpGT/2baJ/9/GpP/l0bf/59W//+fVvf/kz7P/3sOg/9mz
|
||||||
|
hP/ToWH/0JND/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9KRPP/EiTvJo3Y7CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALiC
|
||||||
|
PG/Tkjz/0JA8/9CQPP/QkDz/0JA8/9CSQf/Vq3P/5tO7//j07v//////////////////////////////
|
||||||
|
////////////////////////9vHq/+TQtf/UqG7/0JA+/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/Tkjz/uYM8dgAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAArXw8Gc2OPOzRkTz/0JA8/9CQPP/QlEX/27qP//fz7P//////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////8ObZ/9auev/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/RkTz/zI488J1x
|
||||||
|
OB8AAAAAAAAAAAAAAAAAAAAAuoM7h9OSPP/QkDz/0JA8/9GXTf/TpGb/27uS/9u6kP/ewZz/59W9//Xv
|
||||||
|
5///////////////////////////////////////////////////////////////////////////////
|
||||||
|
///r3cr/0ZxV/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/1JI8/7mDO5AAAAAAAAAAAAAAAADFj0cR0pNB6s+PO//Ojjv/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CRQP/TpGf/5NC2//38+v//////////////////////////////////////////////
|
||||||
|
////////////////////////+vf0/9auev/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0ZE8/8uOPO6SajYVAAAAAAAAAADzr1df7qxV/+WkT//ZmUT/0JA9/86O
|
||||||
|
O//Pjzv/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9GaUv/l07r/////////////////////////
|
||||||
|
///////////////////////////////////////////////////buo//0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9OSPP+ldjdoAAAAAAAAAADurFW67qxV//Ct
|
||||||
|
Vv/vrVb/6adR/92dSP/Skz//zo47/8+PO//QkDz/0JA8/9CQPP/QkDz/0JJB/9Smaf/dv5j/+fXw////
|
||||||
|
////////////////////////////////////////////////////////////////////////2riM/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9KRPP/FiTzGoHQ6Ae6s
|
||||||
|
VRrurFXz7qxV/+6sVf/urFX/761W//CuVv/sqlT/4qFM/9aVQv/Pjzv/zo47/9CQPP/VqnH/8+vh////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/////////////9aueP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9GQ
|
||||||
|
PP/Ojzz4oHM5Iu6sVU3urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/vrVX/8K5W/+6sVf/mpU//2plF/9q6
|
||||||
|
j///////////////////////////////////////////////////////////////////////////////
|
||||||
|
//////////////////////////////n18P/Rm1P/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/SkTz/rXs6Vu6sVYPurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/wrVb/6r2B////////////////////////////////////////////////////////////////////
|
||||||
|
///////////////////////////////////////////////////o18L/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/v4Y8j+6sVa3urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFb/9Onb///////+/v3/////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////1qx2/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/wYc7uO6sVcrurFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/trlr/67Zy/+m+h//y5NP/////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
////////7+TW/9CQPf/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/RkTz/yYw80e6s
|
||||||
|
VdvurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/6sme//v49P//////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/////////////////////////////9arc//QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/RkDz/zI083+6sVeLurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/u2b3/////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/////////////////////////////////////////////+fVvv/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/zo885u6sVeLurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+vL
|
||||||
|
of//////////////////////////////////////////////////////////////////////////////
|
||||||
|
//////////////////////////////////////////////////////////////r28v/Rl0r/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/zo885u6sVdrurFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7LBj//r28f//////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
///Vq3P/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/RkDz/zI083+6sVcrurFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/6cKO////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
///////////////////ewp7/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/RkTz/yYw80O6s
|
||||||
|
VazurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7NOy//z59v/u2b7/+fPr////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
///////////////////////////////////n1sD/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/SkTz/xIo8uO6sVYHurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/67Zx/+2uWf/qy6H/////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
///////////////////////////////////////////////////v5dj/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/SkTz/vYU8je6sVUvurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+nC
|
||||||
|
kP///////////////////////////////////////////////////////fz6//fu5P/w4Mv/793F//7+
|
||||||
|
/v/////////////////////////////////////////////////////////////////17eT/0JA//86O
|
||||||
|
Ov/Pjzv/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/tYA8Vu6sVRnurFXy7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7a5b//fw5///////////////////////////////////////+/jz/+7av//pwIr/67Jn/+6t
|
||||||
|
Vv/urFX/6rd1////////////////////////////////////////////////////////////////////
|
||||||
|
///48ej/6KhU/92cR//Tkj7/zo47/8+PO//QkDz/0JA8/9GQPP/Pjzz3rXw8IAAAAADurFW37qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/6b2D//////////////////////////////////nz6//qyZ3/7K9h/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/6rl6////////////////////////////////////////////////////
|
||||||
|
///////////////////9/Pr/6r6C//CuV//sqlT/4aBL/9aWQv/Pjzv/zo47/9GRPP/GijzCp3g8AQAA
|
||||||
|
AADurFVb7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/68yk///////////////////////+/fz/68+q/+2v
|
||||||
|
XP/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/6rNr//7+/f//////////////////////////////
|
||||||
|
/////////////////////////////////////////////+nEk//vrVX/8K5W/+6sVf/lpE//2ZlF/9KR
|
||||||
|
Pf+zfzpoAAAAAAAAAADurFUP7qxV5u6sVf/urFX/7qxV/+6sVf/urFX/7NGu//////////////////fu
|
||||||
|
5P/quHb/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxW//Xr3///////////////
|
||||||
|
///////////////////////////////////////////////////7+PP/+vXu///////pxJL/7qxV/+6s
|
||||||
|
Vf/wrVb/8K1W/+mnUevUmUsUAAAAAAAAAAAAAAAA7qxVgO6sVf/urFX/7qxV/+6sVf/urFX/6sqg////
|
||||||
|
////////8eLO/+yvX//urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+nF
|
||||||
|
lf/////////////////////////////////////////////////////////////////8+vf/6cWV/+q5
|
||||||
|
ev/s07H/6rd1/+6sVf/urFX/7qxV/++tVogAAAAAAAAAAAAAAAAAAAAA7qxVFe6sVejurFX/7qxV/+6s
|
||||||
|
Vf/urFX/6bp8///////w4Mn/7a1Z/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/x4cz////////////////////////////////////////////////////+//7+
|
||||||
|
/v/////////+/+m8gP/urFX/7a1Y/+6sVf/urFX/7qxV7O6sVRoAAAAAAAAAAAAAAAAAAAAAAAAAAO6s
|
||||||
|
VWburFX/7qxV/+6sVf/urFX/7a5b/+zTs//sr1//7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/sr1//8uPQ////////////////////////////////////
|
||||||
|
////////6suj/+qzav/pxpj/9Onb//n07f/rr2D/7qxV/+6sVf/urFX/7qxVbwAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAO6sVQPurFW67qxV/+6sVf/urFX/7qxV/+6sVv/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7axY/+nGl//27uP/////////
|
||||||
|
/////////fz6//Lj0P/qunv/7qxV/+6sVf/urFX/7qxV/+m9gv/qt3X/7qxV/+6sVf/urFXB7qxVBQAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADurFUg7qxV6O6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/qtnP/6sqg/+3WuP/s07P/6cSS/+uyZf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVv/trVr/7qxV/+6s
|
||||||
|
VezurFUlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7qxVRu6sVfjurFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV++6sVUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO6s
|
||||||
|
VVzurFX97qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxVYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAADurFVd7qxV+O6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVfvurFVjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7qxVR+6sVeXurFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV6O6sVU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO6sVSPurFW37qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFW77qxVJgAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AADurFUB7qxVae6sVeTurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV5+6sVW3urFUDAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAO6sVRjurFWA7qxV4u6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVeTurFWE7qxVGwAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7qxVEu6sVV7urFW17qxV7+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVfDurFW47qxVX+6s
|
||||||
|
VRMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAA7qxVG+6sVUzurFWA7qxVrO6sVcnurFXa7qxV4u6sVeLurFXa7qxVye6sVa3urFWC7qxVTe6s
|
||||||
|
VR0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAP//gAH//6gr//wAAD//qCv/8AAAD/+oK//AAAAD/6gr/4AAAAH/qCv/AAAAAP+oK/4A
|
||||||
|
AAAAf6gr/AAAAAA/qCv4AAAAAB+oK/AAAAAAD6gr4AAAAAAHqCvgAAAAAAeoK8AAAAAAA6grwAAAAAAD
|
||||||
|
qCuAAAAAAAGoK4AAAAAAAagrgAAAAAAAqCsAAAAAAACoKwAAAAAAAKgrAAAAAAAAqCsAAAAAAACoKwAA
|
||||||
|
AAAAAKgrAAAAAAAAqCsAAAAAAACoKwAAAAAAAKgrAAAAAAAAqCsAAAAAAACoKwAAAAAAAKgrAAAAAAAA
|
||||||
|
qCsAAAAAAACoKwAAAAAAAKgrgAAAAAAAqCuAAAAAAAGoK4AAAAAAAagrwAAAAAADqCvAAAAAAAOoK+AA
|
||||||
|
AAAAB6gr4AAAAAAHqCvwAAAAAA+oK/gAAAAAH6gr/AAAAAA/qCv+AAAAAH+oK/8AAAAA/6gr/4AAAAH/
|
||||||
|
qCv/wAAAA/+oK//wAAAP/6gr//wAAD//qCv//4AB//+oKygAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApHY4FrR/
|
||||||
|
Ole+hjuVxos7w8uNPNvOjzznzo8858uNPNzGijzEvoU7l7WBO1mpejsYAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHg5Kr6F
|
||||||
|
O5XLjTvo0pE8/9ORPP/SkTz/0ZE8/9CQPP/QkDz/0ZE8/9KRPP/TkTz/0pE8/82OPOq/hjyZrXw7LAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo3U6CbuE
|
||||||
|
O4bPjzz005I8/9GRPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0ZE8/9OS
|
||||||
|
PP/PkDz1vYU8iah6PAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKR3
|
||||||
|
OibGizvG05E8/9GQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9GQPP/TkTz/yIs8yqx8PCkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AACsezsxy40849KRPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/zI485rKAPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAApXc6JMuNPOTSkTz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/zI485659PCcAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAKd4OwnHizzJ0pE8/9CQPP/QkDz/0JA9/9OgYP/YtIX/38Sh/+LMr//iy67/3sOf/9iy
|
||||||
|
gv/Tn13/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/x4s8zaV4
|
||||||
|
OwsAAAAAAAAAAAAAAAAAAAAAu4Q8hNOSPP/QkDz/0JA8/9GXS//YtIX/6NfC//Xv5//8+vj/////////
|
||||||
|
///8+vf/9O3k/+fVvv/YsYH/0JRF/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/Tkjz/u4Q7iQAAAAAAAAAAAAAAAKx7OyTPjzz10ZA8/9GXS//Ztoj/8une////////////////////
|
||||||
|
///////////////////////////////////38uz/3L2V/9CRP//QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9GRPP/Ojzz3onU5KQAAAAAAAAAAxo1BlNGQO//Ojjv/0JNC/9GWSP/QlET/0ZpR/9au
|
||||||
|
eP/n1b3//v79////////////////////////////////////////////7+TV/9GdWP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9SSPP+4gjqaAAAAAPGuVhHvrVXq5qRO/9qZRP/QkT3/zo46/8+P
|
||||||
|
O//QkDz/0JA8/9CQPP/To2P/8+vh////////////////////////////////////////////+fXw/9Oh
|
||||||
|
Yf/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0pE8/8qMO+2WbTYV7qxVUe6sVf/wrVb/761W/+mo
|
||||||
|
Uv/enUj/05M//86PO//PkD7/3cCZ//Lp3v/7+PT/////////////////////////////////////////
|
||||||
|
////////+PTv/9GcVf/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/05I8/699OljurFWR7qxV/+6s
|
||||||
|
Vf/urFX/761W//CuV//sqlT/4qJQ/+zdyf//////////////////////////////////////////////
|
||||||
|
////////////////////////7+TV/9CRP//QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/Tkjz/vIQ7mO6s
|
||||||
|
Vb/urFX/7qxV/+6sVf/urFX/7qxV/++tVf/ry5///v79//7+/f//////////////////////////////
|
||||||
|
////////////////////////////////////////2rqO/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9KR
|
||||||
|
PP/GijvF7qxV2u6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+u1bv/t1bb//fv4////////////////////
|
||||||
|
///////////////////////////////////////////////////48+3/0ZRG/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0ZA8/8uNPNzurFXl7qxV/+6sVf/urFX/7qxV/+6sVf/rsWP/9OjZ////////////////////
|
||||||
|
///////////////////////////////////////////////////////////////////YtIX/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/zo886O6sVeXurFX/7qxV/+6sVf/urFX/7qxW//Hiz///////////////
|
||||||
|
/////////////////////////////////////////////////////////////////////////////+rb
|
||||||
|
yP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/Ojzzo7qxV2e6sVf/urFX/7qxV/+6sVf/quHb/////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
////////+fXw/9CURf/QkDz/0JA8/9CQPP/QkDz/0ZA8/8yOPNzurFW/7qxV/+6sVf/urFX/7qxV/+nA
|
||||||
|
if/s1LT/9Onb////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////0Z5b/9CQPP/QkDz/0JA8/9CQPP/SkTz/x4s8xe6sVY/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+nEk//+/fz////////////////////////////+/v3/+PHo//To2f/+/v7/////////
|
||||||
|
///////////////////////////////////VqGz/zo46/8+PO//QkDz/0JA8/9KRPP+/hjyX7qxVUO6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/ssGH//Pr2///////////////////////y49D/6cOR/+qyaf/urVb/6rJp////
|
||||||
|
/////////////////////////////////////////////+e7f//goEr/1ZVB/8+PO//Ojzv/0pE8/7WB
|
||||||
|
PFfurFUQ7qxV6O6sVf/urFX/7qxV/+m+hv/////////////////z5tX/6rl6/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/qs2r////+////////////////////////////////////////////+PLp/+y4c//urFX/5aRO/9qZ
|
||||||
|
RP/Mjjztp3g6FQAAAADurFWQ7qxV/+6sVf/urFX/6cKP////////////682m/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+2sV//17N////////////////////////////////////////7+/v/06Nn/8uTT/+qz
|
||||||
|
a//wrVb/761W/+alUZYAAAAAAAAAAO6sVSHurFX07qxV/+6sVf/quXj//////+nDkf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+m+hP////////////////////////////////////////////jy
|
||||||
|
6v/qtnH/67Fj/+6sVf/urFX2761WJQAAAAAAAAAAAAAAAO6sVX7urFX/7qxV/+2vW//pvID/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+nEkv/7+PT//////////////////fz6/+rJ
|
||||||
|
n//rtW7/682n/+zTs//urFb/7qxV/+6sVYQAAAAAAAAAAAAAAAAAAAAA7qxVB+6sVcTurFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+u0bP/qy6H/7da4/+vN
|
||||||
|
pv/qtnP/7qxV/+6sVf/urFX/7K9f/+2sWP/urFXI7qxVCQAAAAAAAAAAAAAAAAAAAAAAAAAA7qxVIO6s
|
||||||
|
VeDurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV4+6sVSMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAA7qxVLO6sVd/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVeLurFUwAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAA7qxVIu6sVcHurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFXE7qxVJAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7qxVBu6sVX/urFXw7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFXy7qxVgu6sVQgAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO6sVSXurFWP7qxV5e6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFXl7qxVke6sVScAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AADurFUS7qxVUO6sVY7urFW97qxV2O6sVeXurFXl7qxV2O6sVb7urFWP7qxVUu6sVRMAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8AD//8AAP/8AAA/+AAAH/AAAA/gAAAHwAAAA8AA
|
||||||
|
AAOAAAABgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA
|
||||||
|
AAGAAAABwAAAA8AAAAPgAAAH8AAAD/gAAB/8AAA//wAA///AA/8oAAAAEAAAACAAAAABACAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKx7Oja9hTqTyYw8zs6PPOfOjzznyYw8zr6G
|
||||||
|
PJSvfjw3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo3Y7CbyEO5PRkDz805I8/9GRPP/QkDz/0JA8/9GR
|
||||||
|
PP/TkTz/0ZA8/b+GPJWrfDwKAAAAAAAAAAAAAAAAp3g8CcSJPLfTkjz/0ZA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/Tkjz/xoo8uqx8PQoAAAAAAAAAAL2FPJPUk0D/06Rm/92/mf/izK//4sut/9u6
|
||||||
|
j//Snlr/0JA8/9CQPP/QkDz/0JA8/9OSPP+9hTyWAAAAALiEQDLQkDz90JpS/93Amf/u4tP/////////
|
||||||
|
/////////fv5/+DIqP/QkkH/0JA8/9CQPP/RkDz/0JA8/qN1OTTtq1WS56VP/9qaRf/RkT3/0JdO/+rc
|
||||||
|
yP//////////////////////693L/9CSQf/QkDz/0JA8/9SSPP+3gTqW761Vz++tVv/wrVb/6K5h//fy
|
||||||
|
6v/////////////////////////////////gx6b/0JA8/9CQPP/RkTz/yYw80e6sVefurFX/7qxV/+q+
|
||||||
|
hP/69vD//////////////////////////////////fz7/9GbU//QkDz/0JA8/8+PPOnurFXn7qxV/+yw
|
||||||
|
Y//79/P////////////////////////////////////////////ZuIz/0JA8/9CQPP/Pjzzp7qxVz+6s
|
||||||
|
Vf/sr2H/8eLO/////////////v7+//n07f/+/v7/////////////////48yu/8+PO//Qjzv/yYs80e6s
|
||||||
|
VZLurFX/67Jm//7+/f/8+fb/68yl/+qza//rsmf//v37//////////////////Pn2P/ip1n/2phC/8CH
|
||||||
|
PJXurFUw7qxV/eq2c//169//6rNr/+6sVf/urFX/7q1W//Pm1f/////////////////8+fX/67+G/++t
|
||||||
|
Vf3lpVEyAAAAAO6sVZHtrVr/7a9c/+6sVf/urFX/7qxV/+6sVf/rsWP/7de5//Lj0P/pxJL/67Zy/+qz
|
||||||
|
av/urFWTAAAAAAAAAADurFUI7qxVtO6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFW37qxVCQAAAAAAAAAAAAAAAO6sVQjurFWQ7qxV++6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
VfvurFWS7qxVCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO6sVTPurFWQ7qxVzO6sVeburFXm7qxVzO6s
|
||||||
|
VZDurFU0AAAAAAAAAAAAAAAAAAAAAPAPrEHAA6xBgAGsQYABrEEAAKxBAACsQQAArEEAAKxBAACsQQAA
|
||||||
|
rEEAAKxBAACsQYABrEGAAaxBwAOsQfAPrEE=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
89
Core/TrayIcon.Designer.cs
generated
Normal file
89
Core/TrayIcon.Designer.cs
generated
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
namespace TweetDck.Core {
|
||||||
|
partial class TrayIcon {
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing) {
|
||||||
|
if (disposing && (components != null)) {
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Component Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent() {
|
||||||
|
this.components = new System.ComponentModel.Container();
|
||||||
|
this.notifyIcon = new System.Windows.Forms.NotifyIcon(this.components);
|
||||||
|
this.contextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||||
|
this.restoreToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.muteNotificationsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.contextMenu.SuspendLayout();
|
||||||
|
//
|
||||||
|
// notifyIcon
|
||||||
|
//
|
||||||
|
this.notifyIcon.ContextMenuStrip = this.contextMenu;
|
||||||
|
this.notifyIcon.Icon = global::TweetDck.Properties.Resources.icon_tray;
|
||||||
|
this.notifyIcon.MouseClick += new System.Windows.Forms.MouseEventHandler(this.trayIcon_MouseClick);
|
||||||
|
//
|
||||||
|
// contextMenu
|
||||||
|
//
|
||||||
|
this.contextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
this.restoreToolStripMenuItem,
|
||||||
|
this.muteNotificationsToolStripMenuItem,
|
||||||
|
this.closeToolStripMenuItem});
|
||||||
|
this.contextMenu.Name = "contextMenuTray";
|
||||||
|
this.contextMenu.ShowCheckMargin = true;
|
||||||
|
this.contextMenu.ShowImageMargin = false;
|
||||||
|
this.contextMenu.ShowItemToolTips = false;
|
||||||
|
this.contextMenu.Size = new System.Drawing.Size(174, 92);
|
||||||
|
this.contextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuTray_Opening);
|
||||||
|
this.contextMenu.Opened += new System.EventHandler(this.contextMenuTray_Opened);
|
||||||
|
//
|
||||||
|
// restoreToolStripMenuItem
|
||||||
|
//
|
||||||
|
this.restoreToolStripMenuItem.Name = "restoreToolStripMenuItem";
|
||||||
|
this.restoreToolStripMenuItem.Size = new System.Drawing.Size(173, 22);
|
||||||
|
this.restoreToolStripMenuItem.Text = "Restore";
|
||||||
|
this.restoreToolStripMenuItem.Click += new System.EventHandler(this.restoreToolStripMenuItem_Click);
|
||||||
|
//
|
||||||
|
// muteNotificationsToolStripMenuItem
|
||||||
|
//
|
||||||
|
this.muteNotificationsToolStripMenuItem.CheckOnClick = true;
|
||||||
|
this.muteNotificationsToolStripMenuItem.Name = "muteNotificationsToolStripMenuItem";
|
||||||
|
this.muteNotificationsToolStripMenuItem.Size = new System.Drawing.Size(173, 22);
|
||||||
|
this.muteNotificationsToolStripMenuItem.Text = "Mute Notifications";
|
||||||
|
this.muteNotificationsToolStripMenuItem.CheckedChanged += new System.EventHandler(this.muteNotificationsToolStripMenuItem_CheckedChanged);
|
||||||
|
//
|
||||||
|
// closeToolStripMenuItem
|
||||||
|
//
|
||||||
|
this.closeToolStripMenuItem.Name = "closeToolStripMenuItem";
|
||||||
|
this.closeToolStripMenuItem.Size = new System.Drawing.Size(173, 22);
|
||||||
|
this.closeToolStripMenuItem.Text = "Close";
|
||||||
|
this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click);
|
||||||
|
//
|
||||||
|
// TrayIcon
|
||||||
|
//
|
||||||
|
this.contextMenu.ResumeLayout(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.NotifyIcon notifyIcon;
|
||||||
|
private System.Windows.Forms.ContextMenuStrip contextMenu;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem restoreToolStripMenuItem;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem closeToolStripMenuItem;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem muteNotificationsToolStripMenuItem;
|
||||||
|
}
|
||||||
|
}
|
78
Core/TrayIcon.cs
Normal file
78
Core/TrayIcon.cs
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
using System;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace TweetDck.Core{
|
||||||
|
partial class TrayIcon : Component{
|
||||||
|
public enum Behavior{ // keep order
|
||||||
|
Disabled, DisplayOnly, MinimizeToTray, CloseToTray
|
||||||
|
}
|
||||||
|
|
||||||
|
public event EventHandler ClickRestore;
|
||||||
|
public event EventHandler ClickClose;
|
||||||
|
|
||||||
|
public bool Visible{
|
||||||
|
get{
|
||||||
|
return notifyIcon.Visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
set{
|
||||||
|
notifyIcon.Visible = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool HasNotifications{
|
||||||
|
get{
|
||||||
|
return hasNotifications;
|
||||||
|
}
|
||||||
|
|
||||||
|
set{
|
||||||
|
if (hasNotifications != value){
|
||||||
|
notifyIcon.Icon = value ? Properties.Resources.icon_tray_new : Properties.Resources.icon_tray;
|
||||||
|
hasNotifications = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool hasNotifications;
|
||||||
|
|
||||||
|
public TrayIcon(){
|
||||||
|
InitializeComponent();
|
||||||
|
notifyIcon.Text = Program.BrandName;
|
||||||
|
}
|
||||||
|
|
||||||
|
// event handlers
|
||||||
|
|
||||||
|
private void trayIcon_MouseClick(object sender, MouseEventArgs e){
|
||||||
|
if (e.Button == MouseButtons.Left){
|
||||||
|
restoreToolStripMenuItem_Click(sender,e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void contextMenuTray_Opening(object sender, CancelEventArgs e){
|
||||||
|
muteNotificationsToolStripMenuItem.CheckedChanged -= muteNotificationsToolStripMenuItem_CheckedChanged;
|
||||||
|
muteNotificationsToolStripMenuItem.Checked = Program.UserConfig.MuteNotifications;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void contextMenuTray_Opened(object sender, EventArgs e){
|
||||||
|
muteNotificationsToolStripMenuItem.CheckedChanged += muteNotificationsToolStripMenuItem_CheckedChanged;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void restoreToolStripMenuItem_Click(object sender, EventArgs e){
|
||||||
|
if (ClickRestore != null){
|
||||||
|
ClickRestore(this,e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void muteNotificationsToolStripMenuItem_CheckedChanged(object sender, EventArgs e){
|
||||||
|
Program.UserConfig.MuteNotifications = muteNotificationsToolStripMenuItem.Checked;
|
||||||
|
Program.UserConfig.Save();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void closeToolStripMenuItem_Click(object sender, EventArgs e){
|
||||||
|
if (ClickClose != null){
|
||||||
|
ClickClose(this,e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
53
Core/Utils/BrowserCache.cs
Normal file
53
Core/Utils/BrowserCache.cs
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace TweetDck.Core.Utils{
|
||||||
|
static class BrowserCache{
|
||||||
|
private static bool ClearOnExit { get; set; }
|
||||||
|
|
||||||
|
private static readonly string IndexFile = Path.Combine(Program.StoragePath,"index");
|
||||||
|
|
||||||
|
private static IEnumerable<string> CacheFiles{
|
||||||
|
get{
|
||||||
|
return Directory.EnumerateFiles(Program.StoragePath).Where(path => {
|
||||||
|
string file = Path.GetFileName(path);
|
||||||
|
return file != null && (file.StartsWith("data_",StringComparison.Ordinal) || file.StartsWith("f_",StringComparison.Ordinal));
|
||||||
|
}).Concat(new[]{ IndexFile });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void CalculateCacheSize(Action<long> callbackBytes){
|
||||||
|
Task<long> task = new Task<long>(() => {
|
||||||
|
return CacheFiles.Select(file => {
|
||||||
|
try{
|
||||||
|
return new FileInfo(file).Length;
|
||||||
|
}catch{
|
||||||
|
return 0L;
|
||||||
|
}
|
||||||
|
}).Sum();
|
||||||
|
});
|
||||||
|
|
||||||
|
task.ContinueWith(originalTask => callbackBytes(originalTask.Exception == null ? originalTask.Result : -1L),TaskContinuationOptions.ExecuteSynchronously);
|
||||||
|
task.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetClearOnExit(){
|
||||||
|
ClearOnExit = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Exit(){
|
||||||
|
if (ClearOnExit){
|
||||||
|
foreach(string file in CacheFiles){
|
||||||
|
try{
|
||||||
|
File.Delete(file);
|
||||||
|
}catch{
|
||||||
|
// welp, too bad
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
60
Core/Utils/HardwareAcceleration.cs
Normal file
60
Core/Utils/HardwareAcceleration.cs
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace TweetDck.Core.Utils{
|
||||||
|
static class HardwareAcceleration{
|
||||||
|
private static readonly string LibEGL = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"libEGL.dll");
|
||||||
|
private static readonly string LibGLES = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"libGLESv2.dll");
|
||||||
|
|
||||||
|
private static readonly string DisabledLibEGL = LibEGL+".bak";
|
||||||
|
private static readonly string DisabledLibGLES = LibGLES+".bak";
|
||||||
|
|
||||||
|
public static bool IsEnabled{
|
||||||
|
get{
|
||||||
|
return File.Exists(LibEGL) && File.Exists(LibGLES);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool CanEnable{
|
||||||
|
get{
|
||||||
|
return File.Exists(DisabledLibEGL) && File.Exists(DisabledLibGLES);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool Enable(){
|
||||||
|
if (IsEnabled)return false;
|
||||||
|
|
||||||
|
try{
|
||||||
|
File.Move(DisabledLibEGL,LibEGL);
|
||||||
|
File.Move(DisabledLibGLES,LibGLES);
|
||||||
|
return true;
|
||||||
|
}catch{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool Disable(){
|
||||||
|
if (!IsEnabled)return false;
|
||||||
|
|
||||||
|
try{
|
||||||
|
if (File.Exists(DisabledLibEGL)){
|
||||||
|
File.Delete(DisabledLibEGL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (File.Exists(DisabledLibGLES)){
|
||||||
|
File.Delete(DisabledLibGLES);
|
||||||
|
}
|
||||||
|
}catch{
|
||||||
|
// woops
|
||||||
|
}
|
||||||
|
|
||||||
|
try{
|
||||||
|
File.Move(LibEGL,DisabledLibEGL);
|
||||||
|
File.Move(LibGLES,DisabledLibGLES);
|
||||||
|
return true;
|
||||||
|
}catch{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
56
Core/Utils/NativeMethods.cs
Normal file
56
Core/Utils/NativeMethods.cs
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace TweetDck.Core.Utils{
|
||||||
|
static class NativeMethods{
|
||||||
|
public const int HWND_TOPMOST = -1;
|
||||||
|
public const uint SWP_NOACTIVATE = 0x0010;
|
||||||
|
|
||||||
|
public const int MOUSEEVENTF_LEFTDOWN = 0x02;
|
||||||
|
public const int MOUSEEVENTF_LEFTUP = 0x04;
|
||||||
|
public const int MOUSEEVENTF_RIGHTDOWN = 0x08;
|
||||||
|
public const int MOUSEEVENTF_RIGHTUP = 0x10;
|
||||||
|
|
||||||
|
public enum MouseButton{
|
||||||
|
Left, Right
|
||||||
|
}
|
||||||
|
|
||||||
|
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
|
||||||
|
public static extern IntPtr LoadLibrary(string name);
|
||||||
|
|
||||||
|
[DllImport("Shell32.dll")]
|
||||||
|
public static extern int SHChangeNotify(int eventId, int flags, IntPtr item1, IntPtr item2);
|
||||||
|
|
||||||
|
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
|
||||||
|
public static extern bool SetWindowPos(int hWnd, int hWndOrder, int x, int y, int width, int height, uint flags);
|
||||||
|
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
|
||||||
|
|
||||||
|
public static void SetFormPos(Form form, int hWndOrder, uint flags){
|
||||||
|
SetWindowPos(form.Handle.ToInt32(),hWndOrder,form.Left,form.Top,form.Width,form.Height,flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SimulateMouseClick(MouseButton button){
|
||||||
|
int flagHold, flagRelease;
|
||||||
|
|
||||||
|
switch(button){
|
||||||
|
case MouseButton.Left:
|
||||||
|
flagHold = SystemInformation.MouseButtonsSwapped ? MOUSEEVENTF_RIGHTDOWN : MOUSEEVENTF_LEFTDOWN;
|
||||||
|
flagRelease = SystemInformation.MouseButtonsSwapped ? MOUSEEVENTF_RIGHTUP : MOUSEEVENTF_LEFTUP;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MouseButton.Right:
|
||||||
|
flagHold = SystemInformation.MouseButtonsSwapped ? MOUSEEVENTF_LEFTDOWN : MOUSEEVENTF_RIGHTDOWN;
|
||||||
|
flagRelease = SystemInformation.MouseButtonsSwapped ? MOUSEEVENTF_LEFTUP : MOUSEEVENTF_RIGHTUP;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default: return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mouse_event(flagHold,Cursor.Position.X,Cursor.Position.Y,0,0);
|
||||||
|
mouse_event(flagRelease,Cursor.Position.X,Cursor.Position.Y,0,0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
34
Migration/FormMigrationQuestion.Designer.cs
generated
34
Migration/FormMigrationQuestion.Designer.cs
generated
@@ -28,10 +28,9 @@ namespace TweetDck.Migration {
|
|||||||
this.btnIgnore = new System.Windows.Forms.Button();
|
this.btnIgnore = new System.Windows.Forms.Button();
|
||||||
this.panelButtons = new System.Windows.Forms.FlowLayoutPanel();
|
this.panelButtons = new System.Windows.Forms.FlowLayoutPanel();
|
||||||
this.btnAskLater = new System.Windows.Forms.Button();
|
this.btnAskLater = new System.Windows.Forms.Button();
|
||||||
this.btnCopy = new System.Windows.Forms.Button();
|
|
||||||
this.btnMigrate = new System.Windows.Forms.Button();
|
this.btnMigrate = new System.Windows.Forms.Button();
|
||||||
this.btnMigrateUninstall = new System.Windows.Forms.Button();
|
this.btnMigrateUninstall = new System.Windows.Forms.Button();
|
||||||
this.labelQuestion = new RichTextLabel();
|
this.labelQuestion = new TweetDck.Core.Controls.RichTextLabel();
|
||||||
this.panelButtons.SuspendLayout();
|
this.panelButtons.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
@@ -39,8 +38,8 @@ namespace TweetDck.Migration {
|
|||||||
//
|
//
|
||||||
this.btnIgnore.AutoSize = true;
|
this.btnIgnore.AutoSize = true;
|
||||||
this.btnIgnore.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
this.btnIgnore.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
this.btnIgnore.Location = new System.Drawing.Point(356, 0);
|
this.btnIgnore.Location = new System.Drawing.Point(353, 0);
|
||||||
this.btnIgnore.Margin = new System.Windows.Forms.Padding(3, 0, 0, 0);
|
this.btnIgnore.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
||||||
this.btnIgnore.Name = "btnIgnore";
|
this.btnIgnore.Name = "btnIgnore";
|
||||||
this.btnIgnore.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
this.btnIgnore.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
||||||
this.btnIgnore.Size = new System.Drawing.Size(53, 23);
|
this.btnIgnore.Size = new System.Drawing.Size(53, 23);
|
||||||
@@ -55,11 +54,10 @@ namespace TweetDck.Migration {
|
|||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.panelButtons.Controls.Add(this.btnAskLater);
|
this.panelButtons.Controls.Add(this.btnAskLater);
|
||||||
this.panelButtons.Controls.Add(this.btnIgnore);
|
this.panelButtons.Controls.Add(this.btnIgnore);
|
||||||
this.panelButtons.Controls.Add(this.btnCopy);
|
|
||||||
this.panelButtons.Controls.Add(this.btnMigrate);
|
this.panelButtons.Controls.Add(this.btnMigrate);
|
||||||
this.panelButtons.Controls.Add(this.btnMigrateUninstall);
|
this.panelButtons.Controls.Add(this.btnMigrateUninstall);
|
||||||
this.panelButtons.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft;
|
this.panelButtons.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft;
|
||||||
this.panelButtons.Location = new System.Drawing.Point(12, 87);
|
this.panelButtons.Location = new System.Drawing.Point(12, 75);
|
||||||
this.panelButtons.Name = "panelButtons";
|
this.panelButtons.Name = "panelButtons";
|
||||||
this.panelButtons.Size = new System.Drawing.Size(480, 23);
|
this.panelButtons.Size = new System.Drawing.Size(480, 23);
|
||||||
this.panelButtons.TabIndex = 0;
|
this.panelButtons.TabIndex = 0;
|
||||||
@@ -78,25 +76,11 @@ namespace TweetDck.Migration {
|
|||||||
this.btnAskLater.UseVisualStyleBackColor = true;
|
this.btnAskLater.UseVisualStyleBackColor = true;
|
||||||
this.btnAskLater.Click += new System.EventHandler(this.btnAskLater_Click);
|
this.btnAskLater.Click += new System.EventHandler(this.btnAskLater_Click);
|
||||||
//
|
//
|
||||||
// btnCopy
|
|
||||||
//
|
|
||||||
this.btnCopy.AutoSize = true;
|
|
||||||
this.btnCopy.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
|
||||||
this.btnCopy.Location = new System.Drawing.Point(303, 0);
|
|
||||||
this.btnCopy.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
|
||||||
this.btnCopy.Name = "btnCopy";
|
|
||||||
this.btnCopy.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
|
||||||
this.btnCopy.Size = new System.Drawing.Size(47, 23);
|
|
||||||
this.btnCopy.TabIndex = 2;
|
|
||||||
this.btnCopy.Text = "Copy";
|
|
||||||
this.btnCopy.UseVisualStyleBackColor = true;
|
|
||||||
this.btnCopy.Click += new System.EventHandler(this.btnCopy_Click);
|
|
||||||
//
|
|
||||||
// btnMigrate
|
// btnMigrate
|
||||||
//
|
//
|
||||||
this.btnMigrate.AutoSize = true;
|
this.btnMigrate.AutoSize = true;
|
||||||
this.btnMigrate.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
this.btnMigrate.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
this.btnMigrate.Location = new System.Drawing.Point(239, 0);
|
this.btnMigrate.Location = new System.Drawing.Point(289, 0);
|
||||||
this.btnMigrate.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
this.btnMigrate.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
||||||
this.btnMigrate.Name = "btnMigrate";
|
this.btnMigrate.Name = "btnMigrate";
|
||||||
this.btnMigrate.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
this.btnMigrate.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
||||||
@@ -110,7 +94,7 @@ namespace TweetDck.Migration {
|
|||||||
//
|
//
|
||||||
this.btnMigrateUninstall.AutoSize = true;
|
this.btnMigrateUninstall.AutoSize = true;
|
||||||
this.btnMigrateUninstall.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
this.btnMigrateUninstall.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
this.btnMigrateUninstall.Location = new System.Drawing.Point(135, 0);
|
this.btnMigrateUninstall.Location = new System.Drawing.Point(185, 0);
|
||||||
this.btnMigrateUninstall.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0);
|
this.btnMigrateUninstall.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0);
|
||||||
this.btnMigrateUninstall.Name = "btnMigrateUninstall";
|
this.btnMigrateUninstall.Name = "btnMigrateUninstall";
|
||||||
this.btnMigrateUninstall.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
this.btnMigrateUninstall.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
||||||
@@ -131,7 +115,7 @@ namespace TweetDck.Migration {
|
|||||||
this.labelQuestion.Name = "labelQuestion";
|
this.labelQuestion.Name = "labelQuestion";
|
||||||
this.labelQuestion.ReadOnly = true;
|
this.labelQuestion.ReadOnly = true;
|
||||||
this.labelQuestion.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None;
|
this.labelQuestion.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None;
|
||||||
this.labelQuestion.Size = new System.Drawing.Size(443, 72);
|
this.labelQuestion.Size = new System.Drawing.Size(443, 60);
|
||||||
this.labelQuestion.TabIndex = 2;
|
this.labelQuestion.TabIndex = 2;
|
||||||
this.labelQuestion.TabStop = false;
|
this.labelQuestion.TabStop = false;
|
||||||
this.labelQuestion.Text = "";
|
this.labelQuestion.Text = "";
|
||||||
@@ -140,13 +124,14 @@ namespace TweetDck.Migration {
|
|||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(504, 122);
|
this.ClientSize = new System.Drawing.Size(504, 110);
|
||||||
this.Controls.Add(this.labelQuestion);
|
this.Controls.Add(this.labelQuestion);
|
||||||
this.Controls.Add(this.panelButtons);
|
this.Controls.Add(this.panelButtons);
|
||||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||||
this.MaximizeBox = false;
|
this.MaximizeBox = false;
|
||||||
this.MinimizeBox = false;
|
this.MinimizeBox = false;
|
||||||
this.Name = "FormMigrationQuestion";
|
this.Name = "FormMigrationQuestion";
|
||||||
|
this.ShowIcon = false;
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||||
this.Text = "TweetDeck Migration";
|
this.Text = "TweetDeck Migration";
|
||||||
this.panelButtons.ResumeLayout(false);
|
this.panelButtons.ResumeLayout(false);
|
||||||
@@ -159,7 +144,6 @@ namespace TweetDck.Migration {
|
|||||||
|
|
||||||
private System.Windows.Forms.Button btnIgnore;
|
private System.Windows.Forms.Button btnIgnore;
|
||||||
private System.Windows.Forms.FlowLayoutPanel panelButtons;
|
private System.Windows.Forms.FlowLayoutPanel panelButtons;
|
||||||
private System.Windows.Forms.Button btnCopy;
|
|
||||||
private System.Windows.Forms.Button btnMigrate;
|
private System.Windows.Forms.Button btnMigrate;
|
||||||
private RichTextLabel labelQuestion;
|
private RichTextLabel labelQuestion;
|
||||||
private System.Windows.Forms.Button btnAskLater;
|
private System.Windows.Forms.Button btnAskLater;
|
||||||
|
@@ -10,7 +10,7 @@ namespace TweetDck.Migration{
|
|||||||
public FormMigrationQuestion(){
|
public FormMigrationQuestion(){
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
labelQuestion.Rtf = RichTextLabel.Wrap(@"Hey there, I found some TweetDeck data! Do you want to \b Migrate\b0 it and delete the old data folder, \b Copy\b0 it and keep the folder, \b Ignore\b0 the request forever, or do you need some more time for the decision?\par You may also \b Migrate & Purge\b0 which uninstalls TweetDeck too!");
|
labelQuestion.Rtf = RichTextLabel.Wrap(@"Hey there, I found some TweetDeck data! Do you want to \b Migrate\b0 it and delete the old data folder, \b Ignore\b0 the request forever, or just try "+Program.BrandName+@" first?\par You may also \b Migrate & Purge\b0 which uninstalls TweetDeck too!");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnPaint(PaintEventArgs e){
|
protected override void OnPaint(PaintEventArgs e){
|
||||||
@@ -26,10 +26,6 @@ namespace TweetDck.Migration{
|
|||||||
Close(MigrationDecision.Migrate);
|
Close(MigrationDecision.Migrate);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnCopy_Click(object sender, EventArgs e){
|
|
||||||
Close(MigrationDecision.Copy);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btnIgnore_Click(object sender, EventArgs e){
|
private void btnIgnore_Click(object sender, EventArgs e){
|
||||||
Close(MigrationDecision.Ignore);
|
Close(MigrationDecision.Ignore);
|
||||||
}
|
}
|
||||||
|
@@ -9,11 +9,6 @@
|
|||||||
/// Does exactly what <see cref="Migrate"/> does, but also silently uninstalls TweetDeck.
|
/// Does exactly what <see cref="Migrate"/> does, but also silently uninstalls TweetDeck.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
MigratePurge,
|
MigratePurge,
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Copies the important files without deleting the TweetDeck folder.
|
|
||||||
/// </summary>
|
|
||||||
Copy,
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Does not copy any files and does not ask the user about data migration again.
|
/// Does not copy any files and does not ask the user about data migration again.
|
||||||
|
@@ -8,6 +8,7 @@ using System.Windows.Forms;
|
|||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
using TweetDck.Core.Other;
|
using TweetDck.Core.Other;
|
||||||
using TweetDck.Migration.Helpers;
|
using TweetDck.Migration.Helpers;
|
||||||
|
using TweetDck.Core.Utils;
|
||||||
|
|
||||||
namespace TweetDck.Migration{
|
namespace TweetDck.Migration{
|
||||||
static class MigrationManager{
|
static class MigrationManager{
|
||||||
@@ -25,7 +26,6 @@ namespace TweetDck.Migration{
|
|||||||
switch(decision){
|
switch(decision){
|
||||||
case MigrationDecision.MigratePurge:
|
case MigrationDecision.MigratePurge:
|
||||||
case MigrationDecision.Migrate:
|
case MigrationDecision.Migrate:
|
||||||
case MigrationDecision.Copy:
|
|
||||||
FormBackgroundWork formWait = new FormBackgroundWork();
|
FormBackgroundWork formWait = new FormBackgroundWork();
|
||||||
|
|
||||||
formWait.ShowWorkDialog(() => {
|
formWait.ShowWorkDialog(() => {
|
||||||
@@ -66,7 +66,7 @@ namespace TweetDck.Migration{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static bool BeginMigration(MigrationDecision decision, Action<Exception> onFinished){
|
private static bool BeginMigration(MigrationDecision decision, Action<Exception> onFinished){
|
||||||
if (decision != MigrationDecision.MigratePurge && decision != MigrationDecision.Migrate && decision != MigrationDecision.Copy){
|
if (decision != MigrationDecision.MigratePurge && decision != MigrationDecision.Migrate){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -117,7 +117,7 @@ namespace TweetDck.Migration{
|
|||||||
if (decision == MigrationDecision.MigratePurge){
|
if (decision == MigrationDecision.MigratePurge){
|
||||||
// update the lnk files wherever possible (desktop icons, pinned taskbar, start menu)
|
// update the lnk files wherever possible (desktop icons, pinned taskbar, start menu)
|
||||||
foreach(string location in GetLnkDirectories()){
|
foreach(string location in GetLnkDirectories()){
|
||||||
if (location == string.Empty)continue;
|
if (string.IsNullOrEmpty(location))continue;
|
||||||
|
|
||||||
string linkFile = Path.Combine(location,"TweetDeck.lnk");
|
string linkFile = Path.Combine(location,"TweetDeck.lnk");
|
||||||
|
|
||||||
@@ -125,7 +125,7 @@ namespace TweetDck.Migration{
|
|||||||
LnkEditor lnk = new LnkEditor(linkFile);
|
LnkEditor lnk = new LnkEditor(linkFile);
|
||||||
lnk.SetPath(Application.ExecutablePath);
|
lnk.SetPath(Application.ExecutablePath);
|
||||||
lnk.SetWorkingDirectory(Environment.CurrentDirectory);
|
lnk.SetWorkingDirectory(Environment.CurrentDirectory);
|
||||||
lnk.SetComment(Program.BrandName); // TODO add a tagline
|
lnk.SetComment(Program.BrandName+" client for Windows");
|
||||||
lnk.Save();
|
lnk.Save();
|
||||||
|
|
||||||
string renamed = Path.Combine(location,Program.BrandName+".lnk");
|
string renamed = Path.Combine(location,Program.BrandName+".lnk");
|
||||||
@@ -143,7 +143,7 @@ namespace TweetDck.Migration{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Program.SHChangeNotify(0x8000000,0x1000,IntPtr.Zero,IntPtr.Zero); // refreshes desktop
|
NativeMethods.SHChangeNotify(0x8000000,0x1000,IntPtr.Zero,IntPtr.Zero); // refreshes desktop
|
||||||
|
|
||||||
// uninstall in the background
|
// uninstall in the background
|
||||||
string guid = ProgramRegistrySearch.FindByDisplayName("TweetDeck");
|
string guid = ProgramRegistrySearch.FindByDisplayName("TweetDeck");
|
||||||
@@ -177,15 +177,6 @@ namespace TweetDck.Migration{
|
|||||||
yield return Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
|
yield return Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
|
||||||
yield return Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory);
|
yield return Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory);
|
||||||
yield return Environment.ExpandEnvironmentVariables(@"%APPDATA%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar");
|
yield return Environment.ExpandEnvironmentVariables(@"%APPDATA%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar");
|
||||||
|
|
||||||
/* already handled by the installer
|
|
||||||
string startMenu = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu);
|
|
||||||
string[] sub = Directory.GetDirectories(startMenu);
|
|
||||||
|
|
||||||
if (sub.Length > 0){
|
|
||||||
yield return Path.Combine(startMenu,sub[0],"TweetDeck");
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void RunUninstaller(string guid, int timeout){
|
private static void RunUninstaller(string guid, int timeout){
|
||||||
|
73
Program.cs
73
Program.cs
@@ -2,7 +2,6 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using CefSharp;
|
using CefSharp;
|
||||||
@@ -10,6 +9,8 @@ using TweetDck.Configuration;
|
|||||||
using TweetDck.Core;
|
using TweetDck.Core;
|
||||||
using TweetDck.Migration;
|
using TweetDck.Migration;
|
||||||
using TweetDck.Core.Utils;
|
using TweetDck.Core.Utils;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
[assembly: CLSCompliant(true)]
|
[assembly: CLSCompliant(true)]
|
||||||
namespace TweetDck{
|
namespace TweetDck{
|
||||||
@@ -22,10 +23,14 @@ namespace TweetDck{
|
|||||||
public const string Website = "http://tweetdick.chylex.com";
|
public const string Website = "http://tweetdick.chylex.com";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
public const string VersionTag = "1.1";
|
public const string VersionTag = "1.2.3";
|
||||||
|
public const string VersionFull = "1.2.3.0";
|
||||||
|
|
||||||
public static readonly string StoragePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),BrandName);
|
public static readonly string StoragePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),BrandName);
|
||||||
|
public static readonly string TemporaryPath = Path.Combine(Path.GetTempPath(),BrandName);
|
||||||
|
|
||||||
private static readonly LockManager LockManager = new LockManager(Path.Combine(StoragePath,".lock"));
|
private static readonly LockManager LockManager = new LockManager(Path.Combine(StoragePath,".lock"));
|
||||||
|
private static bool HasCleanedUp;
|
||||||
|
|
||||||
public static UserConfig UserConfig { get; private set; }
|
public static UserConfig UserConfig { get; private set; }
|
||||||
|
|
||||||
@@ -35,25 +40,37 @@ namespace TweetDck{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
|
|
||||||
public static extern IntPtr LoadLibrary(string name);
|
|
||||||
|
|
||||||
[DllImport("Shell32.dll")]
|
|
||||||
public static extern int SHChangeNotify(int eventId, int flags, IntPtr item1, IntPtr item2);
|
|
||||||
|
|
||||||
[STAThread]
|
[STAThread]
|
||||||
private static void Main(){
|
private static void Main(){
|
||||||
Application.EnableVisualStyles();
|
Application.EnableVisualStyles();
|
||||||
Application.SetCompatibleTextRenderingDefault(false);
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
|
|
||||||
if (!LockManager.Lock()){
|
if (Environment.GetCommandLineArgs().Contains("-restart")){
|
||||||
if (MessageBox.Show("Another instance of "+BrandName+" is already running.\r\nDo you want to close it?",BrandName+" is Already Running",MessageBoxButtons.YesNo,MessageBoxIcon.Error,MessageBoxDefaultButton.Button2) == DialogResult.Yes){
|
for(int attempt = 0; attempt < 21; attempt++){
|
||||||
if (!LockManager.CloseLockingProcess(10000)){
|
if (LockManager.Lock()){
|
||||||
MessageBox.Show("Could not close the other process.",BrandName+" Has Failed :(",MessageBoxButtons.OK,MessageBoxIcon.Error);
|
break;
|
||||||
|
}
|
||||||
|
else if (attempt == 20){
|
||||||
|
MessageBox.Show(BrandName+" is taking too long to close, please wait and then start the application again manually.",BrandName+" Cannot Restart",MessageBoxButtons.OK,MessageBoxIcon.Error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
Thread.Sleep(500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if (!LockManager.Lock()){
|
||||||
|
if (MessageBox.Show("Another instance of "+BrandName+" is already running.\r\nDo you want to close it?",BrandName+" is Already Running",MessageBoxButtons.YesNo,MessageBoxIcon.Error,MessageBoxDefaultButton.Button2) == DialogResult.Yes){
|
||||||
|
if (!LockManager.CloseLockingProcess(10000)){
|
||||||
|
MessageBox.Show("Could not close the other process.",BrandName+" Has Failed :(",MessageBoxButtons.OK,MessageBoxIcon.Error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LockManager.Lock();
|
||||||
|
}
|
||||||
|
else return;
|
||||||
}
|
}
|
||||||
else return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UserConfig = UserConfig.Load(Path.Combine(StoragePath,"TD_UserConfig.cfg"));
|
UserConfig = UserConfig.Load(Path.Combine(StoragePath,"TD_UserConfig.cfg"));
|
||||||
@@ -85,17 +102,13 @@ namespace TweetDck{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Application.ApplicationExit += (sender, args) => {
|
Application.ApplicationExit += (sender, args) => ExitCleanup();
|
||||||
UserConfig.Save();
|
|
||||||
LockManager.Unlock();
|
|
||||||
Cef.Shutdown();
|
|
||||||
};
|
|
||||||
|
|
||||||
FormBrowser mainForm = new FormBrowser();
|
FormBrowser mainForm = new FormBrowser();
|
||||||
Application.Run(mainForm);
|
Application.Run(mainForm);
|
||||||
|
|
||||||
if (mainForm.UpdateInstallerPath != null){
|
if (mainForm.UpdateInstallerPath != null){
|
||||||
Cef.Shutdown();
|
ExitCleanup();
|
||||||
|
|
||||||
Process.Start(mainForm.UpdateInstallerPath,"/SP- /SILENT /NOICONS /CLOSEAPPLICATIONS");
|
Process.Start(mainForm.UpdateInstallerPath,"/SP- /SILENT /NOICONS /CLOSEAPPLICATIONS");
|
||||||
Application.Exit();
|
Application.Exit();
|
||||||
@@ -126,5 +139,25 @@ namespace TweetDck{
|
|||||||
// oops
|
// oops
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void ExitCleanup(){
|
||||||
|
if (HasCleanedUp)return;
|
||||||
|
|
||||||
|
UserConfig.Save();
|
||||||
|
|
||||||
|
try{
|
||||||
|
Directory.Delete(TemporaryPath,true);
|
||||||
|
}catch(DirectoryNotFoundException){
|
||||||
|
}catch(Exception e){
|
||||||
|
// welp, too bad
|
||||||
|
Debug.WriteLine(e.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
Cef.Shutdown();
|
||||||
|
BrowserCache.Exit();
|
||||||
|
|
||||||
|
LockManager.Unlock();
|
||||||
|
HasCleanedUp = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -33,7 +33,7 @@ using TweetDck;
|
|||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("1.1.0.0")]
|
[assembly: AssemblyVersion(Program.VersionFull)]
|
||||||
[assembly: AssemblyFileVersion("1.1.0.0")]
|
[assembly: AssemblyFileVersion(Program.VersionFull)]
|
||||||
|
|
||||||
[assembly: NeutralResourcesLanguageAttribute("en")]
|
[assembly: NeutralResourcesLanguageAttribute("en")]
|
20
Properties/Resources.Designer.cs
generated
20
Properties/Resources.Designer.cs
generated
@@ -69,5 +69,25 @@ namespace TweetDck.Properties {
|
|||||||
return ((System.Drawing.Icon)(obj));
|
return ((System.Drawing.Icon)(obj));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Icon icon_tray {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("icon_tray", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Icon icon_tray_new {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("icon_tray_new", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -121,4 +121,10 @@
|
|||||||
<data name="icon" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="icon" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\icon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\Resources\icon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="icon_tray" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\icon-tray.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="icon_tray_new" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\icon-tray-new.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
@@ -1,7 +1,9 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace TweetDck.Resources{
|
namespace TweetDck.Resources{
|
||||||
static class ScriptLoader{
|
static class ScriptLoader{
|
||||||
@@ -13,5 +15,9 @@ namespace TweetDck.Resources{
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static IEnumerable<string> LoadResources(params string[] names){
|
||||||
|
return names.Select(LoadResource);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
BIN
Resources/about.png
Normal file
BIN
Resources/about.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.4 KiB |
@@ -1,23 +1,18 @@
|
|||||||
(function($,$TD){
|
(function($,$TD,TD){
|
||||||
//
|
|
||||||
// Constant: List of valid font size classes.
|
|
||||||
//
|
|
||||||
var fontSizeClasses = [ "txt-base-smallest", "txt-base-small", "txt-base-medium", "txt-base-large", "txt-base-largest" ];
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Variable: Says whether TweetD*ck events was initialized.
|
// Variable: Says whether TweetD*ck events was initialized.
|
||||||
//
|
//
|
||||||
var isInitialized = false;
|
var isInitialized = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Variable: Previous font size class in the <html> tag.
|
// Variable: Current highlighted column jQuery object.
|
||||||
//
|
//
|
||||||
var prevFontSizeClass;
|
var highlightedColumnEle;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Variable: Current timeout ID for update checking.
|
// Variable: Currently highlighted tweet jQuery object.
|
||||||
//
|
//
|
||||||
var updateCheckTimeoutID;
|
var highlightedTweetEle;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Function: Initializes TweetD*ck events. Called after the website app is loaded.
|
// Function: Initializes TweetD*ck events. Called after the website app is loaded.
|
||||||
@@ -29,7 +24,7 @@
|
|||||||
var menu = $(".js-dropdown-content").children("ul").first();
|
var menu = $(".js-dropdown-content").children("ul").first();
|
||||||
if (menu.length === 0)return;
|
if (menu.length === 0)return;
|
||||||
|
|
||||||
menu.children(".drp-h-divider").last().after('<li class="is-selectable" data-std><a href="#" data-action>'+$TD.brandName+'</a></li><li class="drp-h-divider"></li>');
|
menu.children(".drp-h-divider").last().after('<li class="is-selectable" data-std><a href="#" data-action>'+$TD.brandName+' settings</a></li><li class="drp-h-divider"></li>');
|
||||||
|
|
||||||
var tweetDckBtn = menu.children("[data-std]").first();
|
var tweetDckBtn = menu.children("[data-std]").first();
|
||||||
|
|
||||||
@@ -45,115 +40,66 @@
|
|||||||
},0);
|
},0);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Tweet notifications
|
// Fix layout for right-aligned actions menu
|
||||||
(function(){
|
$(document).on("uiShowActionsMenu",function(){
|
||||||
var columns = $(".js-app-columns").first();
|
$(".js-dropdown.pos-r").toggleClass("pos-r pos-l");
|
||||||
|
});
|
||||||
var refreshColumnObservers = function(){
|
|
||||||
columns.children().each(function(){
|
|
||||||
registerTweetObserverForColumn($(this));
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
new MutationObserver(refreshColumnObservers).observe(columns[0],{
|
|
||||||
childList: true
|
|
||||||
});
|
|
||||||
|
|
||||||
refreshColumnObservers();
|
|
||||||
})();
|
|
||||||
|
|
||||||
// Force popup notification settings
|
// Notification handling
|
||||||
window.TD.controller.notifications.hasNotifications = function(){
|
$.subscribe("/notifications/new",function(obj){
|
||||||
return true;
|
for(let index = obj.items.length-1; index >= 0; index--){
|
||||||
};
|
onNewTweet(obj.column,obj.items[index]);
|
||||||
|
}
|
||||||
window.TD.controller.notifications.isPermissionGranted = function(){
|
});
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Run update check
|
|
||||||
runUpdateCheck();
|
|
||||||
|
|
||||||
// Finish init
|
// Finish init
|
||||||
|
$TD.loadFontSizeClass(TD.settings.getFontSize());
|
||||||
|
$TD.loadNotificationHeadContents(getNotificationHeadContents());
|
||||||
|
|
||||||
isInitialized = true;
|
isInitialized = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
// Function: Registers an observer to a TweetDeck column, which reports new tweets.
|
// Function: Prepends code at the beginning of a function. If the prepended function returns true, execution of the original function is cancelled.
|
||||||
//
|
//
|
||||||
var registerTweetObserverForColumn = function(column){
|
var prependToFunction = function(func, extension){
|
||||||
if (column[0].hasAttribute("data-std-observed"))return;
|
return function(){
|
||||||
|
return extension.apply(this,arguments) === true ? undefined : func.apply(this,arguments);
|
||||||
var mid = column;
|
};
|
||||||
mid = mid.children().first();
|
};
|
||||||
mid = mid.children().first();
|
|
||||||
mid = mid.children(".js-column-content").first();
|
//
|
||||||
mid = mid.children(".js-column-scroller").first();
|
// Function: Appends code at the end of a function.
|
||||||
|
//
|
||||||
var container = mid.children(".js-chirp-container").first();
|
var appendToFunction = function(func, extension){
|
||||||
if (container.length === 0)return;
|
return function(){
|
||||||
|
var res = func.apply(this,arguments);
|
||||||
var scroller = container.parent();
|
extension.apply(this,arguments);
|
||||||
|
return res;
|
||||||
new MutationObserver(function(mutations){
|
};
|
||||||
if (!container[0].hasAttribute("data-std-loaded")){
|
|
||||||
container[0].setAttribute("data-std-loaded","");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var data = TD.controller.columnManager.get(column.attr("data-column"));
|
|
||||||
if (!data.model.getHasNotification())return;
|
|
||||||
|
|
||||||
if (scroller.scrollTop() != 0)return;
|
|
||||||
|
|
||||||
Array.prototype.forEach.call(mutations,function(mutation){
|
|
||||||
Array.prototype.forEach.call(mutation.addedNodes,function(node){
|
|
||||||
if (node.tagName !== "ARTICLE")return;
|
|
||||||
|
|
||||||
onNewTweet(column,node);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}).observe(container[0],{
|
|
||||||
childList: true
|
|
||||||
});
|
|
||||||
|
|
||||||
column[0].setAttribute("data-std-observed","");
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
// Function: Event callback for a new tweet.
|
// Function: Event callback for a new tweet.
|
||||||
//
|
//
|
||||||
var onNewTweet = function(column, tweet){
|
var onNewTweet = function(column, tweet){
|
||||||
var html = $(tweet.outerHTML);
|
if (column.model.getHasNotification()){
|
||||||
var body = html.find(".tweet-body").first();
|
var html = $(tweet.render({
|
||||||
|
withFooter: false,
|
||||||
if (html.find(".icon-reply").length > 0){
|
withTweetActions: false,
|
||||||
return; // ignore sent messages
|
withMediaPreview: false
|
||||||
|
}));
|
||||||
|
|
||||||
|
html.css("border","0");
|
||||||
|
html.find(".tweet-body").first().children("footer").remove();
|
||||||
|
|
||||||
|
var url = html.find("time").first().children("a").first().attr("href") || "";
|
||||||
|
|
||||||
|
$TD.onTweetPopup(html.html(),url,tweet.text.length); // TODO column
|
||||||
}
|
}
|
||||||
|
else if (column.model.getHasSound()){
|
||||||
body.children("div.js-quote-detail").each(function(){
|
$TD.onTweetSound(); // TODO disable original
|
||||||
$(this).html("(quoted tweet)");
|
|
||||||
});
|
|
||||||
|
|
||||||
body.children().not("p,span,div.js-quote-detail").remove();
|
|
||||||
|
|
||||||
var characters = html.find(".js-tweet-text:first").text().length;
|
|
||||||
if (characters == 0)return;
|
|
||||||
|
|
||||||
$TD.onTweetPopup(html.html(),characters); // TODO column & remove pic links from text()
|
|
||||||
};
|
|
||||||
|
|
||||||
//
|
|
||||||
// Function: Retrieves the font size using <html> class attribute.
|
|
||||||
//
|
|
||||||
var getFontSizeClass = function(){
|
|
||||||
for(var index = 0; index < fontSizeClasses.length; index++){
|
|
||||||
if (document.documentElement.classList.contains(fontSizeClasses[index])){
|
|
||||||
return fontSizeClasses[index];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return fontSizeClasses[0];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -169,120 +115,12 @@
|
|||||||
return tags.join("");
|
return tags.join("");
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
|
||||||
// Function: Creates the update notification element. Removes the old one if already exists.
|
|
||||||
//
|
|
||||||
var createUpdateNotificationElement = function(version, download){
|
|
||||||
var ele = $("#tweetdck-update");
|
|
||||||
var existed = ele.length > 0;
|
|
||||||
|
|
||||||
if (existed > 0){
|
|
||||||
ele.remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
var html = [
|
|
||||||
"<div id='tweetdck-update'>",
|
|
||||||
"<p class='tdu-title'>"+$TD.brandName+" Update</p>",
|
|
||||||
"<p class='tdu-info'>Version "+version+" is now available.</p>",
|
|
||||||
"<div class='tdu-buttons'>",
|
|
||||||
"<button class='btn btn-positive tdu-btn-download'><span class='label'>Download</button>",
|
|
||||||
"<button class='btn btn-negative tdu-btn-dismiss'><span class='label'>Dismiss</button>",
|
|
||||||
"</div>",
|
|
||||||
"</div>"
|
|
||||||
];
|
|
||||||
|
|
||||||
$("h1.app-title").after(html.join(""));
|
|
||||||
|
|
||||||
ele = $("#tweetdck-update");
|
|
||||||
|
|
||||||
var buttonDiv = ele.children("div.tdu-buttons").first();
|
|
||||||
|
|
||||||
ele.css({
|
|
||||||
color: "#fff",
|
|
||||||
backgroundColor: "rgb(32,94,138)",
|
|
||||||
position: "absolute",
|
|
||||||
left: "4px",
|
|
||||||
bottom: "4px",
|
|
||||||
width: "192px",
|
|
||||||
height: "86px",
|
|
||||||
display: existed ? "block" : "none",
|
|
||||||
borderRadius: "2px"
|
|
||||||
});
|
|
||||||
|
|
||||||
ele.children("p.tdu-title").first().css({
|
|
||||||
fontSize: "17px",
|
|
||||||
fontWeight: "bold",
|
|
||||||
textAlign: "center",
|
|
||||||
letterSpacing: "0.2px",
|
|
||||||
margin: "4px auto 2px"
|
|
||||||
});
|
|
||||||
|
|
||||||
ele.children("p.tdu-info").first().css({
|
|
||||||
fontSize: "12px",
|
|
||||||
textAlign: "center",
|
|
||||||
margin: "2px auto 6px"
|
|
||||||
});
|
|
||||||
|
|
||||||
buttonDiv.css({
|
|
||||||
textAlign: "center"
|
|
||||||
});
|
|
||||||
|
|
||||||
buttonDiv.children().css({
|
|
||||||
margin: "0 4px",
|
|
||||||
minHeight: "25px",
|
|
||||||
boxShadow: "1px 1px 1px rgba(17,17,17,0.5)"
|
|
||||||
});
|
|
||||||
|
|
||||||
buttonDiv.find("span").css({
|
|
||||||
verticalAlign: "baseline"
|
|
||||||
});
|
|
||||||
|
|
||||||
ele.find("span.tdu-data-tag").first().css({
|
|
||||||
cursor: "pointer",
|
|
||||||
textDecoration: "underline"
|
|
||||||
});
|
|
||||||
|
|
||||||
buttonDiv.children(".tdu-btn-download").click(function(){
|
|
||||||
ele.remove();
|
|
||||||
$TD.onUpdateAccepted(version,download);
|
|
||||||
});
|
|
||||||
|
|
||||||
buttonDiv.children(".tdu-btn-dismiss").click(function(){
|
|
||||||
$TD.onUpdateDismissed(version);
|
|
||||||
ele.slideUp(function(){ ele.remove(); });
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!existed){
|
|
||||||
ele.slideDown();
|
|
||||||
}
|
|
||||||
|
|
||||||
return ele;
|
|
||||||
};
|
|
||||||
|
|
||||||
//
|
|
||||||
// Function: Runs an update check and updates all DOM elements appropriately
|
|
||||||
//
|
|
||||||
var runUpdateCheck = function(){
|
|
||||||
clearTimeout(updateCheckTimeoutID);
|
|
||||||
updateCheckTimeoutID = setTimeout(runUpdateCheck,1000*60*60); // 1 hour
|
|
||||||
|
|
||||||
if (!$TD.updateCheckEnabled)return;
|
|
||||||
|
|
||||||
$.getJSON("https://api.github.com/repos/chylex/"+$TD.brandName+"/releases/latest",function(response){
|
|
||||||
var tagName = response.tag_name;
|
|
||||||
|
|
||||||
if (tagName != $TD.versionTag && tagName != $TD.dismissedVersionTag && response.assets.length > 0){
|
|
||||||
createUpdateNotificationElement(tagName,response.assets[0].browser_download_url);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Block: Observe the app <div> element and initialize TweetD*ck whenever possible.
|
// Block: Observe the app <div> element and initialize TweetD*ck whenever possible.
|
||||||
//
|
//
|
||||||
var app = $("body").children(".js-app");
|
var app = $("body").children(".js-app");
|
||||||
|
|
||||||
new MutationObserver(function(mutations){
|
new MutationObserver(function(){
|
||||||
if (isInitialized && app.hasClass("is-hidden")){
|
if (isInitialized && app.hasClass("is-hidden")){
|
||||||
isInitialized = false;
|
isInitialized = false;
|
||||||
}
|
}
|
||||||
@@ -295,34 +133,31 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
//
|
//
|
||||||
// Block: Observe changes in <html> class to update font size.
|
// Block: Hook into settings object to detect when the settings change.
|
||||||
//
|
//
|
||||||
new MutationObserver(function(mutations){
|
TD.settings.setFontSize = appendToFunction(TD.settings.setFontSize,function(name){
|
||||||
var fsClass = getFontSizeClass();
|
$TD.loadFontSizeClass(name);
|
||||||
|
});
|
||||||
if (fsClass != prevFontSizeClass){
|
|
||||||
prevFontSizeClass = fsClass;
|
TD.settings.setTheme = appendToFunction(TD.settings.setTheme,function(){
|
||||||
$TD.loadFontSizeClass(fsClass);
|
setTimeout(function(){
|
||||||
}
|
$TD.loadNotificationHeadContents(getNotificationHeadContents());
|
||||||
}).observe(document.documentElement,{
|
},0);
|
||||||
attributes: true,
|
|
||||||
attributeFilter: [ "class" ]
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//
|
//
|
||||||
// Block: Observe stylesheet swapping.
|
// Block: Force popup notification settings.
|
||||||
//
|
//
|
||||||
new MutationObserver(function(mutations){
|
TD.controller.notifications.hasNotifications = function(){
|
||||||
$TD.loadNotificationHeadContents(getNotificationHeadContents());
|
return true;
|
||||||
}).observe(document.head.querySelector("[http-equiv='Default-Style']"),{
|
};
|
||||||
attributes: true,
|
|
||||||
attributeFilter: [ "content" ]
|
TD.controller.notifications.isPermissionGranted = function(){
|
||||||
});
|
return true;
|
||||||
|
};
|
||||||
$TD.loadNotificationHeadContents(getNotificationHeadContents());
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Block: Hook into links to bypass default open function
|
// Block: Hook into links to bypass default open function.
|
||||||
//
|
//
|
||||||
(function(){
|
(function(){
|
||||||
var urlWait = false;
|
var urlWait = false;
|
||||||
@@ -338,12 +173,12 @@
|
|||||||
var me = $(this);
|
var me = $(this);
|
||||||
var rel = me.attr("rel");
|
var rel = me.attr("rel");
|
||||||
|
|
||||||
if (!me.is(".link-complex") && !(rel === "mediaPreview" && me.closest("#open-modal").length === 0) && rel !== "list"){
|
if (!me.is(".link-complex") && !(rel === "mediaPreview" && me.closest("#open-modal").length === 0) && rel !== "list" && rel !== "user" && rel !== "tweet"){
|
||||||
$TD.openBrowser(me.attr("href"));
|
$TD.openBrowser(me.attr("href"));
|
||||||
|
onUrlOpened();
|
||||||
}
|
}
|
||||||
|
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
onUrlOpened();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
window.open = function(url){
|
window.open = function(url){
|
||||||
@@ -352,10 +187,109 @@
|
|||||||
$TD.openBrowser(url);
|
$TD.openBrowser(url);
|
||||||
onUrlOpened();
|
onUrlOpened();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TD.util.maybeOpenClickExternally = prependToFunction(TD.util.maybeOpenClickExternally,function(e){
|
||||||
|
if (e.ctrlKey){
|
||||||
|
if (urlWait)return;
|
||||||
|
|
||||||
|
$TD.openBrowser(e.currentTarget.getAttribute("href"));
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
e.stopImmediatePropagation();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
})();
|
})();
|
||||||
|
|
||||||
//
|
//
|
||||||
// Block: Hook into mp4 video element clicking
|
// Block: Expand shortened links on hover or display tooltip.
|
||||||
|
//
|
||||||
|
(function(){
|
||||||
|
var cutStart = function(str, search){
|
||||||
|
return str.startsWith(search) ? str.substr(search.length) : str;
|
||||||
|
};
|
||||||
|
|
||||||
|
var prevMouseX = -1, prevMouseY = -1;
|
||||||
|
var tooltipTimer, tooltipDisplayed;
|
||||||
|
|
||||||
|
$(document.body).delegate("a[data-full-url]","mouseenter mouseleave mousemove",function(e){
|
||||||
|
var me = $(this);
|
||||||
|
|
||||||
|
if (e.type === "mouseenter"){
|
||||||
|
var text = me.text();
|
||||||
|
|
||||||
|
if (text.charCodeAt(text.length-1) !== 8230){ // horizontal ellipsis
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($TD.expandLinksOnHover){
|
||||||
|
tooltipTimer = window.setTimeout(function(){
|
||||||
|
var expanded = me.attr("data-full-url");
|
||||||
|
expanded = cutStart(expanded,"https://");
|
||||||
|
expanded = cutStart(expanded,"http://");
|
||||||
|
expanded = cutStart(expanded,"www.");
|
||||||
|
|
||||||
|
me.attr("td-prev-text",text);
|
||||||
|
me.text(expanded);
|
||||||
|
},200);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
tooltipTimer = window.setTimeout(function(){
|
||||||
|
$TD.displayTooltip(me.attr("data-full-url"),false);
|
||||||
|
tooltipDisplayed = true;
|
||||||
|
},400);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (e.type === "mouseleave"){
|
||||||
|
if ($TD.expandLinksOnHover){
|
||||||
|
var prevText = me.attr("td-prev-text");
|
||||||
|
|
||||||
|
if (prevText){
|
||||||
|
me.text(prevText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
window.clearTimeout(tooltipTimer);
|
||||||
|
|
||||||
|
if (tooltipDisplayed){
|
||||||
|
tooltipDisplayed = false;
|
||||||
|
$TD.displayTooltip(null,false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (e.type === "mousemove"){
|
||||||
|
if (tooltipDisplayed && (prevMouseX != e.clientX || prevMouseY != e.clientY)){
|
||||||
|
$TD.displayTooltip(me.attr("data-full-url"),false);
|
||||||
|
prevMouseX = e.clientX;
|
||||||
|
prevMouseY = e.clientY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Block: Allow bypassing of t.co in context menus.
|
||||||
|
//
|
||||||
|
$(document.body).delegate("a","contextmenu",function(){
|
||||||
|
$TD.setLastRightClickedLink($(this).attr("data-full-url") || "");
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// Block: Hook into the notification sound effect.
|
||||||
|
//
|
||||||
|
(function(){
|
||||||
|
var soundEle = document.getElementById("update-sound");
|
||||||
|
|
||||||
|
soundEle.play = prependToFunction(soundEle.play,function(){
|
||||||
|
return $TD.muteNotifications;
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
||||||
|
/* TODO document.getElementById("update-sound").play = function(){
|
||||||
|
$TD.onTweetSound();
|
||||||
|
};*/
|
||||||
|
|
||||||
|
//
|
||||||
|
// Block: Hook into mp4 video element clicking.
|
||||||
//
|
//
|
||||||
$(document.body).delegate("video.js-media-gif","click",function(e){
|
$(document.body).delegate("video.js-media-gif","click",function(e){
|
||||||
var src = $(this).attr("src");
|
var src = $(this).attr("src");
|
||||||
@@ -367,7 +301,158 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
//
|
//
|
||||||
// Block: Setup global functions.
|
// Block: Update highlighted column
|
||||||
//
|
//
|
||||||
window.TDGF_runUpdateCheck = runUpdateCheck;
|
app.delegate("section","mouseenter mouseleave",function(e){
|
||||||
})($,$TD);
|
if (e.type === "mouseenter"){
|
||||||
|
highlightedColumnEle = $(this);
|
||||||
|
}
|
||||||
|
else if (e.type === "mouseleave"){
|
||||||
|
highlightedColumnEle = null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// Block: Copy tweet address and update highlighted tweet.
|
||||||
|
//
|
||||||
|
(function(){
|
||||||
|
var lastTweet = "";
|
||||||
|
|
||||||
|
var updateHighlightedTweet = function(link, embeddedLink){
|
||||||
|
if (lastTweet != link){
|
||||||
|
$TD.setLastHighlightedTweet(link,embeddedLink);
|
||||||
|
lastTweet = link;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
app.delegate("article.js-stream-item","mouseenter mouseleave",function(e){
|
||||||
|
if (e.type === "mouseenter"){
|
||||||
|
highlightedTweetEle = $(this);
|
||||||
|
|
||||||
|
var link = $(this).find("time").first().children("a").first();
|
||||||
|
var embedded = $(this).find(".quoted-tweet[data-tweet-id]").first();
|
||||||
|
|
||||||
|
updateHighlightedTweet(link.length > 0 ? link.attr("href") : "",embedded.length > 0 ? embedded.find(".account-link").first().attr("href")+"/status/"+embedded.attr("data-tweet-id") : "");
|
||||||
|
}
|
||||||
|
else if (e.type === "mouseleave"){
|
||||||
|
highlightedTweetEle = null;
|
||||||
|
updateHighlightedTweet("","");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Block: Paste images when tweeting.
|
||||||
|
//
|
||||||
|
(function(){
|
||||||
|
var lastPasteElement;
|
||||||
|
var prevScrollTop;
|
||||||
|
|
||||||
|
var getScroller = function(){
|
||||||
|
return $(".js-drawer").find(".js-compose-scroller").first().children().first();
|
||||||
|
};
|
||||||
|
|
||||||
|
var clickUpload = function(){
|
||||||
|
var button = $(".js-add-image-button").first();
|
||||||
|
|
||||||
|
var scroller = getScroller();
|
||||||
|
prevScrollTop = scroller.scrollTop();
|
||||||
|
|
||||||
|
scroller.scrollTop(0);
|
||||||
|
scroller.scrollTop(button.offset().top); // scrolls the button into view
|
||||||
|
|
||||||
|
var buttonPos = button.children().first().offset(); // finds the camera icon offset
|
||||||
|
$TD.clickUploadImage(Math.floor(buttonPos.left),Math.floor(buttonPos.top));
|
||||||
|
};
|
||||||
|
|
||||||
|
$(".js-app").delegate(".js-compose-text","paste",function(){
|
||||||
|
lastPasteElement = $(this);
|
||||||
|
$TD.tryPasteImage();
|
||||||
|
});
|
||||||
|
|
||||||
|
window.TDGF_tryPasteImage = function(){
|
||||||
|
if (lastPasteElement){
|
||||||
|
var parent = lastPasteElement.parent();
|
||||||
|
|
||||||
|
if (parent.siblings(".js-add-image-button").length === 0){
|
||||||
|
var pop = parent.closest(".js-inline-reply").find(".js-inline-compose-pop");
|
||||||
|
|
||||||
|
if (pop.length === 0){
|
||||||
|
lastPasteElement = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pop.click();
|
||||||
|
|
||||||
|
var drawer = $(".js-drawer");
|
||||||
|
var counter = 0;
|
||||||
|
|
||||||
|
var interval = setInterval(function(){
|
||||||
|
if (drawer.offset().left >= 195){
|
||||||
|
clickUpload();
|
||||||
|
clearInterval(interval);
|
||||||
|
}
|
||||||
|
else if (++counter >= 10){
|
||||||
|
clearInterval(interval);
|
||||||
|
}
|
||||||
|
},51);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
clickUpload();
|
||||||
|
}
|
||||||
|
|
||||||
|
lastPasteElement = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
window.TDGF_tryPasteImageFinish = function(){
|
||||||
|
setTimeout(function(){
|
||||||
|
getScroller().scrollTop(prevScrollTop);
|
||||||
|
$(".js-drawer").find(".js-compose-text").first()[0].focus();
|
||||||
|
},10);
|
||||||
|
};
|
||||||
|
})();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Block: Support for extra mouse buttons
|
||||||
|
//
|
||||||
|
window.TDGF_onMouseClickExtra = function(button){
|
||||||
|
if (button === 1){ // back button
|
||||||
|
if (highlightedColumnEle && highlightedColumnEle.closest(".js-column").is(".is-shifted-1")){
|
||||||
|
highlightedColumnEle.find(".js-column-back").first().click();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$(".js-column-back").click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (button === 2){ // forward button
|
||||||
|
if (highlightedTweetEle){
|
||||||
|
highlightedTweetEle.children().first().click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Block: Inject custom CSS and layout into the page.
|
||||||
|
//
|
||||||
|
(function(){
|
||||||
|
var style = document.createElement("style");
|
||||||
|
document.head.appendChild(style);
|
||||||
|
var sheet = style.sheet;
|
||||||
|
|
||||||
|
// change View Conversation
|
||||||
|
var footerLayout = TD.mustaches["status/tweet_single_footer.mustache"];
|
||||||
|
footerLayout = footerLayout.replace('txt-mute txt-size--12','txt-mute txt-small');
|
||||||
|
footerLayout = footerLayout.replace('{{#inReplyToID}}','{{^inReplyToID}} <a class="pull-left margin-txs txt-mute txt-small is-vishidden-narrow" href="#" rel="viewDetails">{{_i}}Details{{/i}}</a> <a class="pull-left margin-txs txt-mute txt-small is-vishidden is-visshown-narrow" href="#" rel="viewDetails">{{_i}}Open{{/i}}</a> {{/inReplyToID}} {{#inReplyToID}}');
|
||||||
|
footerLayout = footerLayout.replace('<span class="link-complex-target"> {{_i}}View Conversation{{/i}}','<i class="icon icon-conversation icon-small-context"></i> <span class="link-complex-target"> <span class="is-vishidden-wide is-vishidden-narrow">{{_i}}View{{/i}}</span> <span class="is-vishidden is-visshown-wide">{{_i}}Conversation{{/i}}</span>');
|
||||||
|
TD.mustaches["status/tweet_single_footer.mustache"] = footerLayout;
|
||||||
|
|
||||||
|
// tweet actions
|
||||||
|
sheet.insertRule(".tweet-actions { float: right !important; width: auto !important; visibility: hidden; }",0);
|
||||||
|
sheet.insertRule(".tweet-actions:hover { visibility: visible; }",0);
|
||||||
|
sheet.insertRule(".tweet-actions > li:nth-child(4) { margin-right: 2px !important; }",0);
|
||||||
|
|
||||||
|
// break long urls
|
||||||
|
sheet.insertRule("a[data-full-url] { word-break: break-all; }",0);
|
||||||
|
})();
|
||||||
|
})($,$TD,TD);
|
||||||
|
BIN
Resources/icon-small.ico
Normal file
BIN
Resources/icon-small.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
BIN
Resources/icon-tray-new.ico
Normal file
BIN
Resources/icon-tray-new.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.4 KiB |
BIN
Resources/icon-tray.ico
Normal file
BIN
Resources/icon-tray.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.4 KiB |
Binary file not shown.
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 31 KiB |
@@ -1,11 +1,117 @@
|
|||||||
(function($TD){
|
(function($TD){
|
||||||
//
|
//
|
||||||
// Block: Hook into links to bypass default open function
|
// Variable: Collection of all <a> tags.
|
||||||
//
|
//
|
||||||
document.body.addEventListener("click",function(e){
|
var links = document.getElementsByTagName("A");
|
||||||
if (e.target.tagName == "A"){
|
|
||||||
$TD.openBrowser(e.target.getAttribute("href"));
|
//
|
||||||
e.preventDefault();
|
// Function: Adds an event listener to all elements in the array or collection.
|
||||||
|
//
|
||||||
|
var addEventListener = function(collection, type, listener){
|
||||||
|
for(let index = 0; index < collection.length; index++){
|
||||||
|
collection[index].addEventListener(type,listener);
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Block: Hook into links to bypass default open function.
|
||||||
|
//
|
||||||
|
addEventListener(links,"click",function(e){
|
||||||
|
$TD.openBrowser(e.currentTarget.getAttribute("href"));
|
||||||
|
e.preventDefault();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// Block: Allow bypassing of t.co in context menus.
|
||||||
|
//
|
||||||
|
addEventListener(links,"contextmenu",function(e){
|
||||||
|
$TD.setLastRightClickedLink(e.currentTarget.getAttribute("data-full-url") || "");
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// Block: Expand shortened links on hover or display tooltip.
|
||||||
|
//
|
||||||
|
(function(){
|
||||||
|
var cutStart = function(str, search){
|
||||||
|
return str.startsWith(search) ? str.substr(search.length) : str;
|
||||||
|
};
|
||||||
|
|
||||||
|
var prevMouseX = -1, prevMouseY = -1;
|
||||||
|
var tooltipTimer, tooltipDisplayed;
|
||||||
|
|
||||||
|
addEventListener(links,"mouseenter",function(e){
|
||||||
|
var url = e.currentTarget.getAttribute("data-full-url");
|
||||||
|
if (!url)return;
|
||||||
|
|
||||||
|
var text = e.currentTarget.textContent;
|
||||||
|
|
||||||
|
if (text.charCodeAt(text.length-1) !== 8230){ // horizontal ellipsis
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($TD.expandLinksOnHover){
|
||||||
|
tooltipTimer = window.setTimeout(function(){
|
||||||
|
var expanded = url;
|
||||||
|
expanded = cutStart(expanded,"https://");
|
||||||
|
expanded = cutStart(expanded,"http://");
|
||||||
|
expanded = cutStart(expanded,"www.");
|
||||||
|
|
||||||
|
e.currentTarget.setAttribute("td-prev-text",text);
|
||||||
|
e.currentTarget.innerHTML = expanded;
|
||||||
|
},200);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
tooltipTimer = window.setTimeout(function(){
|
||||||
|
$TD.displayTooltip(url,true);
|
||||||
|
tooltipDisplayed = true;
|
||||||
|
},400);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
addEventListener(links,"mouseleave",function(e){
|
||||||
|
if (!e.currentTarget.hasAttribute("data-full-url"))return;
|
||||||
|
|
||||||
|
if ($TD.expandLinksOnHover){
|
||||||
|
var prevText = e.currentTarget.getAttribute("td-prev-text");
|
||||||
|
|
||||||
|
if (prevText){
|
||||||
|
e.currentTarget.innerHTML = prevText;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
window.clearTimeout(tooltipTimer);
|
||||||
|
|
||||||
|
if (tooltipDisplayed){
|
||||||
|
tooltipDisplayed = false;
|
||||||
|
$TD.displayTooltip(null,true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
addEventListener(links,"mousemove",function(e){
|
||||||
|
if (tooltipDisplayed && (prevMouseX != e.clientX || prevMouseY != e.clientY)){
|
||||||
|
var url = e.currentTarget.getAttribute("data-full-url");
|
||||||
|
if (!url)return;
|
||||||
|
|
||||||
|
$TD.displayTooltip(url,true);
|
||||||
|
prevMouseX = e.clientX;
|
||||||
|
prevMouseY = e.clientY;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Block: Setup embedded tweet address for context menu
|
||||||
|
//
|
||||||
|
(function(){
|
||||||
|
var embedded = document.getElementsByClassName("quoted-tweet");
|
||||||
|
if (embedded.length === 0)return;
|
||||||
|
|
||||||
|
var tweetId = embedded[0].getAttribute("data-tweet-id");
|
||||||
|
if (!tweetId)return;
|
||||||
|
|
||||||
|
var account = embedded[0].getElementsByClassName("account-link");
|
||||||
|
if (account.length === 0)return;
|
||||||
|
|
||||||
|
$TD.setNotificationTweetEmbedded(account[0].getAttribute("href")+"/status/"+tweetId);
|
||||||
|
})();
|
||||||
})($TD);
|
})($TD);
|
137
Resources/update.js
Normal file
137
Resources/update.js
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
(function($,$TDU){
|
||||||
|
//
|
||||||
|
// Variable: Current timeout ID for update checking.
|
||||||
|
//
|
||||||
|
var updateCheckTimeoutID;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Constant: Update exe file name.
|
||||||
|
//
|
||||||
|
const updateFileName = $TDU.brandName+".Update.exe";
|
||||||
|
|
||||||
|
//
|
||||||
|
// Constant: Url that returns JSON data about latest version.
|
||||||
|
//
|
||||||
|
const updateCheckUrl = "https://api.github.com/repos/chylex/"+$TDU.brandName+"/releases/latest";
|
||||||
|
|
||||||
|
//
|
||||||
|
// Function: Creates the update notification element. Removes the old one if already exists.
|
||||||
|
//
|
||||||
|
var createUpdateNotificationElement = function(version, download){
|
||||||
|
var ele = $("#tweetdck-update");
|
||||||
|
var existed = ele.length > 0;
|
||||||
|
|
||||||
|
if (existed > 0){
|
||||||
|
ele.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
var html = [
|
||||||
|
"<div id='tweetdck-update'>",
|
||||||
|
"<p class='tdu-title'>"+$TDU.brandName+" Update</p>",
|
||||||
|
"<p class='tdu-info'>Version "+version+" is now available.</p>",
|
||||||
|
"<div class='tdu-buttons'>",
|
||||||
|
"<button class='btn btn-positive tdu-btn-download'><span class='label'>Download</button>",
|
||||||
|
"<button class='btn btn-negative tdu-btn-dismiss'><span class='label'>Dismiss</button>",
|
||||||
|
"</div>",
|
||||||
|
"</div>"
|
||||||
|
];
|
||||||
|
|
||||||
|
$(document.body).append(html.join(""));
|
||||||
|
|
||||||
|
ele = $("#tweetdck-update");
|
||||||
|
|
||||||
|
var buttonDiv = ele.children("div.tdu-buttons").first();
|
||||||
|
|
||||||
|
ele.css({
|
||||||
|
color: "#fff",
|
||||||
|
backgroundColor: "rgb(32,94,138)",
|
||||||
|
position: "absolute",
|
||||||
|
left: "4px",
|
||||||
|
bottom: "4px",
|
||||||
|
width: "192px",
|
||||||
|
height: "86px",
|
||||||
|
display: existed ? "block" : "none",
|
||||||
|
borderRadius: "2px",
|
||||||
|
zIndex: 9999
|
||||||
|
});
|
||||||
|
|
||||||
|
ele.children("p.tdu-title").first().css({
|
||||||
|
fontSize: "17px",
|
||||||
|
fontWeight: "bold",
|
||||||
|
textAlign: "center",
|
||||||
|
letterSpacing: "0.2px",
|
||||||
|
margin: "4px auto 2px"
|
||||||
|
});
|
||||||
|
|
||||||
|
ele.children("p.tdu-info").first().css({
|
||||||
|
fontSize: "12px",
|
||||||
|
textAlign: "center",
|
||||||
|
margin: "2px auto 6px"
|
||||||
|
});
|
||||||
|
|
||||||
|
buttonDiv.css({
|
||||||
|
textAlign: "center"
|
||||||
|
});
|
||||||
|
|
||||||
|
buttonDiv.children().css({
|
||||||
|
margin: "0 4px",
|
||||||
|
minHeight: "25px",
|
||||||
|
boxShadow: "1px 1px 1px rgba(17,17,17,0.5)"
|
||||||
|
});
|
||||||
|
|
||||||
|
buttonDiv.find("span").css({
|
||||||
|
verticalAlign: "baseline"
|
||||||
|
});
|
||||||
|
|
||||||
|
ele.find("span.tdu-data-tag").first().css({
|
||||||
|
cursor: "pointer",
|
||||||
|
textDecoration: "underline"
|
||||||
|
});
|
||||||
|
|
||||||
|
buttonDiv.children(".tdu-btn-download").click(function(){
|
||||||
|
ele.remove();
|
||||||
|
$TDU.onUpdateAccepted(version,download);
|
||||||
|
});
|
||||||
|
|
||||||
|
buttonDiv.children(".tdu-btn-dismiss").click(function(){
|
||||||
|
$TDU.onUpdateDismissed(version);
|
||||||
|
ele.slideUp(function(){ ele.remove(); });
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!existed){
|
||||||
|
ele.slideDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
return ele;
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Function: Runs an update check and updates all DOM elements appropriately.
|
||||||
|
//
|
||||||
|
var runUpdateCheck = function(force, eventID){
|
||||||
|
clearTimeout(updateCheckTimeoutID);
|
||||||
|
updateCheckTimeoutID = setTimeout(runUpdateCheck,1000*60*60); // 1 hour
|
||||||
|
|
||||||
|
if (!$TDU.updateCheckEnabled && !force)return;
|
||||||
|
|
||||||
|
$.getJSON(updateCheckUrl,function(response){
|
||||||
|
var tagName = response.tag_name;
|
||||||
|
var hasUpdate = tagName !== $TDU.versionTag && tagName !== $TDU.dismissedVersionTag && response.assets.length > 0;
|
||||||
|
|
||||||
|
if (hasUpdate){
|
||||||
|
var obj = response.assets.find(asset => asset.name === updateFileName) || response.assets[0];
|
||||||
|
createUpdateNotificationElement(tagName,obj.browser_download_url);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eventID !== 0){
|
||||||
|
$TDU.onUpdateCheckFinished(eventID,hasUpdate,tagName);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Block: Setup global functions.
|
||||||
|
//
|
||||||
|
window.TDUF_runUpdateCheck = runUpdateCheck;
|
||||||
|
runUpdateCheck();
|
||||||
|
})($,$TDU);
|
@@ -99,6 +99,7 @@
|
|||||||
<DependentUpon>FormNotification.cs</DependentUpon>
|
<DependentUpon>FormNotification.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Core\Handling\ContextMenuNotification.cs" />
|
<Compile Include="Core\Handling\ContextMenuNotification.cs" />
|
||||||
|
<Compile Include="Core\Handling\DialogHandlerBrowser.cs" />
|
||||||
<Compile Include="Core\Handling\TweetNotification.cs" />
|
<Compile Include="Core\Handling\TweetNotification.cs" />
|
||||||
<Compile Include="Core\Controls\RichTextLabel.cs">
|
<Compile Include="Core\Controls\RichTextLabel.cs">
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
@@ -125,14 +126,26 @@
|
|||||||
<Compile Include="Core\Other\FormSettings.Designer.cs">
|
<Compile Include="Core\Other\FormSettings.Designer.cs">
|
||||||
<DependentUpon>FormSettings.cs</DependentUpon>
|
<DependentUpon>FormSettings.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Core\Other\FormUpdateDownload.cs">
|
<Compile Include="Updates\FormUpdateDownload.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Core\Other\FormUpdateDownload.Designer.cs">
|
<Compile Include="Updates\FormUpdateDownload.Designer.cs">
|
||||||
<DependentUpon>FormUpdateDownload.cs</DependentUpon>
|
<DependentUpon>FormUpdateDownload.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="Core\TrayIcon.cs">
|
||||||
|
<SubType>Component</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Core\TrayIcon.Designer.cs">
|
||||||
|
<DependentUpon>TrayIcon.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Core\Utils\BrowserCache.cs" />
|
||||||
<Compile Include="Core\Utils\BrowserUtils.cs" />
|
<Compile Include="Core\Utils\BrowserUtils.cs" />
|
||||||
<Compile Include="Core\Utils\UpdateInfo.cs" />
|
<Compile Include="Core\Utils\HardwareAcceleration.cs" />
|
||||||
|
<Compile Include="Core\Utils\NativeMethods.cs" />
|
||||||
|
<Compile Include="Updates\UpdateAcceptedEventArgs.cs" />
|
||||||
|
<Compile Include="Updates\UpdateCheckEventArgs.cs" />
|
||||||
|
<Compile Include="Updates\UpdateHandler.cs" />
|
||||||
|
<Compile Include="Updates\UpdateInfo.cs" />
|
||||||
<Compile Include="Migration\FormMigrationQuestion.cs">
|
<Compile Include="Migration\FormMigrationQuestion.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -200,6 +213,18 @@
|
|||||||
</ContentWithTargetPath>
|
</ContentWithTargetPath>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="Core\FormBrowser.resx">
|
||||||
|
<DependentUpon>FormBrowser.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Core\Other\FormAbout.resx">
|
||||||
|
<DependentUpon>FormAbout.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Core\Other\FormSettings.resx">
|
||||||
|
<DependentUpon>FormSettings.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Updates\FormUpdateDownload.resx">
|
||||||
|
<DependentUpon>FormUpdateDownload.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Properties\Resources.resx">
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
<Generator>ResXFileCodeGenerator</Generator>
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
@@ -212,6 +237,17 @@
|
|||||||
<TargetPath>notification.js</TargetPath>
|
<TargetPath>notification.js</TargetPath>
|
||||||
</ContentWithTargetPath>
|
</ContentWithTargetPath>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ContentWithTargetPath Include="Resources\update.js">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
<TargetPath>update.js</TargetPath>
|
||||||
|
</ContentWithTargetPath>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Include="Resources\icon-small.ico" />
|
||||||
|
<None Include="Resources\icon-tray-new.ico" />
|
||||||
|
<None Include="Resources\icon-tray.ico" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
@@ -228,9 +264,9 @@
|
|||||||
<Import Project="packages\CefSharp.Common.49.0.0-pre02\build\CefSharp.Common.targets" Condition="Exists('packages\CefSharp.Common.49.0.0-pre02\build\CefSharp.Common.targets')" />
|
<Import Project="packages\CefSharp.Common.49.0.0-pre02\build\CefSharp.Common.targets" Condition="Exists('packages\CefSharp.Common.49.0.0-pre02\build\CefSharp.Common.targets')" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<PostBuildEvent>del "$(TargetPath).config"
|
<PostBuildEvent>del "$(TargetPath).config"
|
||||||
xcopy "$(ProjectDir)LICENSE" "$(TargetDir)" /Y
|
xcopy "$(ProjectDir)LICENSE.md" "$(TargetDir)" /Y
|
||||||
del "$(TargetDir)LICENSE.txt"
|
del "$(TargetDir)LICENSE.txt"
|
||||||
ren "$(TargetDir)LICENSE" "LICENSE.txt"
|
ren "$(TargetDir)LICENSE.md" "LICENSE.txt"
|
||||||
xcopy "$(ProjectDir)Libraries\CEFSHARP-LICENSE.txt" "$(TargetDir)" /Y
|
xcopy "$(ProjectDir)Libraries\CEFSHARP-LICENSE.txt" "$(TargetDir)" /Y
|
||||||
xcopy "$(ProjectDir)packages\Microsoft.VC120.CRT.JetBrains.12.0.21005.2\DotFiles\msvcp120.dll" "$(TargetDir)" /Y
|
xcopy "$(ProjectDir)packages\Microsoft.VC120.CRT.JetBrains.12.0.21005.2\DotFiles\msvcp120.dll" "$(TargetDir)" /Y
|
||||||
xcopy "$(ProjectDir)packages\Microsoft.VC120.CRT.JetBrains.12.0.21005.2\DotFiles\msvcr120.dll" "$(TargetDir)" /Y</PostBuildEvent>
|
xcopy "$(ProjectDir)packages\Microsoft.VC120.CRT.JetBrains.12.0.21005.2\DotFiles\msvcr120.dll" "$(TargetDir)" /Y</PostBuildEvent>
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
namespace TweetDck.Core.Other {
|
namespace TweetDck.Updates {
|
||||||
partial class FormUpdateDownload {
|
partial class FormUpdateDownload {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Required designer variable.
|
/// Required designer variable.
|
||||||
@@ -23,6 +23,7 @@
|
|||||||
/// the contents of this method with the code editor.
|
/// the contents of this method with the code editor.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent() {
|
private void InitializeComponent() {
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormUpdateDownload));
|
||||||
this.progressDownload = new System.Windows.Forms.ProgressBar();
|
this.progressDownload = new System.Windows.Forms.ProgressBar();
|
||||||
this.btnCancel = new System.Windows.Forms.Button();
|
this.btnCancel = new System.Windows.Forms.Button();
|
||||||
this.labelDescription = new System.Windows.Forms.Label();
|
this.labelDescription = new System.Windows.Forms.Label();
|
||||||
@@ -82,7 +83,7 @@
|
|||||||
this.Controls.Add(this.btnCancel);
|
this.Controls.Add(this.btnCancel);
|
||||||
this.Controls.Add(this.progressDownload);
|
this.Controls.Add(this.progressDownload);
|
||||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||||
this.Icon = global::TweetDck.Properties.Resources.icon;
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
this.MaximizeBox = false;
|
this.MaximizeBox = false;
|
||||||
this.Name = "FormUpdateDownload";
|
this.Name = "FormUpdateDownload";
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
|
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
|
@@ -6,7 +6,7 @@ using System.Windows.Forms;
|
|||||||
using TweetDck.Core.Controls;
|
using TweetDck.Core.Controls;
|
||||||
using TweetDck.Core.Utils;
|
using TweetDck.Core.Utils;
|
||||||
|
|
||||||
namespace TweetDck.Core.Other{
|
namespace TweetDck.Updates{
|
||||||
sealed partial class FormUpdateDownload : Form{
|
sealed partial class FormUpdateDownload : Form{
|
||||||
public string InstallerPath{
|
public string InstallerPath{
|
||||||
get{
|
get{
|
377
Updates/FormUpdateDownload.resx
Normal file
377
Updates/FormUpdateDownload.resx
Normal file
@@ -0,0 +1,377 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<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: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>
|
||||||
|
<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">
|
||||||
|
<value>
|
||||||
|
AAABAAMAMDAAAAEAIACoJQAANgAAACAgAAABACAAqBAAAN4lAAAQEAAAAQAgAGgEAACGNgAAKAAAADAA
|
||||||
|
AABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHg5IrF+OlS+hjyMw4g7tcmM
|
||||||
|
PM/MjTzezY485s2OPObMjjzfyIw80MOJPLe8hDyNs387WKx8OyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApHU4FrB8OGXGijzAzo889dKR
|
||||||
|
PP/SkTz/0pE8/9GRPP/RkDz/0JA8/9CQPP/RkDz/0ZE8/9KRPP/TkTz/0pE8/86PPPbGijzCt4E8bKp6
|
||||||
|
OxoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKN1OB+9hTuLzI486NOR
|
||||||
|
PP/SkTz/0ZA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9GQ
|
||||||
|
PP/SkTz/0pE8/82OPOu9hTuOq3w8IgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACidTkFuoM8csyN
|
||||||
|
POrTkjz/0ZE8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9GRPP/Tkjz/zY887bqEPHimeDsHAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKp6
|
||||||
|
OynDiDvA05I8/9GRPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0ZA8/9ORPP/GijzFr308LgAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAArXw7UM2OPOvTkTz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/SkTz/zo887rOAPFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAACxfjxm0ZA8/NGRPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0ZE8/9GQPP64gjxtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAALaBPGXRkTz/0ZE8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9GQPP/SkTz/uIM8bAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqnk6TtCQPPzRkTz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/RkDz/0ZA8/rSA
|
||||||
|
PFUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtfDwmzo887dKRPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0ZE8/86PPPGtfDwrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZ4PAXFijzC0pE8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CURf/TpGT/2baJ/9/GpP/l0bf/59W//+fVvf/kz7P/3sOg/9mz
|
||||||
|
hP/ToWH/0JND/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9KRPP/EiTvJo3Y7CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALiC
|
||||||
|
PG/Tkjz/0JA8/9CQPP/QkDz/0JA8/9CSQf/Vq3P/5tO7//j07v//////////////////////////////
|
||||||
|
////////////////////////9vHq/+TQtf/UqG7/0JA+/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/Tkjz/uYM8dgAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAArXw8Gc2OPOzRkTz/0JA8/9CQPP/QlEX/27qP//fz7P//////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////8ObZ/9auev/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/RkTz/zI488J1x
|
||||||
|
OB8AAAAAAAAAAAAAAAAAAAAAuoM7h9OSPP/QkDz/0JA8/9GXTf/TpGb/27uS/9u6kP/ewZz/59W9//Xv
|
||||||
|
5///////////////////////////////////////////////////////////////////////////////
|
||||||
|
///r3cr/0ZxV/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/1JI8/7mDO5AAAAAAAAAAAAAAAADFj0cR0pNB6s+PO//Ojjv/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CRQP/TpGf/5NC2//38+v//////////////////////////////////////////////
|
||||||
|
////////////////////////+vf0/9auev/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0ZE8/8uOPO6SajYVAAAAAAAAAADzr1df7qxV/+WkT//ZmUT/0JA9/86O
|
||||||
|
O//Pjzv/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9GaUv/l07r/////////////////////////
|
||||||
|
///////////////////////////////////////////////////buo//0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9OSPP+ldjdoAAAAAAAAAADurFW67qxV//Ct
|
||||||
|
Vv/vrVb/6adR/92dSP/Skz//zo47/8+PO//QkDz/0JA8/9CQPP/QkDz/0JJB/9Smaf/dv5j/+fXw////
|
||||||
|
////////////////////////////////////////////////////////////////////////2riM/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9KRPP/FiTzGoHQ6Ae6s
|
||||||
|
VRrurFXz7qxV/+6sVf/urFX/761W//CuVv/sqlT/4qFM/9aVQv/Pjzv/zo47/9CQPP/VqnH/8+vh////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/////////////9aueP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9GQ
|
||||||
|
PP/Ojzz4oHM5Iu6sVU3urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/vrVX/8K5W/+6sVf/mpU//2plF/9q6
|
||||||
|
j///////////////////////////////////////////////////////////////////////////////
|
||||||
|
//////////////////////////////n18P/Rm1P/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/SkTz/rXs6Vu6sVYPurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/wrVb/6r2B////////////////////////////////////////////////////////////////////
|
||||||
|
///////////////////////////////////////////////////o18L/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/v4Y8j+6sVa3urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFb/9Onb///////+/v3/////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////1qx2/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/wYc7uO6sVcrurFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/trlr/67Zy/+m+h//y5NP/////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
////////7+TW/9CQPf/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/RkTz/yYw80e6s
|
||||||
|
VdvurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/6sme//v49P//////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/////////////////////////////9arc//QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/RkDz/zI083+6sVeLurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/u2b3/////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/////////////////////////////////////////////+fVvv/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/zo885u6sVeLurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+vL
|
||||||
|
of//////////////////////////////////////////////////////////////////////////////
|
||||||
|
//////////////////////////////////////////////////////////////r28v/Rl0r/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/zo885u6sVdrurFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7LBj//r28f//////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
///Vq3P/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/RkDz/zI083+6sVcrurFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/6cKO////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
///////////////////ewp7/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/RkTz/yYw80O6s
|
||||||
|
VazurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7NOy//z59v/u2b7/+fPr////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
///////////////////////////////////n1sD/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/SkTz/xIo8uO6sVYHurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/67Zx/+2uWf/qy6H/////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
///////////////////////////////////////////////////v5dj/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/SkTz/vYU8je6sVUvurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+nC
|
||||||
|
kP///////////////////////////////////////////////////////fz6//fu5P/w4Mv/793F//7+
|
||||||
|
/v/////////////////////////////////////////////////////////////////17eT/0JA//86O
|
||||||
|
Ov/Pjzv/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/tYA8Vu6sVRnurFXy7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7a5b//fw5///////////////////////////////////////+/jz/+7av//pwIr/67Jn/+6t
|
||||||
|
Vv/urFX/6rd1////////////////////////////////////////////////////////////////////
|
||||||
|
///48ej/6KhU/92cR//Tkj7/zo47/8+PO//QkDz/0JA8/9GQPP/Pjzz3rXw8IAAAAADurFW37qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/6b2D//////////////////////////////////nz6//qyZ3/7K9h/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/6rl6////////////////////////////////////////////////////
|
||||||
|
///////////////////9/Pr/6r6C//CuV//sqlT/4aBL/9aWQv/Pjzv/zo47/9GRPP/GijzCp3g8AQAA
|
||||||
|
AADurFVb7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/68yk///////////////////////+/fz/68+q/+2v
|
||||||
|
XP/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/6rNr//7+/f//////////////////////////////
|
||||||
|
/////////////////////////////////////////////+nEk//vrVX/8K5W/+6sVf/lpE//2ZlF/9KR
|
||||||
|
Pf+zfzpoAAAAAAAAAADurFUP7qxV5u6sVf/urFX/7qxV/+6sVf/urFX/7NGu//////////////////fu
|
||||||
|
5P/quHb/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxW//Xr3///////////////
|
||||||
|
///////////////////////////////////////////////////7+PP/+vXu///////pxJL/7qxV/+6s
|
||||||
|
Vf/wrVb/8K1W/+mnUevUmUsUAAAAAAAAAAAAAAAA7qxVgO6sVf/urFX/7qxV/+6sVf/urFX/6sqg////
|
||||||
|
////////8eLO/+yvX//urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+nF
|
||||||
|
lf/////////////////////////////////////////////////////////////////8+vf/6cWV/+q5
|
||||||
|
ev/s07H/6rd1/+6sVf/urFX/7qxV/++tVogAAAAAAAAAAAAAAAAAAAAA7qxVFe6sVejurFX/7qxV/+6s
|
||||||
|
Vf/urFX/6bp8///////w4Mn/7a1Z/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/x4cz////////////////////////////////////////////////////+//7+
|
||||||
|
/v/////////+/+m8gP/urFX/7a1Y/+6sVf/urFX/7qxV7O6sVRoAAAAAAAAAAAAAAAAAAAAAAAAAAO6s
|
||||||
|
VWburFX/7qxV/+6sVf/urFX/7a5b/+zTs//sr1//7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/sr1//8uPQ////////////////////////////////////
|
||||||
|
////////6suj/+qzav/pxpj/9Onb//n07f/rr2D/7qxV/+6sVf/urFX/7qxVbwAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAO6sVQPurFW67qxV/+6sVf/urFX/7qxV/+6sVv/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7axY/+nGl//27uP/////////
|
||||||
|
/////////fz6//Lj0P/qunv/7qxV/+6sVf/urFX/7qxV/+m9gv/qt3X/7qxV/+6sVf/urFXB7qxVBQAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADurFUg7qxV6O6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/qtnP/6sqg/+3WuP/s07P/6cSS/+uyZf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVv/trVr/7qxV/+6s
|
||||||
|
VezurFUlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7qxVRu6sVfjurFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV++6sVUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO6s
|
||||||
|
VVzurFX97qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxVYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAADurFVd7qxV+O6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVfvurFVjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7qxVR+6sVeXurFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV6O6sVU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO6sVSPurFW37qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFW77qxVJgAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AADurFUB7qxVae6sVeTurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV5+6sVW3urFUDAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAO6sVRjurFWA7qxV4u6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVeTurFWE7qxVGwAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7qxVEu6sVV7urFW17qxV7+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVfDurFW47qxVX+6s
|
||||||
|
VRMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAA7qxVG+6sVUzurFWA7qxVrO6sVcnurFXa7qxV4u6sVeLurFXa7qxVye6sVa3urFWC7qxVTe6s
|
||||||
|
VR0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAP//gAH//6gr//wAAD//qCv/8AAAD/+oK//AAAAD/6gr/4AAAAH/qCv/AAAAAP+oK/4A
|
||||||
|
AAAAf6gr/AAAAAA/qCv4AAAAAB+oK/AAAAAAD6gr4AAAAAAHqCvgAAAAAAeoK8AAAAAAA6grwAAAAAAD
|
||||||
|
qCuAAAAAAAGoK4AAAAAAAagrgAAAAAAAqCsAAAAAAACoKwAAAAAAAKgrAAAAAAAAqCsAAAAAAACoKwAA
|
||||||
|
AAAAAKgrAAAAAAAAqCsAAAAAAACoKwAAAAAAAKgrAAAAAAAAqCsAAAAAAACoKwAAAAAAAKgrAAAAAAAA
|
||||||
|
qCsAAAAAAACoKwAAAAAAAKgrgAAAAAAAqCuAAAAAAAGoK4AAAAAAAagrwAAAAAADqCvAAAAAAAOoK+AA
|
||||||
|
AAAAB6gr4AAAAAAHqCvwAAAAAA+oK/gAAAAAH6gr/AAAAAA/qCv+AAAAAH+oK/8AAAAA/6gr/4AAAAH/
|
||||||
|
qCv/wAAAA/+oK//wAAAP/6gr//wAAD//qCv//4AB//+oKygAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApHY4FrR/
|
||||||
|
Ole+hjuVxos7w8uNPNvOjzznzo8858uNPNzGijzEvoU7l7WBO1mpejsYAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHg5Kr6F
|
||||||
|
O5XLjTvo0pE8/9ORPP/SkTz/0ZE8/9CQPP/QkDz/0ZE8/9KRPP/TkTz/0pE8/82OPOq/hjyZrXw7LAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo3U6CbuE
|
||||||
|
O4bPjzz005I8/9GRPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0ZE8/9OS
|
||||||
|
PP/PkDz1vYU8iah6PAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKR3
|
||||||
|
OibGizvG05E8/9GQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9GQPP/TkTz/yIs8yqx8PCkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AACsezsxy40849KRPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/zI485rKAPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAApXc6JMuNPOTSkTz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/zI485659PCcAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAKd4OwnHizzJ0pE8/9CQPP/QkDz/0JA9/9OgYP/YtIX/38Sh/+LMr//iy67/3sOf/9iy
|
||||||
|
gv/Tn13/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/SkTz/x4s8zaV4
|
||||||
|
OwsAAAAAAAAAAAAAAAAAAAAAu4Q8hNOSPP/QkDz/0JA8/9GXS//YtIX/6NfC//Xv5//8+vj/////////
|
||||||
|
///8+vf/9O3k/+fVvv/YsYH/0JRF/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/Tkjz/u4Q7iQAAAAAAAAAAAAAAAKx7OyTPjzz10ZA8/9GXS//Ztoj/8une////////////////////
|
||||||
|
///////////////////////////////////38uz/3L2V/9CRP//QkDz/0JA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9GRPP/Ojzz3onU5KQAAAAAAAAAAxo1BlNGQO//Ojjv/0JNC/9GWSP/QlET/0ZpR/9au
|
||||||
|
eP/n1b3//v79////////////////////////////////////////////7+TV/9GdWP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/0JA8/9SSPP+4gjqaAAAAAPGuVhHvrVXq5qRO/9qZRP/QkT3/zo46/8+P
|
||||||
|
O//QkDz/0JA8/9CQPP/To2P/8+vh////////////////////////////////////////////+fXw/9Oh
|
||||||
|
Yf/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/0pE8/8qMO+2WbTYV7qxVUe6sVf/wrVb/761W/+mo
|
||||||
|
Uv/enUj/05M//86PO//PkD7/3cCZ//Lp3v/7+PT/////////////////////////////////////////
|
||||||
|
////////+PTv/9GcVf/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/QkDz/05I8/699OljurFWR7qxV/+6s
|
||||||
|
Vf/urFX/761W//CuV//sqlT/4qJQ/+zdyf//////////////////////////////////////////////
|
||||||
|
////////////////////////7+TV/9CRP//QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/Tkjz/vIQ7mO6s
|
||||||
|
Vb/urFX/7qxV/+6sVf/urFX/7qxV/++tVf/ry5///v79//7+/f//////////////////////////////
|
||||||
|
////////////////////////////////////////2rqO/9CQPP/QkDz/0JA8/9CQPP/QkDz/0JA8/9KR
|
||||||
|
PP/GijvF7qxV2u6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+u1bv/t1bb//fv4////////////////////
|
||||||
|
///////////////////////////////////////////////////48+3/0ZRG/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0ZA8/8uNPNzurFXl7qxV/+6sVf/urFX/7qxV/+6sVf/rsWP/9OjZ////////////////////
|
||||||
|
///////////////////////////////////////////////////////////////////YtIX/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/QkDz/zo886O6sVeXurFX/7qxV/+6sVf/urFX/7qxW//Hiz///////////////
|
||||||
|
/////////////////////////////////////////////////////////////////////////////+rb
|
||||||
|
yP/QkDz/0JA8/9CQPP/QkDz/0JA8/9CQPP/Ojzzo7qxV2e6sVf/urFX/7qxV/+6sVf/quHb/////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
////////+fXw/9CURf/QkDz/0JA8/9CQPP/QkDz/0ZA8/8yOPNzurFW/7qxV/+6sVf/urFX/7qxV/+nA
|
||||||
|
if/s1LT/9Onb////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////0Z5b/9CQPP/QkDz/0JA8/9CQPP/SkTz/x4s8xe6sVY/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+nEk//+/fz////////////////////////////+/v3/+PHo//To2f/+/v7/////////
|
||||||
|
///////////////////////////////////VqGz/zo46/8+PO//QkDz/0JA8/9KRPP+/hjyX7qxVUO6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/ssGH//Pr2///////////////////////y49D/6cOR/+qyaf/urVb/6rJp////
|
||||||
|
/////////////////////////////////////////////+e7f//goEr/1ZVB/8+PO//Ojzv/0pE8/7WB
|
||||||
|
PFfurFUQ7qxV6O6sVf/urFX/7qxV/+m+hv/////////////////z5tX/6rl6/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/qs2r////+////////////////////////////////////////////+PLp/+y4c//urFX/5aRO/9qZ
|
||||||
|
RP/Mjjztp3g6FQAAAADurFWQ7qxV/+6sVf/urFX/6cKP////////////682m/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+2sV//17N////////////////////////////////////////7+/v/06Nn/8uTT/+qz
|
||||||
|
a//wrVb/761W/+alUZYAAAAAAAAAAO6sVSHurFX07qxV/+6sVf/quXj//////+nDkf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+m+hP////////////////////////////////////////////jy
|
||||||
|
6v/qtnH/67Fj/+6sVf/urFX2761WJQAAAAAAAAAAAAAAAO6sVX7urFX/7qxV/+2vW//pvID/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+nEkv/7+PT//////////////////fz6/+rJ
|
||||||
|
n//rtW7/682n/+zTs//urFb/7qxV/+6sVYQAAAAAAAAAAAAAAAAAAAAA7qxVB+6sVcTurFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+u0bP/qy6H/7da4/+vN
|
||||||
|
pv/qtnP/7qxV/+6sVf/urFX/7K9f/+2sWP/urFXI7qxVCQAAAAAAAAAAAAAAAAAAAAAAAAAA7qxVIO6s
|
||||||
|
VeDurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV4+6sVSMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAA7qxVLO6sVd/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVeLurFUwAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAA7qxVIu6sVcHurFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFXE7qxVJAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7qxVBu6sVX/urFXw7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFXy7qxVgu6sVQgAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO6sVSXurFWP7qxV5e6s
|
||||||
|
Vf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFXl7qxVke6sVScAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AADurFUS7qxVUO6sVY7urFW97qxV2O6sVeXurFXl7qxV2O6sVb7urFWP7qxVUu6sVRMAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8AD//8AAP/8AAA/+AAAH/AAAA/gAAAHwAAAA8AA
|
||||||
|
AAOAAAABgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA
|
||||||
|
AAGAAAABwAAAA8AAAAPgAAAH8AAAD/gAAB/8AAA//wAA///AA/8oAAAAEAAAACAAAAABACAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKx7Oja9hTqTyYw8zs6PPOfOjzznyYw8zr6G
|
||||||
|
PJSvfjw3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo3Y7CbyEO5PRkDz805I8/9GRPP/QkDz/0JA8/9GR
|
||||||
|
PP/TkTz/0ZA8/b+GPJWrfDwKAAAAAAAAAAAAAAAAp3g8CcSJPLfTkjz/0ZA8/9CQPP/QkDz/0JA8/9CQ
|
||||||
|
PP/QkDz/0JA8/9CQPP/Tkjz/xoo8uqx8PQoAAAAAAAAAAL2FPJPUk0D/06Rm/92/mf/izK//4sut/9u6
|
||||||
|
j//Snlr/0JA8/9CQPP/QkDz/0JA8/9OSPP+9hTyWAAAAALiEQDLQkDz90JpS/93Amf/u4tP/////////
|
||||||
|
/////////fv5/+DIqP/QkkH/0JA8/9CQPP/RkDz/0JA8/qN1OTTtq1WS56VP/9qaRf/RkT3/0JdO/+rc
|
||||||
|
yP//////////////////////693L/9CSQf/QkDz/0JA8/9SSPP+3gTqW761Vz++tVv/wrVb/6K5h//fy
|
||||||
|
6v/////////////////////////////////gx6b/0JA8/9CQPP/RkTz/yYw80e6sVefurFX/7qxV/+q+
|
||||||
|
hP/69vD//////////////////////////////////fz7/9GbU//QkDz/0JA8/8+PPOnurFXn7qxV/+yw
|
||||||
|
Y//79/P////////////////////////////////////////////ZuIz/0JA8/9CQPP/Pjzzp7qxVz+6s
|
||||||
|
Vf/sr2H/8eLO/////////////v7+//n07f/+/v7/////////////////48yu/8+PO//Qjzv/yYs80e6s
|
||||||
|
VZLurFX/67Jm//7+/f/8+fb/68yl/+qza//rsmf//v37//////////////////Pn2P/ip1n/2phC/8CH
|
||||||
|
PJXurFUw7qxV/eq2c//169//6rNr/+6sVf/urFX/7q1W//Pm1f/////////////////8+fX/67+G/++t
|
||||||
|
Vf3lpVEyAAAAAO6sVZHtrVr/7a9c/+6sVf/urFX/7qxV/+6sVf/rsWP/7de5//Lj0P/pxJL/67Zy/+qz
|
||||||
|
av/urFWTAAAAAAAAAADurFUI7qxVtO6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
Vf/urFW37qxVCQAAAAAAAAAAAAAAAO6sVQjurFWQ7qxV++6sVf/urFX/7qxV/+6sVf/urFX/7qxV/+6s
|
||||||
|
VfvurFWS7qxVCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO6sVTPurFWQ7qxVzO6sVeburFXm7qxVzO6s
|
||||||
|
VZDurFU0AAAAAAAAAAAAAAAAAAAAAPAPrEHAA6xBgAGsQYABrEEAAKxBAACsQQAArEEAAKxBAACsQQAA
|
||||||
|
rEEAAKxBAACsQYABrEGAAaxBwAOsQfAPrEE=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
11
Updates/UpdateAcceptedEventArgs.cs
Normal file
11
Updates/UpdateAcceptedEventArgs.cs
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace TweetDck.Updates{
|
||||||
|
class UpdateAcceptedEventArgs : EventArgs{
|
||||||
|
public readonly UpdateInfo UpdateInfo;
|
||||||
|
|
||||||
|
public UpdateAcceptedEventArgs(UpdateInfo info){
|
||||||
|
this.UpdateInfo = info;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
15
Updates/UpdateCheckEventArgs.cs
Normal file
15
Updates/UpdateCheckEventArgs.cs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace TweetDck.Updates{
|
||||||
|
class UpdateCheckEventArgs : EventArgs{
|
||||||
|
public int EventId { get; private set; }
|
||||||
|
public bool UpdateAvailable { get; private set; }
|
||||||
|
public string LatestVersion { get; private set; }
|
||||||
|
|
||||||
|
public UpdateCheckEventArgs(int eventId, bool updateAvailable, string latestVersion){
|
||||||
|
EventId = eventId;
|
||||||
|
UpdateAvailable = updateAvailable;
|
||||||
|
LatestVersion = latestVersion;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
98
Updates/UpdateHandler.cs
Normal file
98
Updates/UpdateHandler.cs
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using CefSharp;
|
||||||
|
using CefSharp.WinForms;
|
||||||
|
using TweetDck.Core;
|
||||||
|
using TweetDck.Core.Controls;
|
||||||
|
using TweetDck.Resources;
|
||||||
|
|
||||||
|
namespace TweetDck.Updates{
|
||||||
|
class UpdateHandler{
|
||||||
|
private readonly ChromiumWebBrowser browser;
|
||||||
|
private readonly FormBrowser form;
|
||||||
|
|
||||||
|
public event EventHandler<UpdateAcceptedEventArgs> UpdateAccepted;
|
||||||
|
public event EventHandler<UpdateCheckEventArgs> CheckFinished;
|
||||||
|
|
||||||
|
private int lastEventId;
|
||||||
|
|
||||||
|
public UpdateHandler(ChromiumWebBrowser browser, FormBrowser form){
|
||||||
|
this.browser = browser;
|
||||||
|
this.form = form;
|
||||||
|
browser.FrameLoadEnd += browser_FrameLoadEnd;
|
||||||
|
browser.RegisterJsObject("$TDU",new Bridge(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e){
|
||||||
|
if (e.Frame.IsMain){
|
||||||
|
foreach(string js in ScriptLoader.LoadResources("update.js").Where(js => js != null)){
|
||||||
|
browser.ExecuteScriptAsync(js);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Check(bool force){
|
||||||
|
browser.ExecuteScriptAsync("TDUF_runUpdateCheck",force,++lastEventId);
|
||||||
|
return lastEventId;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TriggerUpdateAcceptedEvent(UpdateAcceptedEventArgs args){
|
||||||
|
if (UpdateAccepted != null){
|
||||||
|
form.InvokeSafe(() => UpdateAccepted(this,args));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TriggerCheckFinishedEvent(UpdateCheckEventArgs args){
|
||||||
|
if (CheckFinished != null){
|
||||||
|
form.InvokeSafe(() => CheckFinished(this,args));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Bridge{
|
||||||
|
public string BrandName{
|
||||||
|
get{
|
||||||
|
return Program.BrandName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string VersionTag{
|
||||||
|
get{
|
||||||
|
return Program.VersionTag;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool UpdateCheckEnabled{
|
||||||
|
get{
|
||||||
|
return Program.UserConfig.EnableUpdateCheck;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string DismissedVersionTag{
|
||||||
|
get{
|
||||||
|
return Program.UserConfig.DismissedUpdate ?? string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private readonly UpdateHandler owner;
|
||||||
|
|
||||||
|
public Bridge(UpdateHandler owner){
|
||||||
|
this.owner = owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnUpdateCheckFinished(int eventId, bool isUpdateAvailable, string latestVersion){
|
||||||
|
owner.TriggerCheckFinishedEvent(new UpdateCheckEventArgs(eventId,isUpdateAvailable,latestVersion));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnUpdateAccepted(string versionTag, string downloadUrl){
|
||||||
|
owner.TriggerUpdateAcceptedEvent(new UpdateAcceptedEventArgs(new UpdateInfo(versionTag,downloadUrl)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnUpdateDismissed(string versionTag){
|
||||||
|
owner.form.InvokeSafe(() => {
|
||||||
|
Program.UserConfig.DismissedUpdate = versionTag;
|
||||||
|
Program.UserConfig.Save();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -1,4 +1,6 @@
|
|||||||
namespace TweetDck.Core.Utils{
|
using TweetDck.Core.Utils;
|
||||||
|
|
||||||
|
namespace TweetDck.Updates{
|
||||||
class UpdateInfo{
|
class UpdateInfo{
|
||||||
public readonly string VersionTag;
|
public readonly string VersionTag;
|
||||||
public readonly string DownloadUrl;
|
public readonly string DownloadUrl;
|
Reference in New Issue
Block a user