OSDN Git Service

Updated IRC Plugin - first pass
authornooperation <madbrahmin@gmail.com>
Sun, 2 Aug 2015 05:06:43 +0000 (01:06 -0400)
committernooperation <madbrahmin@gmail.com>
Sun, 2 Aug 2015 05:06:43 +0000 (01:06 -0400)
* Upgraded to .net 4.0, fixed moved to using the RRichText control
* Started redesigning interface (group selection currently disabled)

plugins/Radegast.Plugin.IRC/Radegast.Plugin.IRC.cs
plugins/Radegast.Plugin.IRC/Radegast.Plugin.IRC.csproj
plugins/Radegast.Plugin.IRC/RelayConsole.Designer.cs
plugins/Radegast.Plugin.IRC/RelayConsole.cs
plugins/Radegast.Plugin.IRC/RelayConsole.resx

index ba0cc7b..06e5082 100644 (file)
@@ -35,31 +35,32 @@ using System.Threading;
 using System.Windows.Forms;
 using Radegast;
 using OpenMetaverse;
+using OpenMetaverse.StructuredData;
 
 namespace Radegast.Plugin.IRC
 {
     [Radegast.Plugin(Name = "IRC Relay", Description = "Relays SL group chat to a IRC network", Version = "0.1")]
     public class IRCPlugin : IRadegastPlugin
     {
-        RadegastInstance Instance;
-        GridClient Client { get { return Instance.Client; } }
+        RadegastInstance instance;
+        GridClient Client { get { return instance.Client; } }
 
         ToolStripMenuItem IRCButton;
         int relayNr = 0;
 
         public void StartPlugin(RadegastInstance inst)
         {
-            Instance = inst;
+            instance = inst;
 
             IRCButton = new ToolStripMenuItem("New IRC Relay...");
             IRCButton.Click += new EventHandler(IRCButton_Click);
-            Instance.MainForm.PluginsMenu.DropDownItems.Add(IRCButton);
+            instance.MainForm.PluginsMenu.DropDownItems.Add(IRCButton);
         }
 
         public void StopPlugin(RadegastInstance instance)
         {
             List<RadegastTab> toRemove = new List<RadegastTab>();
-            foreach (RadegastTab tab in Instance.TabConsole.Tabs.Values)
+            foreach (RadegastTab tab in this.instance.TabConsole.Tabs.Values)
             {
                 if (tab.Control is RelayConsole)
                     toRemove.Add(tab);
@@ -79,8 +80,9 @@ namespace Radegast.Plugin.IRC
         {
             relayNr++;
             string tabName = "irc_relay_" + relayNr.ToString();
-            Instance.TabConsole.AddTab(tabName, "IRC Relay " + relayNr.ToString(), new RelayConsole(Instance));
-            Instance.TabConsole.SelectTab(tabName);
+
+            instance.TabConsole.AddTab(tabName, "IRC Relay " + relayNr.ToString(), new RelayConsole(instance));
+            instance.TabConsole.SelectTab(tabName);
         }
     }
 }
index b351b8b..a952372 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
   <PropertyGroup>\r
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>\r
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>\r
     <AppDesignerFolder>Properties</AppDesignerFolder>\r
     <RootNamespace>Radegast.Plugin.IRC</RootNamespace>\r
     <AssemblyName>Radegast.Plugin.IRC</AssemblyName>\r
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\r
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r
     <FileAlignment>512</FileAlignment>\r
+    <FileUpgradeFlags>\r
+    </FileUpgradeFlags>\r
+    <UpgradeBackupLocation>\r
+    </UpgradeBackupLocation>\r
+    <OldToolsVersion>3.5</OldToolsVersion>\r
+    <PublishUrl>publish\</PublishUrl>\r
+    <Install>true</Install>\r
+    <InstallFrom>Disk</InstallFrom>\r
+    <UpdateEnabled>false</UpdateEnabled>\r
+    <UpdateMode>Foreground</UpdateMode>\r
+    <UpdateInterval>7</UpdateInterval>\r
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\r
+    <UpdatePeriodically>false</UpdatePeriodically>\r
+    <UpdateRequired>false</UpdateRequired>\r
+    <MapFileExtensions>true</MapFileExtensions>\r
+    <ApplicationRevision>0</ApplicationRevision>\r
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\r
+    <IsWebBootstrapper>false</IsWebBootstrapper>\r
+    <UseApplicationTrust>false</UseApplicationTrust>\r
+    <BootstrapperEnabled>true</BootstrapperEnabled>\r
+    <TargetFrameworkProfile />\r
   </PropertyGroup>\r
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
     <DebugSymbols>true</DebugSymbols>\r
@@ -39,7 +60,7 @@
     <ErrorReport>prompt</ErrorReport>\r
   </PropertyGroup>\r
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">\r
-    <OutputPath>..\..\bin\Release\</OutputPath>\r
+    <OutputPath>..\..\bin\</OutputPath>\r
     <DefineConstants>TRACE</DefineConstants>\r
     <Optimize>true</Optimize>\r
     <DebugType>pdbonly</DebugType>\r
     <ErrorReport>prompt</ErrorReport>\r
   </PropertyGroup>\r
   <ItemGroup>\r
-    <Reference Include="Meebey.SmartIrc4net, Version=0.4.0.29113, Culture=neutral, processorArchitecture=x86" />\r
+    <Reference Include="Meebey.SmartIrc4net, Version=0.4.0.29113, Culture=neutral, processorArchitecture=x86">\r
+      <SpecificVersion>False</SpecificVersion>\r
+      <HintPath>assemblies\Meebey.SmartIrc4net.dll</HintPath>\r
+    </Reference>\r
     <Reference Include="System" />\r
     <Reference Include="System.Core">\r
       <RequiredTargetFramework>3.5</RequiredTargetFramework>\r
     <None Include="assemblies\Meebey.SmartIrc4net.dll" />\r
   </ItemGroup>\r
   <ItemGroup>\r
-    <ProjectReference Include="..\..\..\libopenmetaverse\OpenMetaverse.StructuredData\OpenMetaverse.StructuredData.csproj">\r
-      <Project>{9532352B-BB4D-463A-A8DE-6B678009CD51}</Project>\r
+    <EmbeddedResource Include="RelayConsole.resx">\r
+      <DependentUpon>RelayConsole.cs</DependentUpon>\r
+    </EmbeddedResource>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="..\..\libopenmetaverse\OpenMetaverse.StructuredData\OpenMetaverse.StructuredData.csproj">\r
+      <Project>{F048B0F0-2A65-4588-A292-9C812FC8F354}</Project>\r
       <Name>OpenMetaverse.StructuredData</Name>\r
     </ProjectReference>\r
-    <ProjectReference Include="..\..\..\libopenmetaverse\OpenMetaverseTypes\OpenMetaverseTypes.csproj">\r
-      <Project>{6EFD681C-F4F1-459F-A059-664A28F234EF}</Project>\r
+    <ProjectReference Include="..\..\libopenmetaverse\OpenMetaverseTypes\OpenMetaverseTypes.csproj">\r
+      <Project>{5F087E42-6E20-4F87-BE86-AEBED154FDEB}</Project>\r
       <Name>OpenMetaverseTypes</Name>\r
     </ProjectReference>\r
-    <ProjectReference Include="..\..\..\libopenmetaverse\OpenMetaverse\OpenMetaverse.csproj">\r
-      <Project>{58072E17-F662-47D2-A2BE-001D026009EA}</Project>\r
+    <ProjectReference Include="..\..\libopenmetaverse\OpenMetaverse\OpenMetaverse.csproj">\r
+      <Project>{1545F87D-D8F6-4CD9-BB01-772389BFBC63}</Project>\r
       <Name>OpenMetaverse</Name>\r
     </ProjectReference>\r
     <ProjectReference Include="..\..\Radegast\Radegast.csproj">\r
-      <Project>{A6D955CD-1F55-459F-A7AD-01E591404989}</Project>\r
+      <Project>{E6CB0CED-4066-41D3-93BF-F922FEE235F9}</Project>\r
       <Name>Radegast</Name>\r
     </ProjectReference>\r
   </ItemGroup>\r
   <ItemGroup>\r
-    <EmbeddedResource Include="RelayConsole.resx">\r
-      <DependentUpon>RelayConsole.cs</DependentUpon>\r
-    </EmbeddedResource>\r
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">\r
+      <Visible>False</Visible>\r
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\r
+      <Install>false</Install>\r
+    </BootstrapperPackage>\r
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">\r
+      <Visible>False</Visible>\r
+      <ProductName>.NET Framework 3.5 SP1</ProductName>\r
+      <Install>true</Install>\r
+    </BootstrapperPackage>\r
   </ItemGroup>\r
+  <ItemGroup />\r
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r
        Other similar extension points exist, see Microsoft.Common.targets.\r
index a564c27..5329c8f 100644 (file)
@@ -28,7 +28,6 @@
         /// </summary>
         private void InitializeComponent()
         {
-            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RelayConsole));
             this.pnlChatLine = new System.Windows.Forms.Panel();
             this.btnSend = new System.Windows.Forms.Button();
             this.cbxInput = new Radegast.ChatInputBox();
             this.label3 = new System.Windows.Forms.Label();
             this.label2 = new System.Windows.Forms.Label();
             this.label1 = new System.Windows.Forms.Label();
+            this.btnDisconnect = new System.Windows.Forms.Button();
             this.scChat = new System.Windows.Forms.SplitContainer();
-            this.rtbChatText = new System.Windows.Forms.RichTextBox();
+            this.rtbChatText = new Radegast.RRichTextBox();
             this.Participants = new Radegast.ListViewNoFlicker();
-            this.tsChatMenu = new System.Windows.Forms.ToolStrip();
-            this.lblConnected = new System.Windows.Forms.ToolStripLabel();
-            this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
-            this.btnConnectPannel = new System.Windows.Forms.ToolStripButton();
-            this.btnDisconnect = new System.Windows.Forms.ToolStripButton();
-            this.ddGroup = new System.Windows.Forms.ToolStripDropDownButton();
             this.pnlChatLine.SuspendLayout();
             this.pnlConnectionSettings.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.scChat)).BeginInit();
             this.scChat.Panel1.SuspendLayout();
             this.scChat.Panel2.SuspendLayout();
             this.scChat.SuspendLayout();
