コード例 #1
0
ファイル: IrcChannelViewModel.cs プロジェクト: schwarz/handle
        public void Query(IrcChannelUser user)
        {
            IrcQueryViewModel ipcvm = null;

            foreach (var item in (this.Parent as IrcNetworkViewModel).Items)
            {
                if (item.DisplayName == user.User.NickName)
                {
                    ipcvm = item;
                }
            }

            if (ipcvm == null)
            {
                ipcvm = new IrcQueryViewModel(user.User, this.Channel.Client, this.Settings);
                (this.Parent as IrcNetworkViewModel).Items.Add(ipcvm);
            }

            (this.Parent as IrcNetworkViewModel).ActivateItem(ipcvm);
        }
コード例 #2
0
ファイル: IrcNetworkViewModel.cs プロジェクト: schwarz/handle
        private void localUserMessageReceived(object sender, IrcMessageEventArgs e)
        {
            IrcQueryViewModel ipcvm = null;

            foreach (var item in this.Items)
            {
                if (item.DisplayName == e.Source.Name)
                {
                    ipcvm = item;
                }
            }

            if (ipcvm == null)
            {
                ipcvm = new IrcQueryViewModel(e.Source as IrcUser, this.Client, this.Settings);
                this.Items.Add(ipcvm);
                ipcvm.Messages.Add(new Message(e.Text,
                                               DateTime.Now.ToString(this.Settings.TimestampFormat),
                                               e.Source.Name, MessageLevels.Private));
            }
        }
