smuxi-halfop.patch
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 |
{ |