-            this.tsChatMenu.SuspendLayout();
             this.SuspendLayout();
             // 
             // pnlChatLine
@@ -83,8 +77,8 @@
             // 
             // cbxInput
             // 
-            this.cbxInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.cbxInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
             this.cbxInput.Location = new System.Drawing.Point(3, 3);
             this.cbxInput.Name = "cbxInput";
             this.cbxInput.Size = new System.Drawing.Size(638, 20);
             this.pnlConnectionSettings.Controls.Add(this.label3);
             this.pnlConnectionSettings.Controls.Add(this.label2);
             this.pnlConnectionSettings.Controls.Add(this.label1);
+            this.pnlConnectionSettings.Controls.Add(this.btnDisconnect);
             this.pnlConnectionSettings.Dock = System.Windows.Forms.DockStyle.Top;
-            this.pnlConnectionSettings.Location = new System.Drawing.Point(0, 25);
+            this.pnlConnectionSettings.Location = new System.Drawing.Point(0, 0);
             this.pnlConnectionSettings.Name = "pnlConnectionSettings";
             this.pnlConnectionSettings.Size = new System.Drawing.Size(705, 30);
             this.pnlConnectionSettings.TabIndex = 1;
-            this.pnlConnectionSettings.Visible = false;
             // 
             // btnConnect
             // 
             this.txtChan.Name = "txtChan";
             this.txtChan.Size = new System.Drawing.Size(80, 20);
             this.txtChan.TabIndex = 4;