コード例 #3
0
ファイル: IrcChannelViewModel.cs プロジェクト: schwarz/handle
        public void Send()
        {
            // TODO Ignore adjacent duplicates
            this.personalHistory.Add(this.Message);
            this.historyIndex = -1;

            if (this.Message[0] != '/')
            {
                // Regular message
                this.Channel.Client.LocalUser.SendMessage(this.Channel, this.Message);
                Message m = new Message(this.Message.Trim(),
                                        DateTime.Now.ToString(this.Settings.TimestampFormat),
                                        this.Channel.Client.LocalUser.NickName,
                                        MessageLevels.Public);
                this.Messages.Add(m);
                if (this.Settings.CanLog && this.logger != null)
                {
                    logger.Append(string.Format("{0} {1}: {2}", m.Received, m.Sender, m.Text));
                }
                this.Message = string.Empty;
                return;
            }

            string command;

            string[] args;

            this.Message = this.Message.TrimEnd(' ');
            if (this.Message.Contains(" "))
            {
                command = this.Message.Substring(1, this.Message.IndexOf(' ') - 1).ToLower();
                args    = this.Message.Substring(this.Message.IndexOf(' '), this.Message.Length - command.Length - 1)
                          .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            }
            else
            {
                command = this.Message.Substring(1, this.Message.Length - 1);
                args    = new string[] { };
            }

            IrcNetworkViewModel invm = (IrcNetworkViewModel)this.Parent;
            IrcMainViewModel    imvm = (IrcMainViewModel)invm.Parent;

            switch (command)
            {
            // TODO No such nick
            case "help":
                // TODO "/help command"
                this.Messages.Add(new Message("Helptext.",
                                              DateTime.Now.ToString(this.Settings.TimestampFormat), "=!=",
                                              MessageLevels.Clientside));
                break;

            case "join":
            case "j":
                if (args.Length == 1)
                {
                    this.Channel.Client.Channels.Join(args[0]);
                }
                else if (args.Length == 2)
                {
                    this.Channel.Client.Channels.Join(args[0], args[1]);
                }
                else
                {
                    this.Messages.Add(new Message(string.Format("Invalid number of arguments for the command \"{0}\"!", command),
                                                  DateTime.Now.ToString(this.Settings.TimestampFormat), "=!=",
                                                  MessageLevels.Clientside));
                }
                break;

            case "whois":
                this.WhoIs(args[0]);
                break;

            case "clear":
                this.ClearMessages();
                break;

            case "complete":
                if (args[0] == "-d" || args[0] == "--delete")
                {
                    this.Settings.Completions.Remove(args[1]);
                }
                else
                {
                    this.Settings.Completions[args[0]] = string.Join(" ", args.Range(1, -1));
                }
                this.Settings.Save();
                break;

            case "disconnect":
                imvm.CloseItem(invm);
                break;

            case "part":
                if (args.Length < 2)
                {
                    invm.CloseItem(this);
                }
                else
                {
                    for (int i = 0; i < args.Length; i++)
                    {
                        for (int y = 1; y < invm.Items.Count; y++)
                        {
                            IrcChannelViewModel icvm = invm.Items[y];
                            if (icvm.DisplayName == args[i].ToString())
                            {
                                invm.CloseItem(icvm);
                            }
                        }
                    }
                }
                break;

            case "msg":
                IrcQueryViewModel ipcvm  = null;
                IrcUser           target = null;

                var message = string.Join(" ", args.Range(1, -1));

                foreach (var u in this.Channel.Users)
                {
                    if (u.User.NickName == args[0])
                    {
                        target = u.User;
                        break;
                    }
                }

                if (target == null)
                {
                    this.Messages.Add(new Message("User does not exist!",
                                                  DateTime.Now.ToString(this.Settings.TimestampFormat),
                                                  "=!=",
                                                  MessageLevels.Clientside, MessageLevels.Error));
                    return;
                }

                foreach (var item in (this.Parent as IrcNetworkViewModel).Items)
                {
                    if (item.DisplayName == args[0])
                    {
                        ipcvm = item;
                    }
                }

                if (ipcvm == null)
                {
                    ipcvm = new IrcQueryViewModel(target, this.Channel.Client, this.Settings);
                    (this.Parent as IrcNetworkViewModel).Items.Add(ipcvm);
                }

                (this.Parent as IrcNetworkViewModel).ActivateItem(ipcvm);

                this.Channel.Client.LocalUser.SendMessage(args[0], message);

                ipcvm.Messages.Add(new Message(message,
                                               DateTime.Now.ToString(this.Settings.TimestampFormat),
                                               target.NickName, MessageLevels.Private));

                break;

            case "nick":
                switch (args.Length)
                {
                case 0:
                    this.Messages.Add(new Message("You are " + this.Channel.Client.LocalUser.NickName + ".",
                                                  DateTime.Now.ToString(this.Settings.TimestampFormat),
                                                  "=!=", MessageLevels.Clientside));
                    break;

                case 1:
                    this.Channel.Client.LocalUser.SetNickName(args[0]);
                    this.Messages.Add(new Message("Changed nick to " + args[0] + ".",
                                                  DateTime.Now.ToString(this.Settings.TimestampFormat),
                                                  "=!=", MessageLevels.Clientside));
                    break;

                default:
                    this.Messages.Add(new Message("Invalid number of arguments for command '/nick'.",
                                                  DateTime.Now.ToString(this.Settings.TimestampFormat),
                                                  "=!=", MessageLevels.Clientside, MessageLevels.Error));
                    break;
                }
                break;

            case "quit":
                for (int i = 0; i < invm.Items.Count; i++)
                {
                    IrcNetworkViewModel net = invm.Items[i];
                    imvm.CloseItem(net);
                }
                break;

            case "motd":
                this.Messages.Add(new Message(this.Channel.Client.MessageOfTheDay,
                                              DateTime.Now.ToString(this.Settings.TimestampFormat), "=!=",
                                              MessageLevels.Clientside));
                break;

            case "names":
                //TODO Nachrichten haben keinen Zeilenumbruch, wenn zu lange
                string users = "";
                foreach (IrcChannelUser iu in this.Users)
                {
                    users += iu.User.NickName + ",";
                }
                this.Messages.Add(new Message(users,
                                              DateTime.Now.ToString(this.Settings.TimestampFormat), "=!=",
                                              MessageLevels.Clientside));
                break;

            default:
                this.Messages.Add(new Message(string.Format("Unknown command \"{0}\".", command),
                                              DateTime.Now.ToString(this.Settings.TimestampFormat),
                                              "=!=",
                                              MessageLevels.Clientside, MessageLevels.Error));
                break;
            }
            this.Message = string.Empty;
        }
