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 |
{
|