+            this.txtChan.Validated += new System.EventHandler(this.txtChan_Validated);
             // 
             // txtNick
             // 
             this.txtNick.Name = "txtNick";
             this.txtNick.Size = new System.Drawing.Size(61, 20);
             this.txtNick.TabIndex = 3;
+            this.txtNick.Validated += new System.EventHandler(this.txtNick_Validated);
             // 
             // txtPort
             // 
             this.txtPort.Size = new System.Drawing.Size(61, 20);
             this.txtPort.TabIndex = 2;
             this.txtPort.Text = "6667";
+            this.txtPort.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtPort_KeyPress);
+            this.txtPort.Validated += new System.EventHandler(this.txtPort_Validated);
             // 
             // txtServer
             // 
             this.txtServer.Size = new System.Drawing.Size(140, 20);
             this.txtServer.TabIndex = 1;
             this.txtServer.Text = "irc.freenode.net";
+            this.txtServer.Validated += new System.EventHandler(this.txtServer_Validated);
             // 
             // label4
             // 
             this.label1.TabIndex = 0;
             this.label1.Text = "IRC Server";
             // 
+            // btnDisconnect
+            // 
+            this.btnDisconnect.Enabled = false;
+            this.btnDisconnect.Location = new System.Drawing.Point(9, 4);
+            this.btnDisconnect.Name = "btnDisconnect";
+            this.btnDisconnect.Size = new System.Drawing.Size(75, 23);
+            this.btnDisconnect.TabIndex = 11;
+            this.btnDisconnect.Text = "Disconnect";
+            this.btnDisconnect.UseVisualStyleBackColor = true;
+            this.btnDisconnect.Visible = false;
+            this.btnDisconnect.Click += new System.EventHandler(this.btnDisconnect_Click);
+            // 
             // scChat
             // 
             this.scChat.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.scChat.Location = new System.Drawing.Point(0, 55);