コード例 #4
0
ファイル: IrcChannelViewModel.cs プロジェクト: schwarz/handle
        public void Send()
        {
            // TODO Ignore adjacent duplicates
              this.personalHistory.Add(this.Message);
              this.historyIndex = -1;

              if (this.Message[0] != '/')
              {
            // Regular message
            this.Channel.Client.LocalUser.SendMessage(this.Channel, this.Message);
            Message m = new Message(this.Message.Trim(),
                                DateTime.Now.ToString(this.Settings.TimestampFormat),
                                this.Channel.Client.LocalUser.NickName,
                                MessageLevels.Public);
            this.Messages.Add(m);
            if (this.Settings.CanLog && this.logger != null)
              logger.Append(string.Format("{0} {1}: {2}", m.Received, m.Sender, m.Text));
            this.Message = string.Empty;
            return;
              }

              string command;
              string[] args;

              this.Message = this.Message.TrimEnd(' ');
              if (this.Message.Contains(" "))
              {
            command = this.Message.Substring(1, this.Message.IndexOf(' ') - 1).ToLower();
            args = this.Message.Substring(this.Message.IndexOf(' '), this.Message.Length - command.Length - 1)
                                  .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
              }
              else
              {
            command = this.Message.Substring(1, this.Message.Length - 1);
            args = new string[] { };
              }

              IrcNetworkViewModel invm = (IrcNetworkViewModel)this.Parent;
              IrcMainViewModel imvm = (IrcMainViewModel)invm.Parent;
              switch (command)
              {
            // TODO No such nick
            case "help":
              // TODO "/help command"
              this.Messages.Add(new Message("Helptext.",
                                        DateTime.Now.ToString(this.Settings.TimestampFormat), "=!=",
                                        MessageLevels.Clientside));
              break;
            case "join":
            case "j":
              if (args.Length == 1)
              {
            this.Channel.Client.Channels.Join(args[0]);
              }
              else if (args.Length == 2)
              {
            this.Channel.Client.Channels.Join(args[0], args[1]);
              }
              else
              {
            this.Messages.Add(new Message(string.Format("Invalid number of arguments for the command \"{0}\"!", command),
                                        DateTime.Now.ToString(this.Settings.TimestampFormat), "=!=",
                                        MessageLevels.Clientside));
              }
              break;
            case "whois":
              this.WhoIs(args[0]);
              break;
            case "clear":
              this.ClearMessages();
              break;
            case "complete":
              if (args[0] == "-d" || args[0] == "--delete")
              {
            this.Settings.Completions.Remove(args[1]);
              }
              else
              {
            this.Settings.Completions[args[0]] = string.Join(" ", args.Range(1, -1));
              }
              this.Settings.Save();
              break;
            case "disconnect":
              imvm.CloseItem(invm);
              break;
            case "part":
              if (args.Length < 2)
              {
            invm.CloseItem(this);
              }
              else
              {
            for (int i = 0; i < args.Length; i++)
            {
              for (int y = 1; y < invm.Items.Count; y++)
              {
                IrcChannelViewModel icvm = invm.Items[y];
                if (icvm.DisplayName == args[i].ToString())
                  invm.CloseItem(icvm);
              }
            }
              }
              break;
            case "msg":
              IrcQueryViewModel ipcvm = null;
              IrcUser target = null;

              var message = string.Join(" ", args.Range(1, -1));

              foreach (var u in this.Channel.Users)
              {
            if (u.User.NickName == args[0])
            {
              target = u.User;
              break;
            }
              }

              if (target == null)
              {
            this.Messages.Add(new Message("User does not exist!",
                                          DateTime.Now.ToString(this.Settings.TimestampFormat),
                                          "=!=",
                                          MessageLevels.Clientside, MessageLevels.Error));
            return;
              }

              foreach (var item in (this.Parent as IrcNetworkViewModel).Items)
              {
            if (item.DisplayName == args[0])
            {
              ipcvm = item;
            }
              }

              if (ipcvm == null)
              {
            ipcvm = new IrcQueryViewModel(target, this.Channel.Client, this.Settings);
            (this.Parent as IrcNetworkViewModel).Items.Add(ipcvm);
              }

              (this.Parent as IrcNetworkViewModel).ActivateItem(ipcvm);

              this.Channel.Client.LocalUser.SendMessage(args[0], message);

              ipcvm.Messages.Add(new Message(message,
                              DateTime.Now.ToString(this.Settings.TimestampFormat),
                              target.NickName, MessageLevels.Private));

              break;
            case "nick":
              switch (args.Length)
              {
            case 0:
              this.Messages.Add(new Message("You are " + this.Channel.Client.LocalUser.NickName + ".",
                                            DateTime.Now.ToString(this.Settings.TimestampFormat),
                                            "=!=", MessageLevels.Clientside));
              break;
            case 1:
              this.Channel.Client.LocalUser.SetNickName(args[0]);
              this.Messages.Add(new Message("Changed nick to " + args[0] + ".",
                                            DateTime.Now.ToString(this.Settings.TimestampFormat),
                                            "=!=", MessageLevels.Clientside));
              break;
            default:
              this.Messages.Add(new Message("Invalid number of arguments for command '/nick'.",
                                            DateTime.Now.ToString(this.Settings.TimestampFormat),
                                            "=!=", MessageLevels.Clientside, MessageLevels.Error));
              break;
              }
              break;
            case "quit":
              for (int i = 0; i < invm.Items.Count; i++)
              {
            IrcNetworkViewModel net = invm.Items[i];
            imvm.CloseItem(net);
              }
              break;
            case "motd":
              this.Messages.Add(new Message(this.Channel.Client.MessageOfTheDay,
                                        DateTime.Now.ToString(this.Settings.TimestampFormat), "=!=",
                                        MessageLevels.Clientside));
              break;
            case "names":
              //TODO Nachrichten haben keinen Zeilenumbruch, wenn zu lange
              string users = "";
              foreach (IrcChannelUser iu in this.Users)
              {
            users += iu.User.NickName + ",";
              }
              this.Messages.Add(new Message(users,
                                        DateTime.Now.ToString(this.Settings.TimestampFormat), "=!=",
                                        MessageLevels.Clientside));
              break;
            default:
              this.Messages.Add(new Message(string.Format("Unknown command \"{0}\".", command),
                                        DateTime.Now.ToString(this.Settings.TimestampFormat),
                                        "=!=",
                                        MessageLevels.Clientside, MessageLevels.Error));
              break;
              }
              this.Message = string.Empty;
        }
コード例 #5
0
ファイル: IrcChannelViewModel.cs プロジェクト: schwarz/handle
        public void Query(IrcChannelUser user)
        {
            IrcQueryViewModel ipcvm = null;
              foreach (var item in (this.Parent as IrcNetworkViewModel).Items)
              {
            if (item.DisplayName == user.User.NickName)
            {
              ipcvm = item;
            }
              }

              if (ipcvm == null)
              {
            ipcvm = new IrcQueryViewModel(user.User, this.Channel.Client, this.Settings);
            (this.Parent as IrcNetworkViewModel).Items.Add(ipcvm);
              }

              (this.Parent as IrcNetworkViewModel).ActivateItem(ipcvm);
        }