smuxi-halfop.patch

enable halfop in smuxi - Redmine Admin, 12/04/2008 10:31 PM

Download (9.6 KB)

 
smuxi-0.6.2/src/Engine-IRC/Protocols/Irc/IrcGroupPersonModel.cs 2008-12-04 17:44:46.000000000 +0100
39 39
        private static readonly log4net.ILog _Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
40 40
#endif
41 41
        private bool _IsOp;
42
        private bool _IsHalfop;
42 43
        private bool _IsVoice;
43 44
        
44 45
        public bool IsOp {
......
50 51
            }
51 52
        }
52 53

  
54
        public bool IsHalfop {
55
            get {
56
                return _IsHalfop;
57
            }
58
            internal set {
59
                _IsHalfop = value;
60
            }
61
        }
62

  
53 63
        public bool IsVoice {
54 64
            get {
55 65
                return _IsVoice;
......
88 98
            base.GetObjectData(sw);
89 99

  
90 100
            sw.Write(_IsOp);
101
            sw.Write(_IsHalfop);
91 102
            sw.Write(_IsVoice);
92 103
        }
93 104

  
......
99 110
            
100 111
            base.SetObjectData(sr);
101 112
            
102
            _IsOp    = sr.ReadBoolean();
103
            _IsVoice = sr.ReadBoolean();
113
            _IsOp     = sr.ReadBoolean();
114
            _IsHalfop = sr.ReadBoolean();
115
            _IsVoice  = sr.ReadBoolean();
104 116
        }
105 117
    }
106 118
}
smuxi-0.6.2/src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs 2008-12-04 17:55:52.000000000 +0100
153 153
            _IrcClient.OnNickChange     += new NickChangeEventHandler(_OnNickChange);
154 154
            _IrcClient.OnOp             += new OpEventHandler(_OnOp);
155 155
            _IrcClient.OnDeop           += new DeopEventHandler(_OnDeop);
156
            _IrcClient.OnHalfop         += new HalfopEventHandler(_OnHalfop);
157
            _IrcClient.OnDehalfop       += new DehalfopEventHandler(_OnDehalfop);
156 158
            _IrcClient.OnVoice          += new VoiceEventHandler(_OnVoice);
157 159
            _IrcClient.OnDevoice        += new DevoiceEventHandler(_OnDevoice);
158 160
            _IrcClient.OnModeChange     += new IrcEventHandler(_OnModeChange);
......
548 550
                            CommandDeop(command);
549 551
                            handled = true;
550 552
                            break;
553
                        case "halfop":
554
                            CommandHalfop(command);
555
                            handled = true;
556
                            break;
557
                        case "dehalfop":
558
                            CommandDehalfop(command);
559
                            handled = true;
560
                            break;
551 561
                        case "voice":
552 562
                            CommandVoice(command);
553 563
                            handled = true;
......
661 671
            "devoice nick",
662 672
            "op nick",
663 673
            "deop nick",
674
            "halfop nick",
675
            "dehalfop nick",
664 676
            "nick newnick",
665 677
            "ctcp destination command [data]",
666 678
            "raw/quote irccommand",
......
1019 1031
                    mode = _("IRC Op");
1020 1032
                } else if (info.IsOp) {
1021 1033
                    mode = _("Op");
1034
                } else if (info.IsHalfop) {
1035
                    mode = _("Halfop");
1022 1036
                } else if (info.IsVoice) {
1023 1037
                    mode = _("Voice");
1024 1038
                } else {
......
1113 1127
            }
1114 1128
        }
1115 1129

  
1130
        public void CommandHalfop(CommandModel cd)
1131
        {
1132
            ChatModel chat = cd.FrontendManager.CurrentChat;
1133
            string channel = chat.ID;
1134
            if (cd.DataArray.Length == 2) {
1135
                _IrcClient.Halfop(channel, cd.Parameter);
1136
            } else if (cd.DataArray.Length > 2) {
1137
                string[] candidates = cd.Parameter.TrimEnd().Split(new char[] {' '});
1138
                foreach (string nick in candidates) {
1139
                    _IrcClient.Halfop(channel, nick);
1140
                }
1141
                /*
1142
                // requires SmartIrc4net >= 0.4.6
1143
                _IrcClient.Halfop(channel, candidates);
1144
                */
1145
            } else {
1146
                _NotEnoughParameters(cd);
1147
            }
1148
        }
1149
    
1150
        public void CommandDehalfop(CommandModel cd)
1151
        {
1152
            ChatModel chat = cd.FrontendManager.CurrentChat;
1153
            string channel = chat.ID;
1154
            if (cd.DataArray.Length == 2) {
1155
                _IrcClient.Dehalfop(channel, cd.Parameter);
1156
            } else if (cd.DataArray.Length > 2) {
1157
                string[] candidates = cd.Parameter.TrimEnd().Split(new char[] {' '});
1158
                foreach(string nick in candidates) {
1159
                    _IrcClient.Dehalfop(channel, nick);
1160
                }
1161
            } else {
1162
                _NotEnoughParameters(cd);
1163
            }
1164
        }