+            this.scChat.Location = new System.Drawing.Point(0, 30);
             this.scChat.Name = "scChat";
             // 
             // scChat.Panel1
             // 
             this.scChat.Panel2.Controls.Add(this.Participants);
             this.scChat.Panel2.Enabled = false;
-            this.scChat.Size = new System.Drawing.Size(705, 325);
+            this.scChat.Size = new System.Drawing.Size(705, 350);
             this.scChat.SplitterDistance = 533;
             this.scChat.TabIndex = 2;
             // 
             this.rtbChatText.Location = new System.Drawing.Point(0, 0);
             this.rtbChatText.Name = "rtbChatText";
             this.rtbChatText.ReadOnly = true;
-            this.rtbChatText.Size = new System.Drawing.Size(533, 325);
+            this.rtbChatText.Size = new System.Drawing.Size(533, 350);
             this.rtbChatText.TabIndex = 4;
             this.rtbChatText.Text = "";
             // 
             this.Participants.MultiSelect = false;
             this.Participants.Name = "Participants";
             this.Participants.ShowGroups = false;
-            this.Participants.Size = new System.Drawing.Size(168, 325);
+            this.Participants.Size = new System.Drawing.Size(168, 350);
             this.Participants.Sorting = System.Windows.Forms.SortOrder.Ascending;
             this.Participants.TabIndex = 5;
             this.Participants.UseCompatibleStateImageBehavior = false;
             this.Participants.View = System.Windows.Forms.View.List;
             // 
