mirror of
https://github.com/chylex/TweetDuck.git
synced 2025-09-14 19:32:10 +02:00
Compare commits
20 Commits
Author | SHA1 | Date | |
---|---|---|---|
aa2c60f7e9 | |||
f7dc200684 | |||
ad306c56c7 | |||
86aba1eb52 | |||
826f1aba7a | |||
8abf4364c6 | |||
4c45d91d4e | |||
3176b6cb8f | |||
27971e09cd | |||
bf95ae00de | |||
0dbfa7e101 | |||
85d09c4b5e | |||
4f9bc40476 | |||
757ccbf9d3 | |||
4cf9730130 | |||
1dd0d70ab9 | |||
340eaece0f | |||
c151e7cd37 | |||
ca0baae832 | |||
478e6ed8df |
@@ -90,7 +90,7 @@ namespace TweetDck.Configuration{
|
||||
try{
|
||||
File.Delete(file);
|
||||
}catch(Exception e){
|
||||
Program.Log(e.ToString());
|
||||
Program.Reporter.Log(e.ToString());
|
||||
result = false;
|
||||
}
|
||||
|
||||
|
@@ -35,6 +35,7 @@ namespace TweetDck.Configuration{
|
||||
public int NotificationDurationValue { get; set; }
|
||||
public bool NotificationLegacyLoad { get; set; }
|
||||
|
||||
public bool EnableSpellCheck { get; set; }
|
||||
public bool ExpandLinksOnHover { get; set; }
|
||||
public bool EnableTrayHighlight { get; set; }
|
||||
|
||||
@@ -188,13 +189,14 @@ namespace TweetDck.Configuration{
|
||||
|
||||
return true;
|
||||
}catch(Exception e){
|
||||
Program.HandleException("Could not save the configuration file.", e);
|
||||
Program.Reporter.HandleException("Configuration Error", "Could not save the configuration file.", true, e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static UserConfig Load(string file){
|
||||
UserConfig config = null;
|
||||
Exception firstException = null;
|
||||
|
||||
for(int attempt = 0; attempt < 2; attempt++){
|
||||
try{
|
||||
@@ -210,9 +212,21 @@ namespace TweetDck.Configuration{
|
||||
|
||||
break;
|
||||
}catch(FileNotFoundException){
|
||||
}catch(DirectoryNotFoundException){
|
||||
break;
|
||||
}catch(Exception e){
|
||||
Program.HandleException("Could not open the configuration file.", e);
|
||||
if (attempt == 0){
|
||||
firstException = e;
|
||||
Program.Reporter.Log(e.ToString());
|
||||
}
|
||||
else if (firstException != null){
|
||||
Program.Reporter.HandleException("Configuration Error", "Could not open the backup configuration file. If you continue, you may lose your settings and list of enabled plugins.", true, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (firstException != null && config == null){
|
||||
Program.Reporter.HandleException("Configuration Error", "Could not open the configuration file.", true, firstException);
|
||||
}
|
||||
|
||||
return config ?? new UserConfig(file);
|
||||
@@ -224,12 +238,7 @@ namespace TweetDck.Configuration{
|
||||
|
||||
private class SerializationCompatibilityHandler : SerializationBinder{
|
||||
public override Type BindToType(string assemblyName, string typeName){
|
||||
#if DUCK
|
||||
assemblyName = assemblyName.Replace("TweetDick", "TweetDuck");
|
||||
#else
|
||||
assemblyName = assemblyName.Replace("TweetDuck", "TweetDick");
|
||||
#endif
|
||||
|
||||
typeName = typeName.Replace("TweetDick", "TweetDck");
|
||||
return Type.GetType(string.Format(CultureInfo.CurrentCulture, "{0}, {1}", typeName, assemblyName));
|
||||
}
|
||||
|
@@ -1,3 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup></configuration>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/></startup></configuration>
|
||||
|
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
||||
<package id="cef.redist.x64" version="3.2623.1396" targetFramework="net40-Client" />
|
||||
<package id="cef.redist.x86" version="3.2623.1396" targetFramework="net40-Client" />
|
||||
<package id="CefSharp.Common" version="49.0.0-pre02" targetFramework="net40-Client" />
|
||||
<package id="CefSharp.WinForms" version="49.0.0-pre02" targetFramework="net40-Client" />
|
||||
<package id="Microsoft.VC120.CRT.JetBrains" version="12.0.21005.2" targetFramework="net40-Client" />
|
||||
<package id="cef.redist.x64" version="3.2785.1478" targetFramework="net452" />
|
||||
<package id="cef.redist.x86" version="3.2785.1478" targetFramework="net452" />
|
||||
<package id="CefSharp.Common" version="53.0.0-pre01" targetFramework="net452" />
|
||||
<package id="CefSharp.WinForms" version="53.0.0-pre01" targetFramework="net452" />
|
||||
<package id="Microsoft.VC120.CRT.JetBrains" version="12.0.21005.2" targetFramework="net452" />
|
||||
</packages>
|
@@ -101,6 +101,12 @@ namespace TweetDck.Core{
|
||||
|
||||
private void Browser_LoadingStateChanged(object sender, LoadingStateChangedEventArgs e){
|
||||
if (!e.IsLoading){
|
||||
browser.AddWordToDictionary("tweetdeck");
|
||||
browser.AddWordToDictionary("TweetDeck");
|
||||
browser.AddWordToDictionary("tweetduck");
|
||||
browser.AddWordToDictionary("TweetDuck");
|
||||
browser.AddWordToDictionary("TD");
|
||||
|
||||
Invoke(new Action(SetupWindow));
|
||||
browser.LoadingStateChanged -= Browser_LoadingStateChanged;
|
||||
}
|
||||
|
16
Core/Handling/BrowserProcessHandler.cs
Normal file
16
Core/Handling/BrowserProcessHandler.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using CefSharp;
|
||||
using System;
|
||||
|
||||
namespace TweetDck.Core.Handling{
|
||||
class BrowserProcessHandler : IBrowserProcessHandler{
|
||||
void IBrowserProcessHandler.OnContextInitialized(){
|
||||
using(IRequestContext ctx = Cef.GetGlobalRequestContext()){
|
||||
string err;
|
||||
ctx.SetPreference("browser.enable_spellchecking", Program.UserConfig.EnableSpellCheck, out err);
|
||||
}
|
||||
}
|
||||
|
||||
void IBrowserProcessHandler.OnScheduleMessagePumpWork(long delay){}
|
||||
void IDisposable.Dispose(){}
|
||||
}
|
||||
}
|
@@ -133,7 +133,7 @@ namespace TweetDck.Core.Handling{
|
||||
|
||||
form.OnImagePasted();
|
||||
}catch(Exception e){
|
||||
Program.HandleException("Could not paste image from clipboard.", e);
|
||||
Program.Reporter.HandleException("Clipboard Image Error", "Could not paste image from clipboard.", true, e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
79
Core/Other/FormMessage.Designer.cs
generated
Normal file
79
Core/Other/FormMessage.Designer.cs
generated
Normal file
@@ -0,0 +1,79 @@
|
||||
namespace TweetDck.Core.Other {
|
||||
partial class FormMessage {
|
||||
/// <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 Windows Form 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.panelActions = new System.Windows.Forms.Panel();
|
||||
this.labelMessage = new System.Windows.Forms.Label();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// panelActions
|
||||
//
|
||||
this.panelActions.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.panelActions.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||
this.panelActions.Location = new System.Drawing.Point(0, 84);
|
||||
this.panelActions.Name = "panelActions";
|
||||
this.panelActions.Size = new System.Drawing.Size(233, 49);
|
||||
this.panelActions.TabIndex = 0;
|
||||
//
|
||||
// labelMessage
|
||||
//
|
||||
this.labelMessage.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.labelMessage.AutoSize = true;
|
||||
this.labelMessage.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.labelMessage.Location = new System.Drawing.Point(62, 33);
|
||||
this.labelMessage.Margin = new System.Windows.Forms.Padding(53, 24, 27, 24);
|
||||
this.labelMessage.MaximumSize = new System.Drawing.Size(600, 0);
|
||||
this.labelMessage.MinimumSize = new System.Drawing.Size(0, 24);
|
||||
this.labelMessage.Name = "labelMessage";
|
||||
this.labelMessage.Size = new System.Drawing.Size(0, 24);
|
||||
this.labelMessage.TabIndex = 1;
|
||||
this.labelMessage.SizeChanged += new System.EventHandler(this.labelMessage_SizeChanged);
|
||||
//
|
||||
// FormMessage
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.Color.White;
|
||||
this.ClientSize = new System.Drawing.Size(98, 133);
|
||||
this.Controls.Add(this.labelMessage);
|
||||
this.Controls.Add(this.panelActions);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "FormMessage";
|
||||
this.ShowIcon = false;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Panel panelActions;
|
||||
private System.Windows.Forms.Label labelMessage;
|
||||
}
|
||||
}
|
114
Core/Other/FormMessage.cs
Normal file
114
Core/Other/FormMessage.cs
Normal file
@@ -0,0 +1,114 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace TweetDck.Core.Other{
|
||||
sealed partial class FormMessage : Form{
|
||||
public Button ClickedButton { get; private set; }
|
||||
|
||||
private readonly Icon icon;
|
||||
private readonly bool isReady;
|
||||
|
||||
private int realFormWidth, minFormWidth;
|
||||
private int buttonCount;
|
||||
private int prevLabelWidth, prevLabelHeight;
|
||||
private bool wasLabelMultiline;
|
||||
|
||||
public FormMessage(string caption, string text, MessageBoxIcon messageIcon){
|
||||
InitializeComponent();
|
||||
|
||||
this.prevLabelWidth = labelMessage.Width;
|
||||
this.prevLabelHeight = labelMessage.Height;
|
||||
this.minFormWidth = 18;
|
||||
|
||||
switch(messageIcon){
|
||||
case MessageBoxIcon.Information:
|
||||
icon = SystemIcons.Information;
|
||||
break;
|
||||
|
||||
case MessageBoxIcon.Warning:
|
||||
icon = SystemIcons.Warning;
|
||||
break;
|
||||
|
||||
case MessageBoxIcon.Error:
|
||||
icon = SystemIcons.Error;
|
||||
break;
|
||||
|
||||
default:
|
||||
icon = null;
|
||||
labelMessage.Location = new Point(labelMessage.Location.X-32, labelMessage.Location.Y);
|
||||
break;
|
||||
}
|
||||
|
||||
this.isReady = true;
|
||||
|
||||
this.Text = caption;
|
||||
this.labelMessage.Text = text;
|
||||
}
|
||||
|
||||
public Button AddButton(string title){
|
||||
Button button = new Button{
|
||||
Anchor = AnchorStyles.Bottom | AnchorStyles.Right,
|
||||
Location = new Point(Width-112-buttonCount*96, 12),
|
||||
Size = new Size(88, 26),
|
||||
TabIndex = buttonCount,
|
||||
Text = title,
|
||||
UseVisualStyleBackColor = true
|
||||
};
|
||||
|
||||
button.Click += (sender, args) => {
|
||||
ClickedButton = (Button)sender;
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
};
|
||||
|
||||
panelActions.Controls.Add(button);
|
||||
|
||||
minFormWidth += 96;
|
||||
Width = Math.Max(realFormWidth, minFormWidth);
|
||||
|
||||
++buttonCount;
|
||||
return button;
|
||||
}
|
||||
|
||||
public void AddActionControl(Control control){
|
||||
panelActions.Controls.Add(control);
|
||||
|
||||
minFormWidth += control.Width+control.Margin.Horizontal;
|
||||
Width = Math.Max(realFormWidth, minFormWidth);
|
||||
}
|
||||
|
||||
private void labelMessage_SizeChanged(object sender, EventArgs e){
|
||||
if (!isReady){
|
||||
return;
|
||||
}
|
||||
|
||||
bool isMultiline = labelMessage.Height > labelMessage.MinimumSize.Height;
|
||||
|
||||
if (isMultiline && !wasLabelMultiline){
|
||||
labelMessage.Location = new Point(labelMessage.Location.X, labelMessage.Location.Y-8);
|
||||
prevLabelHeight += 8;
|
||||
}
|
||||
else if (!isMultiline && wasLabelMultiline){
|
||||
labelMessage.Location = new Point(labelMessage.Location.X, labelMessage.Location.Y+8);
|
||||
prevLabelHeight -= 8;
|
||||
}
|
||||
|
||||
realFormWidth = Width-(icon == null ? 32+35+(labelMessage.Margin.Left-labelMessage.Margin.Right) : 0)+labelMessage.Margin.Right+labelMessage.Width-prevLabelWidth;
|
||||
Width = Math.Max(realFormWidth, minFormWidth);
|
||||
Height += labelMessage.Height-prevLabelHeight;
|
||||
|
||||
prevLabelWidth = labelMessage.Width;
|
||||
prevLabelHeight = labelMessage.Height;
|
||||
wasLabelMultiline = isMultiline;
|
||||
}
|
||||
|
||||
protected override void OnPaint(PaintEventArgs e){
|
||||
if (icon != null){
|
||||
e.Graphics.DrawIcon(icon, 25, 26);
|
||||
}
|
||||
|
||||
base.OnPaint(e);
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,4 +1,5 @@
|
||||
using System.Windows.Forms;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms;
|
||||
using TweetDck.Configuration;
|
||||
|
||||
namespace TweetDck.Core.Other.Settings{
|
||||
@@ -14,5 +15,12 @@ namespace TweetDck.Core.Other.Settings{
|
||||
public BaseTabSettings(){
|
||||
Padding = new Padding(6);
|
||||
}
|
||||
|
||||
protected static void PromptRestart(){
|
||||
if (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){
|
||||
Process.Start(Application.ExecutablePath, "-restart");
|
||||
Application.Exit();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -8,8 +8,8 @@ using TweetDck.Plugins;
|
||||
|
||||
namespace TweetDck.Core.Other.Settings.Export{
|
||||
sealed class ExportManager{
|
||||
public static readonly string CookiesPath = Path.Combine(Program.StoragePath, "Cookies");
|
||||
public static readonly string TempCookiesPath = Path.Combine(Program.StoragePath, "CookiesTmp");
|
||||
private static readonly string CookiesPath = Path.Combine(Program.StoragePath, "Cookies");
|
||||
private static readonly string TempCookiesPath = Path.Combine(Program.StoragePath, "CookiesTmp");
|
||||
|
||||
public bool IsRestarting { get; private set; }
|
||||
public Exception LastException { get; private set; }
|
||||
@@ -125,6 +125,20 @@ namespace TweetDck.Core.Other.Settings.Export{
|
||||
}
|
||||
}
|
||||
|
||||
public static void ImportCookies(){
|
||||
if (File.Exists(TempCookiesPath)){
|
||||
try{
|
||||
if (File.Exists(CookiesPath)){
|
||||
File.Delete(CookiesPath);
|
||||
}
|
||||
|
||||
File.Move(TempCookiesPath, CookiesPath);
|
||||
}catch(Exception e){
|
||||
Program.Reporter.HandleException("Profile Import Error", "Could not import the cookie file to restore login session.", true, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static IEnumerable<PathInfo> EnumerateFilesRelative(string root){
|
||||
return Directory.EnumerateFiles(root, "*.*", SearchOption.AllDirectories).Select(fullPath => new PathInfo{
|
||||
Full = fullPath,
|
||||
|
@@ -1,5 +1,4 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms;
|
||||
using TweetDck.Core.Controls;
|
||||
using TweetDck.Core.Other.Settings.Dialogs;
|
||||
@@ -115,7 +114,7 @@ namespace TweetDck.Core.Other.Settings{
|
||||
ExportManager manager = new ExportManager(file, plugins);
|
||||
|
||||
if (!manager.Export(saveCredentials)){
|
||||
Program.HandleException("An exception happened while exporting "+Program.BrandName+" settings.", manager.LastException);
|
||||
Program.Reporter.HandleException("Profile Export Error", "An exception happened while exporting "+Program.BrandName+" settings.", true, manager.LastException);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -141,7 +140,7 @@ namespace TweetDck.Core.Other.Settings{
|
||||
}
|
||||
}
|
||||
else{
|
||||
Program.HandleException("An exception happened while importing "+Program.BrandName+" settings.", manager.LastException);
|
||||
Program.Reporter.HandleException("Profile Import Error", "An exception happened while importing "+Program.BrandName+" settings.", true, manager.LastException);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -152,12 +151,5 @@ namespace TweetDck.Core.Other.Settings{
|
||||
((FormSettings)ParentForm).ReloadUI();
|
||||
}
|
||||
}
|
||||
|
||||
private static void PromptRestart(){
|
||||
if (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){
|
||||
Process.Start(Application.ExecutablePath, "-restart");
|
||||
Application.Exit();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
19
Core/Other/Settings/TabSettingsGeneral.Designer.cs
generated
19
Core/Other/Settings/TabSettingsGeneral.Designer.cs
generated
@@ -28,6 +28,7 @@
|
||||
this.comboBoxTrayType = new System.Windows.Forms.ComboBox();
|
||||
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
|
||||
this.checkTrayHighlight = new System.Windows.Forms.CheckBox();
|
||||
this.checkSpellCheck = new System.Windows.Forms.CheckBox();
|
||||
this.groupTray = new System.Windows.Forms.GroupBox();
|
||||
this.labelTrayIcon = new System.Windows.Forms.Label();
|
||||
this.groupInterface = new System.Windows.Forms.GroupBox();
|
||||
@@ -74,12 +75,24 @@
|
||||
this.checkTrayHighlight.UseVisualStyleBackColor = true;
|
||||
this.checkTrayHighlight.CheckedChanged += new System.EventHandler(this.checkTrayHighlight_CheckedChanged);
|
||||
//
|
||||
// checkSpellCheck
|
||||
//
|
||||
this.checkSpellCheck.AutoSize = true;
|
||||
this.checkSpellCheck.Location = new System.Drawing.Point(9, 44);
|
||||
this.checkSpellCheck.Name = "checkSpellCheck";
|
||||
this.checkSpellCheck.Size = new System.Drawing.Size(119, 17);
|
||||
this.checkSpellCheck.TabIndex = 15;
|
||||
this.checkSpellCheck.Text = "Enable Spell Check";
|
||||
this.toolTip.SetToolTip(this.checkSpellCheck, "Underlines words that are spelled incorrectly.");
|
||||
this.checkSpellCheck.UseVisualStyleBackColor = true;
|
||||
this.checkSpellCheck.CheckedChanged += new System.EventHandler(this.checkSpellCheck_CheckedChanged);
|
||||
//
|
||||
// groupTray
|
||||
//
|
||||
this.groupTray.Controls.Add(this.checkTrayHighlight);
|
||||
this.groupTray.Controls.Add(this.labelTrayIcon);
|
||||
this.groupTray.Controls.Add(this.comboBoxTrayType);
|
||||
this.groupTray.Location = new System.Drawing.Point(9, 63);
|
||||
this.groupTray.Location = new System.Drawing.Point(9, 86);
|
||||
this.groupTray.Name = "groupTray";
|
||||
this.groupTray.Size = new System.Drawing.Size(183, 93);
|
||||
this.groupTray.TabIndex = 15;
|
||||
@@ -98,10 +111,11 @@
|
||||
//
|
||||
// groupInterface
|
||||
//
|
||||
this.groupInterface.Controls.Add(this.checkSpellCheck);
|
||||
this.groupInterface.Controls.Add(this.checkExpandLinks);
|
||||
this.groupInterface.Location = new System.Drawing.Point(9, 9);
|
||||
this.groupInterface.Name = "groupInterface";
|
||||
this.groupInterface.Size = new System.Drawing.Size(183, 48);
|
||||
this.groupInterface.Size = new System.Drawing.Size(183, 71);
|
||||
this.groupInterface.TabIndex = 16;
|
||||
this.groupInterface.TabStop = false;
|
||||
this.groupInterface.Text = "User Interface";
|
||||
@@ -131,5 +145,6 @@
|
||||
private System.Windows.Forms.GroupBox groupInterface;
|
||||
private System.Windows.Forms.Label labelTrayIcon;
|
||||
private System.Windows.Forms.CheckBox checkTrayHighlight;
|
||||
private System.Windows.Forms.CheckBox checkSpellCheck;
|
||||
}
|
||||
}
|
||||
|
@@ -12,8 +12,9 @@ namespace TweetDck.Core.Other.Settings{
|
||||
comboBoxTrayType.Items.Add("Combined");
|
||||
comboBoxTrayType.SelectedIndex = Math.Min(Math.Max((int)Config.TrayBehavior, 0), comboBoxTrayType.Items.Count-1);
|
||||
|
||||
checkExpandLinks.Checked = Program.UserConfig.ExpandLinksOnHover;
|
||||
checkTrayHighlight.Checked = Program.UserConfig.EnableTrayHighlight;
|
||||
checkExpandLinks.Checked = Config.ExpandLinksOnHover;
|
||||
checkSpellCheck.Checked = Config.EnableSpellCheck;
|
||||
checkTrayHighlight.Checked = Config.EnableTrayHighlight;
|
||||
}
|
||||
|
||||
private void checkExpandLinks_CheckedChanged(object sender, EventArgs e){
|
||||
@@ -22,6 +23,13 @@ namespace TweetDck.Core.Other.Settings{
|
||||
Config.ExpandLinksOnHover = checkExpandLinks.Checked;
|
||||
}
|
||||
|
||||
private void checkSpellCheck_CheckedChanged(object sender, EventArgs e){
|
||||
if (!Ready)return;
|
||||
|
||||
Config.EnableSpellCheck = checkSpellCheck.Checked;
|
||||
PromptRestart();
|
||||
}
|
||||
|
||||
private void comboBoxTrayType_SelectedIndexChanged(object sender, EventArgs e){
|
||||
if (!Ready)return;
|
||||
|
||||
|
@@ -8,14 +8,11 @@ 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 readonly string CacheFolder = Path.Combine(Program.StoragePath, "Cache");
|
||||
|
||||
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 });
|
||||
return Directory.EnumerateFiles(CacheFolder);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +31,21 @@ namespace TweetDck.Core.Utils{
|
||||
task.Start();
|
||||
}
|
||||
|
||||
public static void ClearOldCacheFiles(){
|
||||
if (!Directory.Exists(CacheFolder)){
|
||||
foreach(string file in 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[]{ Path.Combine(Program.StoragePath, "index") })){
|
||||
try{
|
||||
File.Delete(file);
|
||||
}catch{
|
||||
// welp, too bad
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void SetClearOnExit(){
|
||||
ClearOnExit = true;
|
||||
}
|
||||
|
33
Core/Utils/WindowsUtils.cs
Normal file
33
Core/Utils/WindowsUtils.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Security.AccessControl;
|
||||
using System.Security.Principal;
|
||||
|
||||
namespace TweetDck.Core.Utils{
|
||||
static class WindowsUtils{
|
||||
public static bool CheckFolderPermission(string path, FileSystemRights right){
|
||||
try{
|
||||
AuthorizationRuleCollection rules = Directory.GetAccessControl(path).GetAccessRules(true, true, typeof(SecurityIdentifier));
|
||||
WindowsIdentity identity = WindowsIdentity.GetCurrent();
|
||||
|
||||
if (identity == null || identity.Groups == null){
|
||||
return false;
|
||||
}
|
||||
|
||||
bool accessAllow = false, accessDeny = false;
|
||||
|
||||
foreach(FileSystemAccessRule rule in rules.Cast<FileSystemAccessRule>().Where(rule => identity.Groups.Contains(rule.IdentityReference) && (right & rule.FileSystemRights) == right)){
|
||||
switch(rule.AccessControlType){
|
||||
case AccessControlType.Allow: accessAllow = true; break;
|
||||
case AccessControlType.Deny: accessDeny = true; break;
|
||||
}
|
||||
}
|
||||
|
||||
return accessAllow && !accessDeny;
|
||||
}
|
||||
catch{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -16,20 +16,18 @@ namespace TweetDck.Migration{
|
||||
private static readonly string TweetDickStorage = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "TweetDick");
|
||||
|
||||
public static void Run(){
|
||||
#if DUCK
|
||||
if (!Program.IsPortable && Directory.Exists(TweetDickStorage) && !Directory.Exists(Program.StoragePath)){
|
||||
if (MessageBox.Show("Welcome to TweetDuck! Would you like to move your old TweetDick configuration and login data?", "TweetDick Migration", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes){
|
||||
try{
|
||||
Directory.Move(TweetDickStorage, Program.StoragePath);
|
||||
MessageBox.Show("All done! You can now uninstall TweetDick.", "TweetDick Migration", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
}catch(Exception ex){
|
||||
Program.HandleException("An unexpected exception has occurred during the migration process.", ex);
|
||||
Program.Reporter.HandleException("Migration Error", "An unexpected error occurred during the migration process.", true, ex);
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!Program.UserConfig.IgnoreMigration && Directory.Exists(TweetDeckPath)){
|
||||
MigrationDecision decision;
|
||||
@@ -48,7 +46,7 @@ namespace TweetDck.Migration{
|
||||
formWait.Close();
|
||||
|
||||
if (ex != null){
|
||||
Program.HandleException("An unexpected exception has occurred during the migration process.", ex);
|
||||
Program.Reporter.HandleException("Migration Error", "An unexpected error occurred during the migration process.", true, ex);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -83,7 +83,7 @@ namespace TweetDck.Plugins{
|
||||
try{
|
||||
File.Copy(defaultConfigPath, configPath, false);
|
||||
}catch(Exception e){
|
||||
Program.HandleException("Could not generate a configuration file for '"+identifier+"' plugin.", e);
|
||||
Program.Reporter.HandleException("Plugin Loading Error", "Could not generate a configuration file for '"+identifier+"' plugin.", true, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
109
Program.cs
109
Program.cs
@@ -1,8 +1,6 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using CefSharp;
|
||||
using TweetDck.Configuration;
|
||||
@@ -14,22 +12,19 @@ using System.Threading;
|
||||
using TweetDck.Plugins;
|
||||
using TweetDck.Plugins.Events;
|
||||
using TweetDck.Core.Other.Settings.Export;
|
||||
using TweetDck.Core.Handling;
|
||||
using System.Security.AccessControl;
|
||||
|
||||
[assembly: CLSCompliant(true)]
|
||||
namespace TweetDck{
|
||||
static class Program{
|
||||
#if DUCK
|
||||
public const string BrandName = "TweetDuck";
|
||||
public const string Website = "http://tweetduck.chylex.com";
|
||||
#else
|
||||
public const string BrandName = "TweetDick";
|
||||
public const string Website = "http://tweetdick.chylex.com";
|
||||
#endif
|
||||
|
||||
public const string BrowserSubprocess = BrandName+".Browser.exe";
|
||||
|
||||
public const string VersionTag = "1.3.2";
|
||||
public const string VersionFull = "1.3.2.0";
|
||||
public const string VersionTag = "1.3.3";
|
||||
public const string VersionFull = "1.3.3.0";
|
||||
|
||||
public static readonly Version Version = new Version(VersionTag);
|
||||
|
||||
@@ -38,7 +33,9 @@ namespace TweetDck{
|
||||
public static readonly string ProgramPath = AppDomain.CurrentDomain.BaseDirectory;
|
||||
public static readonly string StoragePath = IsPortable ? Path.Combine(ProgramPath, "portable", "storage") : GetDataStoragePath();
|
||||
public static readonly string TemporaryPath = IsPortable ? Path.Combine(ProgramPath, "portable", "tmp") : Path.Combine(Path.GetTempPath(), BrandName+'_'+Path.GetRandomFileName().Substring(0, 6));
|
||||
|
||||
public static readonly string ConfigFilePath = Path.Combine(StoragePath, "TD_UserConfig.cfg");
|
||||
private static readonly string LogFilePath = Path.Combine(StoragePath, "TD_Log.txt");
|
||||
|
||||
public static readonly string ScriptPath = Path.Combine(ProgramPath, "scripts");
|
||||
public static readonly string PluginPath = Path.Combine(ProgramPath, "plugins");
|
||||
@@ -49,12 +46,7 @@ namespace TweetDck{
|
||||
private static bool HasCleanedUp;
|
||||
|
||||
public static UserConfig UserConfig { get; private set; }
|
||||
|
||||
public static string LogFile{
|
||||
get{
|
||||
return Path.Combine(ProgramPath, "td-log.txt");
|
||||
}
|
||||
}
|
||||
public static Reporter Reporter { get; private set; }
|
||||
|
||||
[STAThread]
|
||||
private static void Main(){
|
||||
@@ -63,11 +55,21 @@ namespace TweetDck{
|
||||
|
||||
WindowRestoreMessage = NativeMethods.RegisterWindowMessage("TweetDuckRestore");
|
||||
|
||||
if (!File.Exists(LogFile) && !Log(string.Empty)){
|
||||
MessageBox.Show("Could not write to the log file. If you installed "+BrandName+" to Program Files, please run it as Administrator.", "Administrator Required", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||
if (!WindowsUtils.CheckFolderPermission(ProgramPath, FileSystemRights.WriteData)){
|
||||
MessageBox.Show(BrandName+" does not have write permissions to the program folder. If it is installed in Program Files, please run it as Administrator.", "Administrator Required", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
Reporter = new Reporter(LogFilePath);
|
||||
|
||||
AppDomain.CurrentDomain.UnhandledException += (sender, args) => {
|
||||
Exception ex = args.ExceptionObject as Exception;
|
||||
|
||||
if (ex != null){
|
||||
Reporter.HandleException(BrandName+" Has Failed :(", "An unhandled exception has occurred.", false, ex);
|
||||
}
|
||||
};
|
||||
|
||||
string[] programArguments = Environment.GetCommandLineArgs();
|
||||
|
||||
if (programArguments.Contains("-restart")){
|
||||
@@ -83,8 +85,13 @@ namespace TweetDck{
|
||||
Thread.Sleep(500);
|
||||
}
|
||||
}
|
||||
|
||||
ReloadConfig();
|
||||
}
|
||||
else{
|
||||
ReloadConfig();
|
||||
MigrationManager.Run();
|
||||
|
||||
if (!LockManager.Lock()){
|
||||
if (LockManager.LockingProcess.MainWindowHandle == IntPtr.Zero && LockManager.LockingProcess.Responding){ // restore if the original process is in tray
|
||||
NativeMethods.SendMessage(NativeMethods.HWND_BROADCAST, WindowRestoreMessage, 0, IntPtr.Zero);
|
||||
@@ -102,33 +109,16 @@ namespace TweetDck{
|
||||
}
|
||||
}
|
||||
|
||||
if (programArguments.Contains("-importcookies") && File.Exists(ExportManager.TempCookiesPath)){
|
||||
try{
|
||||
if (File.Exists(ExportManager.CookiesPath)){
|
||||
File.Delete(ExportManager.CookiesPath);
|
||||
if (programArguments.Contains("-importcookies")){
|
||||
ExportManager.ImportCookies();
|
||||
}
|
||||
|
||||
File.Move(ExportManager.TempCookiesPath, ExportManager.CookiesPath);
|
||||
}catch(Exception e){
|
||||
HandleException("Could not import the cookie file to restore login session.", e);
|
||||
}
|
||||
}
|
||||
|
||||
ReloadConfig();
|
||||
|
||||
MigrationManager.Run();
|
||||
|
||||
Cef.OnContextInitialized = () => {
|
||||
using(IRequestContext ctx = Cef.GetGlobalRequestContext()){
|
||||
string err;
|
||||
ctx.SetPreference("browser.enable_spellchecking", false, out err);
|
||||
}
|
||||
};
|
||||
BrowserCache.ClearOldCacheFiles();
|
||||
|
||||
CefSettings settings = new CefSettings{
|
||||
AcceptLanguageList = BrowserUtils.HeaderAcceptLanguage,
|
||||
UserAgent = BrowserUtils.HeaderUserAgent,
|
||||
Locale = CultureInfo.CurrentCulture.TwoLetterISOLanguageName,
|
||||
Locale = GetCmdArgumentValue("locale") ?? "en",
|
||||
CachePath = StoragePath,
|
||||
BrowserSubprocessPath = File.Exists(BrowserSubprocess) ? BrowserSubprocess : "CefSharp.BrowserSubprocess.exe",
|
||||
#if !DEBUG
|
||||
@@ -138,15 +128,7 @@ namespace TweetDck{
|
||||
|
||||
CommandLineArgsParser.AddToDictionary(UserConfig.CustomCefArgs, settings.CefCommandLineArgs);
|
||||
|
||||
Cef.Initialize(settings);
|
||||
|
||||
AppDomain.CurrentDomain.UnhandledException += (sender, args) => {
|
||||
Exception ex = args.ExceptionObject as Exception;
|
||||
|
||||
if (ex != null){
|
||||
HandleException("An unhandled exception has occurred.", ex);
|
||||
}
|
||||
};
|
||||
Cef.Initialize(settings, false, new BrowserProcessHandler());
|
||||
|
||||
Application.ApplicationExit += (sender, args) => ExitCleanup();
|
||||
|
||||
@@ -190,37 +172,6 @@ namespace TweetDck{
|
||||
}
|
||||
}
|
||||
|
||||
public static void HandleException(string message, Exception e){
|
||||
if (Log(e.ToString())){
|
||||
if (MessageBox.Show(message+"\r\nDo you want to open the log file to report the issue?", BrandName+" Has Failed :(", MessageBoxButtons.YesNo, MessageBoxIcon.Error, MessageBoxDefaultButton.Button2) == DialogResult.Yes){
|
||||
Process.Start(LogFile);
|
||||
}
|
||||
}
|
||||
else{
|
||||
MessageBox.Show(message+"\r\nFailed writing the error into the log file.\r\nOriginal exception: "+e, BrandName+" Has Failed :(", MessageBoxButtons.OK);
|
||||
}
|
||||
}
|
||||
|
||||
public static bool Log(string data){
|
||||
StringBuilder build = new StringBuilder();
|
||||
|
||||
if (!File.Exists(LogFile)){
|
||||
build.Append("Please, report all issues to: https://github.com/chylex/TweetDuck/issues\r\n\r\n");
|
||||
}
|
||||
|
||||
if (data.Length > 0){
|
||||
build.Append("[").Append(DateTime.Now.ToString("G", CultureInfo.CurrentCulture)).Append("]\r\n");
|
||||
build.Append(data).Append("\r\n\r\n");
|
||||
}
|
||||
|
||||
try{
|
||||
File.AppendAllText(LogFile, build.ToString(), Encoding.UTF8);
|
||||
return true;
|
||||
}catch{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static void ReloadConfig(){
|
||||
UserConfig = UserConfig.Load(ConfigFilePath);
|
||||
}
|
||||
@@ -230,7 +181,7 @@ namespace TweetDck{
|
||||
File.Delete(ConfigFilePath);
|
||||
File.Delete(UserConfig.GetBackupFile(ConfigFilePath));
|
||||
}catch(Exception e){
|
||||
HandleException("Could not delete configuration files to reset the settings.", e);
|
||||
Reporter.HandleException("Configuration Reset Error", "Could not delete configuration files to reset the settings.", true, e);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -1,13 +1,11 @@
|
||||
# Build Instructions
|
||||
|
||||
The program was build using Visual Studio 2013. After opening the solution, make sure you have **CefSharp.WinForms** and **Microsoft.VC120.CRT.JetBrains** included - if not, download them using NuGet. For **CefSharp**, you will need version 49 or newer currently available as a pre-release.
|
||||
The program was build using Visual Studio 2013. After opening the solution, make sure you have **CefSharp.WinForms** and **Microsoft.VC120.CRT.JetBrains** included - if not, download them using NuGet. For **CefSharp**, you will need version 53 or newer currently available as a pre-release.
|
||||
```
|
||||
PM> Install-Package CefSharp.WinForms -Pre -Version 49.0.0-pre02
|
||||
PM> Install-Package CefSharp.WinForms -Pre -Version 53.0.0-pre01
|
||||
PM> Install-Package Microsoft.VC120.CRT.JetBrains
|
||||
```
|
||||
|
||||
TweetD\*ck comes in two variants - TweetDick and TweetDuck. The solution includes both configurations under the names **Release Dick** and **Release Duck**, so make sure to select the correct one, or build both using Batch Build.
|
||||
|
||||
After building, run **_postbuild.bat** which deletes unnecessary files that CefSharp adds after post-build events >_>
|
||||
|
||||
Built files are then available in **bin/x86** and/or **bin/x64**.
|
||||
|
74
Reporter.cs
Normal file
74
Reporter.cs
Normal file
@@ -0,0 +1,74 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using TweetDck.Core.Other;
|
||||
|
||||
namespace TweetDck{
|
||||
class Reporter{
|
||||
private readonly string logFile;
|
||||
|
||||
public Reporter(string logFile){
|
||||
this.logFile = logFile;
|
||||
}
|
||||
|
||||
public bool Log(string data){
|
||||
StringBuilder build = new StringBuilder();
|
||||
|
||||
if (!File.Exists(logFile)){
|
||||
build.Append("Please, report all issues to: https://github.com/chylex/TweetDuck/issues\r\n\r\n");
|
||||
}
|
||||
|
||||
build.Append("[").Append(DateTime.Now.ToString("G", CultureInfo.CurrentCulture)).Append("]\r\n");
|
||||
build.Append(data).Append("\r\n\r\n");
|
||||
|
||||
try{
|
||||
File.AppendAllText(logFile, build.ToString(), Encoding.UTF8);
|
||||
return true;
|
||||
}catch{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void HandleException(string caption, string message, bool canIgnore, Exception e){
|
||||
Log(e.ToString());
|
||||
|
||||
FormMessage form = new FormMessage(caption, message+"\r\nError: "+e.Message, canIgnore ? MessageBoxIcon.Warning : MessageBoxIcon.Error);
|
||||
|
||||
form.AddButton("Exit");
|
||||
Button btnIgnore = form.AddButton("Ignore");
|
||||
|
||||
Button btnOpenLog = new Button{
|
||||
Anchor = AnchorStyles.Bottom | AnchorStyles.Left,
|
||||
Location = new Point(12, 12),
|
||||
Margin = new Padding(0, 0, 48, 0),
|
||||
Size = new Size(88, 26),
|
||||
Text = "Show Error Log",
|
||||
UseVisualStyleBackColor = true
|
||||
};
|
||||
|
||||
btnOpenLog.Click += (sender, args) => Process.Start(logFile);
|
||||
|
||||
form.AddActionControl(btnOpenLog);
|
||||
|
||||
if (!canIgnore){
|
||||
btnIgnore.Enabled = false;
|
||||
}
|
||||
|
||||
if (form.ShowDialog() == DialogResult.OK){
|
||||
if (form.ClickedButton == btnIgnore){
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
try{
|
||||
Process.GetCurrentProcess().Kill();
|
||||
}catch{
|
||||
Environment.FailFast(message, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,5 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="packages\CefSharp.WinForms.53.0.0-pre01\build\CefSharp.WinForms.props" Condition="Exists('packages\CefSharp.WinForms.53.0.0-pre01\build\CefSharp.WinForms.props')" />
|
||||
<Import Project="packages\CefSharp.Common.53.0.0-pre01\build\CefSharp.Common.props" Condition="Exists('packages\CefSharp.Common.53.0.0-pre01\build\CefSharp.Common.props')" />
|
||||
<Import Project="packages\CefSharp.WinForms.49.0.0-pre02\build\CefSharp.WinForms.props" Condition="Exists('packages\CefSharp.WinForms.49.0.0-pre02\build\CefSharp.WinForms.props')" />
|
||||
<Import Project="packages\CefSharp.Common.49.0.0-pre02\build\CefSharp.Common.props" Condition="Exists('packages\CefSharp.Common.49.0.0-pre02\build\CefSharp.Common.props')" />
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
@@ -11,12 +13,12 @@
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>TweetDck</RootNamespace>
|
||||
<AssemblyName Condition=" '$(Configuration)' == 'Debug' ">TweetDick</AssemblyName>
|
||||
<AssemblyName Condition=" '$(Configuration)' == 'Release Dick' ">TweetDick</AssemblyName>
|
||||
<AssemblyName Condition=" '$(Configuration)' == 'Release Duck' ">TweetDuck</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<AssemblyName Condition=" '$(Configuration)' == 'Release' ">TweetDuck</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<NuGetPackageImportStamp>ff8ce4f3</NuGetPackageImportStamp>
|
||||
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
|
||||
<NuGetPackageImportStamp>e83161d1</NuGetPackageImportStamp>
|
||||
<TargetFrameworkProfile>
|
||||
</TargetFrameworkProfile>
|
||||
<PublishUrl>publish\</PublishUrl>
|
||||
<Install>true</Install>
|
||||
<InstallFrom>Disk</InstallFrom>
|
||||
@@ -41,24 +43,13 @@
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release Dick|x86' ">
|
||||
<OutputPath>bin\x86\Release Dick\</OutputPath>
|
||||
<DefineConstants>
|
||||
</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>none</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>Resources\icon.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release Duck|x86' ">
|
||||
<OutputPath>bin\x86\Release Duck\</OutputPath>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<Optimize>true</Optimize>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
@@ -66,7 +57,12 @@
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<DefineConstants>DUCK</DefineConstants>
|
||||
<DefineConstants>
|
||||
</DefineConstants>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<AssemblyName>TweetDuck</AssemblyName>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
@@ -99,6 +95,7 @@
|
||||
<Compile Include="Core\Controls\TabPanel.Designer.cs">
|
||||
<DependentUpon>TabPanel.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Core\Handling\BrowserProcessHandler.cs" />
|
||||
<Compile Include="Core\Handling\ContextMenuBase.cs" />
|
||||
<Compile Include="Core\Handling\ContextMenuBrowser.cs" />
|
||||
<Compile Include="Core\FormBrowser.cs">
|
||||
@@ -123,6 +120,12 @@
|
||||
<Compile Include="Core\Other\FormAbout.Designer.cs">
|
||||
<DependentUpon>FormAbout.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Core\Other\FormMessage.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Core\Other\FormMessage.Designer.cs">
|
||||
<DependentUpon>FormMessage.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Core\Other\FormPlugins.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@@ -175,6 +178,7 @@
|
||||
</Compile>
|
||||
<Compile Include="Core\Utils\CommandLineArgsParser.cs" />
|
||||
<Compile Include="Core\Utils\WindowState.cs" />
|
||||
<Compile Include="Core\Utils\WindowsUtils.cs" />
|
||||
<Compile Include="Migration\FormBackgroundWork.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@@ -209,6 +213,7 @@
|
||||
<Compile Include="Plugins\Events\PluginLoadEventArgs.cs" />
|
||||
<Compile Include="Plugins\PluginManager.cs" />
|
||||
<Compile Include="Plugins\PluginScriptGenerator.cs" />
|
||||
<Compile Include="Reporter.cs" />
|
||||
<Compile Include="Updates\FormUpdateDownload.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@@ -312,15 +317,13 @@
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('packages\cef.redist.x86.3.2623.1396\build\cef.redist.x86.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\cef.redist.x86.3.2623.1396\build\cef.redist.x86.targets'))" />
|
||||
<Error Condition="!Exists('packages\cef.redist.x64.3.2623.1396\build\cef.redist.x64.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\cef.redist.x64.3.2623.1396\build\cef.redist.x64.targets'))" />
|
||||
<Error Condition="!Exists('packages\CefSharp.Common.49.0.0-pre02\build\CefSharp.Common.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\CefSharp.Common.49.0.0-pre02\build\CefSharp.Common.props'))" />
|
||||
<Error Condition="!Exists('packages\CefSharp.Common.49.0.0-pre02\build\CefSharp.Common.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\CefSharp.Common.49.0.0-pre02\build\CefSharp.Common.targets'))" />
|
||||
<Error Condition="!Exists('packages\CefSharp.WinForms.49.0.0-pre02\build\CefSharp.WinForms.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\CefSharp.WinForms.49.0.0-pre02\build\CefSharp.WinForms.props'))" />
|
||||
<Error Condition="!Exists('packages\cef.redist.x86.3.2785.1478\build\cef.redist.x86.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\cef.redist.x86.3.2785.1478\build\cef.redist.x86.targets'))" />
|
||||
<Error Condition="!Exists('packages\cef.redist.x64.3.2785.1478\build\cef.redist.x64.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\cef.redist.x64.3.2785.1478\build\cef.redist.x64.targets'))" />
|
||||
<Error Condition="!Exists('packages\CefSharp.Common.53.0.0-pre01\build\CefSharp.Common.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\CefSharp.Common.53.0.0-pre01\build\CefSharp.Common.props'))" />
|
||||
<Error Condition="!Exists('packages\CefSharp.Common.53.0.0-pre01\build\CefSharp.Common.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\CefSharp.Common.53.0.0-pre01\build\CefSharp.Common.targets'))" />
|
||||
<Error Condition="!Exists('packages\CefSharp.WinForms.53.0.0-pre01\build\CefSharp.WinForms.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\CefSharp.WinForms.53.0.0-pre01\build\CefSharp.WinForms.props'))" />
|
||||
<Error Condition="!Exists('packages\CefSharp.WinForms.53.0.0-pre01\build\CefSharp.WinForms.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\CefSharp.WinForms.53.0.0-pre01\build\CefSharp.WinForms.targets'))" />
|
||||
</Target>
|
||||
<Import Project="packages\cef.redist.x86.3.2623.1396\build\cef.redist.x86.targets" Condition="Exists('packages\cef.redist.x86.3.2623.1396\build\cef.redist.x86.targets')" />
|
||||
<Import Project="packages\cef.redist.x64.3.2623.1396\build\cef.redist.x64.targets" Condition="Exists('packages\cef.redist.x64.3.2623.1396\build\cef.redist.x64.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>
|
||||
<PostBuildEvent>del "$(TargetPath).config"
|
||||
xcopy "$(ProjectDir)LICENSE.md" "$(TargetDir)" /Y
|
||||
@@ -340,6 +343,10 @@ xcopy "$(ProjectDir)Resources\Plugins\*" "$(TargetDir)plugins\official\" /E /Y
|
||||
rmdir "$(ProjectDir)\bin\Debug"
|
||||
rmdir "$(ProjectDir)\bin\Release"</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<Import Project="packages\cef.redist.x86.3.2785.1478\build\cef.redist.x86.targets" Condition="Exists('packages\cef.redist.x86.3.2785.1478\build\cef.redist.x86.targets')" />
|
||||
<Import Project="packages\cef.redist.x64.3.2785.1478\build\cef.redist.x64.targets" Condition="Exists('packages\cef.redist.x64.3.2785.1478\build\cef.redist.x64.targets')" />
|
||||
<Import Project="packages\CefSharp.Common.53.0.0-pre01\build\CefSharp.Common.targets" Condition="Exists('packages\CefSharp.Common.53.0.0-pre01\build\CefSharp.Common.targets')" />
|
||||
<Import Project="packages\CefSharp.WinForms.53.0.0-pre01\build\CefSharp.WinForms.targets" Condition="Exists('packages\CefSharp.WinForms.53.0.0-pre01\build\CefSharp.WinForms.targets')" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
|
11
TweetDck.sln
11
TweetDck.sln
@@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2013
|
||||
VisualStudioVersion = 12.0.40629.0
|
||||
@@ -8,17 +8,14 @@ EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x86 = Debug|x86
|
||||
Release Dick|x86 = Release Dick|x86
|
||||
Release Duck|x86 = Release Duck|x86
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{2389A7CD-E0D3-4706-8294-092929A33A2D}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{2389A7CD-E0D3-4706-8294-092929A33A2D}.Debug|x86.Build.0 = Debug|x86
|
||||
{2389A7CD-E0D3-4706-8294-092929A33A2D}.Debug|x86.Deploy.0 = Debug|x86
|
||||
{2389A7CD-E0D3-4706-8294-092929A33A2D}.Release Dick|x86.ActiveCfg = Release Dick|x86
|
||||
{2389A7CD-E0D3-4706-8294-092929A33A2D}.Release Dick|x86.Build.0 = Release Dick|x86
|
||||
{2389A7CD-E0D3-4706-8294-092929A33A2D}.Release Duck|x86.ActiveCfg = Release Duck|x86
|
||||
{2389A7CD-E0D3-4706-8294-092929A33A2D}.Release Duck|x86.Build.0 = Release Duck|x86
|
||||
{2389A7CD-E0D3-4706-8294-092929A33A2D}.Release|x86.ActiveCfg = Release|x86
|
||||
{2389A7CD-E0D3-4706-8294-092929A33A2D}.Release|x86.Build.0 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
@@ -90,7 +90,7 @@ namespace TweetDck.Updates{
|
||||
}
|
||||
}
|
||||
else if (e.Error != null){
|
||||
Program.Log(e.Error.ToString());
|
||||
Program.Reporter.Log(e.Error.ToString());
|
||||
|
||||
if (MessageBox.Show("Could not download the update: "+e.Error.Message+"\r\n\r\nDo you want to open the website and try downloading the update manually?", "Update Has Failed", MessageBoxButtons.YesNo, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1) == DialogResult.Yes){
|
||||
BrowserUtils.OpenExternalBrowser(Program.Website);
|
||||
|
@@ -1,9 +1,5 @@
|
||||
del "bin\x86\Release Dick\*.xml"
|
||||
del "bin\x86\Release Dick\devtools_resources.pak"
|
||||
del "bin\x86\Release Duck\*.xml"
|
||||
del "bin\x86\Release Duck\devtools_resources.pak"
|
||||
del "bin\x86\Release\*.xml"
|
||||
del "bin\x86\Release\devtools_resources.pak"
|
||||
|
||||
del "bin\x86\Release Dick\TweetDick.Browser.exe"
|
||||
ren "bin\x86\Release Dick\CefSharp.BrowserSubprocess.exe" "TweetDick.Browser.exe"
|
||||
del "bin\x86\Release Duck\TweetDuck.Browser.exe"
|
||||
ren "bin\x86\Release Duck\CefSharp.BrowserSubprocess.exe" "TweetDuck.Browser.exe"
|
||||
del "bin\x86\Release\TweetDuck.Browser.exe"
|
||||
ren "bin\x86\Release\CefSharp.BrowserSubprocess.exe" "TweetDuck.Browser.exe"
|
Reference in New Issue
Block a user