1165

  
1116 1166
        public void CommandVoice(CommandModel cd)
1117 1167
        {
1118 1168
            ChatModel chat = cd.FrontendManager.CurrentChat;
......
2361 2411
#endif
2362 2412
            }
2363 2413
        }
2414

  
2415
        private void _OnHalfop(object sender, HalfopEventArgs e)
2416
        {
2417
            GroupChatModel cchat = (GroupChatModel)GetChat(e.Channel, ChatType.Group);
2418
            IrcGroupPersonModel user = (IrcGroupPersonModel)cchat.GetPerson(e.Whom);
2419
            if (user != null) {
2420
                user.IsHalfop = true;
2421
                Session.UpdatePersonInGroupChat(cchat, user, user);
2422
#if LOG4NET
2423
            } else {
2424
                _Logger.Error("_OnHalfop(): cchat.GetPerson(e.Whom) returned null! cchat.Name: "+cchat.Name+" e.Whom: "+e.Whom);
2425
#endif
2426
            }
2427
        }
2428
        
2429
        private void _OnDehalfop(object sender, DehalfopEventArgs e)
2430
        {
2431
            GroupChatModel cchat = (GroupChatModel)GetChat(e.Channel, ChatType.Group);
2432
            IrcGroupPersonModel user = (IrcGroupPersonModel)cchat.GetPerson(e.Whom);
2433
            if (user != null) {
2434
                user.IsHalfop = false;
2435
                Session.UpdatePersonInGroupChat(cchat, user, user);
2436
#if LOG4NET
2437
            } else {
2438
                _Logger.Error("_OnDehalfop(): cchat.GetPerson(e.Whom) returned null! cchat.Name: "+cchat.Name+" e.Whom: "+e.Whom);
2439
#endif
2440
            }
2441
        }
2364 2442
        
2365 2443
        private void _OnVoice(object sender, VoiceEventArgs e)
2366 2444
        {
smuxi-0.6.2/src/Frontend-GNOME-IRC/IrcGroupChatView.cs 2008-12-04 17:42:30.000000000 +0100
60 60
                deop_item.Activated += new EventHandler(_OnUserListMenuDeopActivated);
61 61
                PersonMenu.Append(deop_item);
62 62
                
63
                Gtk.ImageMenuItem halfop_item = new Gtk.ImageMenuItem(_("Halfop"));
64
                halfop_item.Activated += new EventHandler(_OnUserListMenuHalfopActivated);
65
                PersonMenu.Append(halfop_item);
66

  
67
                Gtk.ImageMenuItem dehalfop_item = new Gtk.ImageMenuItem(_("Dehalfop"));
68
                dehalfop_item.Activated += new EventHandler(_OnUserListMenuDehalfopActivated);
69
                PersonMenu.Append(dehalfop_item);
70
                
63 71
                Gtk.ImageMenuItem voice_item = new Gtk.ImageMenuItem(_("Voice"));
64 72
                voice_item.Activated += new EventHandler(_OnUserListMenuVoiceActivated);
65 73
                PersonMenu.Append(voice_item);
......
135 143
            string mode;
136 144
            if (person.IsOp) {
137 145
                mode = "@";
146
            } elseif (person.IsHalfop) {
147
                mode = "%";
138 148
            } else if (person.IsVoice) {
139 149
                mode = "+";
140 150
            } else {
......
188 198
                )
189 199
            );
190 200
        }
201

  
202
        private void _OnUserListMenuHalfopActivated(object sender, EventArgs e)
203
        {
204
            Trace.Call(sender, e);
205
            
206
            IList<PersonModel> persons = GetSelectedPersons();
207
            if (persons == null) {
208
                return;
209
            }
210

  
211
            // do smart mode changes
212
            List<string> nicks = new List<string>(); 
213
            foreach (PersonModel person in persons) {
214
                nicks.Add(person.ID);
215
            }
216
            _IrcProtocolManager.CommandHalfop(
217
                new CommandModel(
218
                    Frontend.FrontendManager,
219
                    ChatModel,
220
                    String.Join(" ", nicks.ToArray())
221
                )
222
            );
223
        } 
224
        
225
        private void _OnUserListMenuDehalfopActivated(object sender, EventArgs e)
226
        {
227
            Trace.Call(sender, e);
228
            
229
            IList<PersonModel> persons = GetSelectedPersons();
230
            if (persons == null) {
231
                return;
232
            }
233

  
234
            // do smart mode changes
235
            List<string> nicks = new List<string>(); 
236
            foreach (PersonModel person in persons) {
237
                nicks.Add(person.ID);
238
            }
239
            _IrcProtocolManager.CommandDehalfop(
240
                new CommandModel(
241
                    Frontend.FrontendManager,
242
                    ChatModel,
243
                    String.Join(" ", nicks.ToArray())
244
                )
245
            );
246
        }
191 247
        
192 248
        private void _OnUserListMenuVoiceActivated(object sender, EventArgs e)
193 249
        {