-            // tsChatMenu
-            // 
-            this.tsChatMenu.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
-            this.tsChatMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.lblConnected,
-            this.toolStripSeparator2,
-            this.btnConnectPannel,
-            this.btnDisconnect,
-            this.ddGroup});
-            this.tsChatMenu.Location = new System.Drawing.Point(0, 0);
-            this.tsChatMenu.Name = "tsChatMenu";
-            this.tsChatMenu.Size = new System.Drawing.Size(705, 25);
-            this.tsChatMenu.TabIndex = 3;
-            this.tsChatMenu.Text = "toolStrip1";
-            // 
-            // lblConnected
-            // 
-            this.lblConnected.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
-            this.lblConnected.Name = "lblConnected";
-            this.lblConnected.Size = new System.Drawing.Size(84, 22);
-            this.lblConnected.Text = "not connected";
-            // 
-            // toolStripSeparator2
-            // 
-            this.toolStripSeparator2.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
-            this.toolStripSeparator2.Name = "toolStripSeparator2";
-            this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);
-            // 
-            // btnConnectPannel
-            // 
-            this.btnConnectPannel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
-            this.btnConnectPannel.Image = ((System.Drawing.Image)(resources.GetObject("btnConnectPannel.Image")));
-            this.btnConnectPannel.ImageTransparentColor = System.Drawing.Color.Magenta;
-            this.btnConnectPannel.Name = "btnConnectPannel";
-            this.btnConnectPannel.Size = new System.Drawing.Size(56, 22);
-            this.btnConnectPannel.Text = "Connect";
-            this.btnConnectPannel.Click += new System.EventHandler(this.btnConnectPannel_Click);
-            // 
-            // btnDisconnect
-            // 
-            this.btnDisconnect.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
-            this.btnDisconnect.Image = ((System.Drawing.Image)(resources.GetObject("btnDisconnect.Image")));
-            this.btnDisconnect.ImageTransparentColor = System.Drawing.Color.Magenta;
-            this.btnDisconnect.Name = "btnDisconnect";
-            this.btnDisconnect.Size = new System.Drawing.Size(70, 22);
-            this.btnDisconnect.Text = "Disconnect";
-            this.btnDisconnect.Click += new System.EventHandler(this.btnDisconnect_Click);
-            // 
-            // ddGroup
-            // 
-            this.ddGroup.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
-            this.ddGroup.Image = ((System.Drawing.Image)(resources.GetObject("ddGroup.Image")));
-            this.ddGroup.ImageTransparentColor = System.Drawing.Color.Magenta;
-            this.ddGroup.Name = "ddGroup";
-            this.ddGroup.Size = new System.Drawing.Size(91, 22);
-            this.ddGroup.Text = "Group (none)";
-            // 
             // RelayConsole
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
             this.Controls.Add(this.scChat);
             this.Controls.Add(this.pnlConnectionSettings);
             this.Controls.Add(this.pnlChatLine);
-            this.Controls.Add(this.tsChatMenu);
             this.Name = "RelayConsole";
             this.Size = new System.Drawing.Size(705, 407);
             this.pnlChatLine.ResumeLayout(false);
             this.pnlConnectionSettings.PerformLayout();
             this.scChat.Panel1.ResumeLayout(false);
             this.scChat.Panel2.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.scChat)).EndInit();
             this.scChat.ResumeLayout(false);
-            this.tsChatMenu.ResumeLayout(false);
-            this.tsChatMenu.PerformLayout();
             this.ResumeLayout(false);
-            this.PerformLayout();
 
         }
 
         private System.Windows.Forms.Panel pnlChatLine;
         private System.Windows.Forms.Panel pnlConnectionSettings;
         private System.Windows.Forms.SplitContainer scChat;
-        private System.Windows.Forms.ToolStrip tsChatMenu;
-        private System.Windows.Forms.ToolStripLabel lblConnected;
-        private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
-        public System.Windows.Forms.RichTextBox rtbChatText;
+        public RRichTextBox rtbChatText;
         public ListViewNoFlicker Participants;
         public ChatInputBox cbxInput;
         public System.Windows.Forms.Button btnSend;
-        private System.Windows.Forms.ToolStripButton btnConnectPannel;
         private System.Windows.Forms.TextBox txtNick;
         private System.Windows.Forms.TextBox txtPort;
         private System.Windows.Forms.TextBox txtServer;
         private System.Windows.Forms.Button btnConnect;
         private System.Windows.Forms.TextBox txtChan;
         private System.Windows.Forms.Label label4;
-        private System.Windows.Forms.ToolStripButton btnDisconnect;
-        private System.Windows.Forms.ToolStripDropDownButton ddGroup;
+        private System.Windows.Forms.Button btnDisconnect;
     }
 }
index 89b841a..1a6f21e 100644 (file)
 //
 // $Id$
 //
+
 using System;
 using System.Collections.Generic;
-using System.ComponentModel;
 using System.Drawing;
-using System.Data;
-using System.Linq;
 using System.Text;
 using System.Text.RegularExpressions;
-using System.Windows.Forms;
 using System.Threading;
-using Radegast;
-using OpenMetaverse;
+using System.Windows.Forms;
 using Meebey.SmartIrc4net;
+using OpenMetaverse;
+using OpenMetaverse.StructuredData;
 
 namespace Radegast.Plugin.IRC
 {
@@ -52,20 +50,72 @@ namespace Radegast.Plugin.IRC
         RichTextBoxPrinter textPrinter;
         private List<string> chatHistory = new List<string>();
         private int chatPointer;
-        bool connecting = false;
+        volatile bool connecting = false;
         UUID relayGroup;
+        public OSDMap config;
 
         public RelayConsole(RadegastInstance instance)
             : base(instance)
         {
             InitializeComponent();
             Disposed += new EventHandler(RelayConsole_Disposed);
+            
             textPrinter = new RichTextBoxPrinter(rtbChatText);
 
+            // Get configuration settings, and initialize if not found.
+            config = instance.GlobalSettings["plugin.irc"] as OSDMap;
+
+            if (config == null)
+            {
+                config = new OSDMap();
+                config["server"] = new OSDString("irc.freenode.net");
+                config["port"] = new OSDInteger(6667);
+                config["nick"] = new OSDString(string.Empty);
+                config["channel"] = new OSDString("#");
+                config["send_delay"] = new OSDInteger(200);
+                config["auto_reconnect"] = new OSDBoolean(true);
+                config["ctcp_version"] = new OSDString("Radegast IRC");
+                instance.GlobalSettings["plugin.irc"] = config;
+            }
+
+            if (!config.ContainsKey("server"))
+            {
+                config["server"] = new OSDString("irc.freenode.net");
+            }
+            if (!config.ContainsKey("port"))
+            {
+                config["port"] = new OSDInteger(6667);
+            }
+            if (!config.ContainsKey("nick"))
+            {
+                config["nick"] = new OSDString(instance.Client.Self.Name);
+            }
+            if (!config.ContainsKey("channel"))
+            {
+                config["channel"] = new OSDString("#");
+            }
+            if (!config.ContainsKey("send_delay"))
+            {
+                config["send_delay"] = new OSDInteger(200);
+            }
+            if (!config.ContainsKey("auto_reconnect"))
+            {
+                config["auto_reconnect"] = new OSDBoolean(true);
+            }
+            if (!config.ContainsKey("ctcp_version"))
+            {
+                config["ctcp_version"] = new OSDString("Radegast IRC");
+            }
+
+            txtChan.Text = config["channel"].AsString();
+            txtNick.Text = config["nick"].AsString();
+            txtPort.Text = config["port"].AsString();
+            txtServer.Text = config["server"].AsString();
+
             irc = new IrcClient();
-            irc.SendDelay = 200;
-            irc.AutoReconnect = true;
-            irc.CtcpVersion = Properties.Resources.RadegastTitle;
+            irc.SendDelay = config["send_delay"].AsInteger();
+            irc.AutoReconnect = config["auto_reconnect"].AsBoolean();
+            irc.CtcpVersion = config["ctcp_version"].AsString();
             irc.Encoding = Encoding.UTF8;
 
             TC.OnTabAdded += new TabsConsole.TabCallback(TC_OnTabAdded);
@@ -78,6 +128,8 @@ namespace Radegast.Plugin.IRC
 
             client.Self.IM += new EventHandler<InstantMessageEventArgs>(Self_IM);
 
+            UpdateGui();
+
             RefreshGroups();
         }
 
@@ -94,6 +146,8 @@ namespace Radegast.Plugin.IRC
             irc.OnConnected -= new EventHandler(irc_OnConnected);
             irc.OnDisconnected -= new EventHandler(irc_OnDisconnected);
 
+            instance.GlobalSettings.Save();
+
             if (irc.IsConnected)
             {
                 irc.AutoReconnect = false;
@@ -121,6 +175,7 @@ namespace Radegast.Plugin.IRC
                 return;
             }
 
+            /*
             ddGroup.DropDownItems.Clear();
 
             bool foundActive = false;
@@ -142,17 +197,18 @@ namespace Radegast.Plugin.IRC
                 relayGroup = UUID.Zero;
                 ddGroup.Text = "Groups (none)";
             }
-
+            */
         }
 
         void groupSelect(object sender, EventArgs e)
         {
+            /*
             if (sender is ToolStripButton)
             {
                 UUID session = new UUID(((ToolStripButton)sender).Name);
                 relayGroup = session;
                 ddGroup.Text = string.Format("Groups ({0})", instance.Groups[session].Name);
-            }
+            }*/
         }
 
         private void PrintMsg(string fromName, string message)
@@ -160,7 +216,10 @@ namespace Radegast.Plugin.IRC
             if (InvokeRequired)
             {
                 if (IsHandleCreated)
+                {
                     BeginInvoke(new MethodInvoker(() => PrintMsg(fromName, message)));
+                }
+
                 return;
             }
 
@@ -191,14 +250,31 @@ namespace Radegast.Plugin.IRC
                 sb.Append(message);
             }
 
-            //instance.LogClientMessage(sessionName + ".txt", sb.ToString());
             textPrinter.PrintTextLine(sb.ToString());
-            sb = null;
         }
 
-        private void btnConnectPannel_Click(object sender, EventArgs e)
+        private void UpdateGui()
         {
-            pnlConnectionSettings.Visible = true;
+            if (InvokeRequired)
+            {
+                if (IsHandleCreated)
+                    Invoke(new MethodInvoker(UpdateGui));
+                return;
+            }
+
+            bool isConnectedOrConnecting = connecting || irc.IsConnected;
+
+            btnSend.Enabled = isConnectedOrConnecting;
+            btnDisconnect.Enabled = isConnectedOrConnecting;
+            btnDisconnect.Visible = isConnectedOrConnecting;
+            btnConnect.Enabled = !isConnectedOrConnecting;
+            btnConnect.Visible = !isConnectedOrConnecting;
+
+            txtChan.ReadOnly = isConnectedOrConnecting;
+            txtNick.ReadOnly = isConnectedOrConnecting;
+            txtPort.ReadOnly = isConnectedOrConnecting;
+            txtServer.ReadOnly = isConnectedOrConnecting;
+            rtbChatText.BackColor = isConnectedOrConnecting ? SystemColors.Window : SystemColors.Control;
         }
 
         private void IrcThread(object param)
@@ -208,33 +284,40 @@ namespace Radegast.Plugin.IRC
             int port = (int)args[1];
             string nick = (string)args[2];
             string chan = (string)args[3];
-
-            connecting = true;
-            PrintMsg("System", "Connecting...");
-
             try
             {
                 irc.Connect(server, port);
                 PrintMsg("System", "Logging in...");
                 irc.Login(nick, "Radegast SL Relay", 0, nick);
-                irc.RfcJoin(chan);
+
                 connecting = false;
-            }
-            catch (Exception ex)
-            {
-                PrintMsg("System", "An error has occured: " + ex.Message);
-            }
+                UpdateGui();
 
-            try
-            {
+                PrintMsg("System", "Joining channel...");
+                irc.RfcJoin(chan);
+
+                PrintMsg("System", "Ready!");
                 irc.Listen();
+
                 if (irc.IsConnected)
                 {
+                    // todo: why disable autoreconnect here?
+                    PrintMsg("System", irc.IsConnected.ToString());
                     irc.AutoReconnect = false;
                     irc.Disconnect();
                 }
             }
-            catch { }
+            catch (Exception ex)
+            {
+                connecting = false;
+                PrintMsg("System", "An error has occured: " + ex.Message);
+            }
+
+            if (irc.IsConnected)
+            {
+                irc.Disconnect();
+            }
+            UpdateGui();
         }
 
         private void btnConnect_Click(object sender, EventArgs e)
@@ -251,13 +334,39 @@ namespace Radegast.Plugin.IRC
                 return;
             }
 
+            PrintMsg("System", "Connecting...");
+            connecting = true;
+            UpdateGui();
 
-            Thread IRCConnection = new Thread(new ParameterizedThreadStart(IrcThread));
-            IRCConnection.Name = "IRC Thread";
-            IRCConnection.IsBackground = true;
-            int port = 6667;
-            int.TryParse(txtPort.Text, out port);
-            IRCConnection.Start(new object[] { txtServer.Text, port, txtNick.Text, txtChan.Text });
+            try
+            {
+                Thread IRCConnection = new Thread(new ParameterizedThreadStart(IrcThread));
+                IRCConnection.Name = "IRC Thread";
+                IRCConnection.IsBackground = true;
+                int port = 6667;
+                int.TryParse(txtPort.Text, out port);
+                IRCConnection.Start(new object[] { txtServer.Text, port, txtNick.Text, txtChan.Text });
+            }
+            catch (Exception ex)
+            {
+                if (irc.IsConnected)
+                {
+                    irc.Disconnect();
+                }
+                PrintMsg("System", "Failed: " + ex.Message);
+
+                connecting = false;
+                UpdateGui();
+            }
+        }
+
+        private void btnDisconnect_Click(object sender, EventArgs e)
+        {
+            if (irc.IsConnected)
+            {
+                irc.AutoReconnect = false;
+                irc.Disconnect();
+            }
         }
 
         void irc_OnRawMessage(object sender, IrcEventArgs e)
@@ -280,8 +389,7 @@ namespace Radegast.Plugin.IRC
                 return;
             }
 
-            lblConnected.Text = "not connected";
-            btnSend.Enabled = false;
+            UpdateGui();
         }
 
         void irc_OnConnected(object sender, EventArgs e)
@@ -292,9 +400,8 @@ namespace Radegast.Plugin.IRC
                     Invoke(new MethodInvoker(() => irc_OnConnected(sender, e)));
                 return;
             }
-            lblConnected.Text = "connected";
-            pnlConnectionSettings.Visible = false;
-            btnSend.Enabled = true;
+
+            UpdateGui();
         }
 
         void irc_OnChannelMessage(object sender, IrcEventArgs e)
@@ -338,15 +445,6 @@ namespace Radegast.Plugin.IRC
             }
         }
 
-        private void btnDisconnect_Click(object sender, EventArgs e)
-        {
-            if (irc.IsConnected)
-            {
-                irc.AutoReconnect = false;
-                irc.Disconnect();
-            }
-        }
-
         void SendMsg()
         {
             string msg = cbxInput.Text;
@@ -416,5 +514,33 @@ namespace Radegast.Plugin.IRC
         {
             SendMsg();
         }
+
+        private void txtServer_Validated(object sender, EventArgs e)
+        {
+            config["server"] = new OSDString(txtServer.Text);
+        }
+
+        private void txtPort_Validated(object sender, EventArgs e)
+        {
+            int port = 6667;
+            int.TryParse(txtPort.Text, out port);
+
+            config["port"] = new OSDInteger(port);
+        }
+
+        private void txtChan_Validated(object sender, EventArgs e)
+        {
+            config["channel"] = new OSDString(txtChan.Text);
+        }
+
+        private void txtNick_Validated(object sender, EventArgs e)
+        {
+            config["nick"] = new OSDString(txtNick.Text);
+        }
+
+        private void txtPort_KeyPress(object sender, KeyPressEventArgs e)
+        {
+            e.Handled = !char.IsNumber(e.KeyChar);
+        }
     }
 }
index 78da642..c7e0d4b 100644 (file)
     <value>2.0</value>\r
   </resheader>\r
   <resheader name="reader">\r
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
   </resheader>\r
   <resheader name="writer">\r
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
   </resheader>\r
-  <metadata name="tsChatMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
-    <value>17, 17</value>\r
-  </metadata>\r
-  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />\r
-  <data name="btnConnectPannel.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
-    <value>\r
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
-        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI\r
-        ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9\r
-        HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN\r
-        rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K\r
-        TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx\r
-        oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8\r
-        7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI\r
-        xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX\r
-        LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd\r
-        KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC\r
-</value>\r
-  </data>\r
-  <data name="btnDisconnect.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
-    <value>\r
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
-        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI\r
-        ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9\r
-        HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN\r
-        rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K\r
-        TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx\r
-        oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8\r
-        7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI\r
-        xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX\r
-        LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd\r
-        KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC\r
-</value>\r
-  </data>\r
-  <data name="ddGroup.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
-    <value>\r
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
-        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI\r
-        ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9\r
-        HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN\r
-        rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K\r
-        TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx\r
-        oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8\r
-        7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI\r
-        xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX\r
-        LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd\r
-        KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC\r
-</value>\r
-  </data>\r
 </root>
\ No newline at end of file