Viewing Issue Advanced Details

ID 0001917 Category [DMDirc] User Interface Severity minor
Reproducibility always Date Submitted 2008-10-01 19:59 Last Update 2009-08-10 11:22
Reporter ChrisNorthwood Assigned To MD87 View Status public
Priority normal Status closed Resolution fixed
Platform Fixed in Version Target Version 0.6.3m2
Product Version 0.6 Product Build
Summary 0001917: Channel onotices should appear in the channel window
Description
Notices directed at channel operators (sent in the form /notice @#foo bar) should display in the channel window for that channel, not the status window.
Steps To Reproduce Get an additional client to send NOTICE @#channel :foo bar
17:20:32 | -[Chiumi!bots@animebots.co.uk:@#animebots]- @ [QS]Inkblot (Inkblot) requires your help. (or similar) appears in the status window, not the channel window.
Needs unit test no
Upstream Bug URL

Relationships

depends on 0001816closedDataforce Parser support for opnotices 

Notes

(0007084)
Dataforce (administrator)
2009-07-03 20:57

Parser Support has been added in the form of ChannelModeNotice and ChannelModeMessage callbacks.
authorChris Smith <chris@dmdirc.com>2009-07-21 18:21:15 (GMT)
commit142274dae255276ee179942fc632ee344034e2ee (patch) (side-by-side diff)
Add support for channel mode notices (e.g. opnotice). Fixes issue 1917.
-rw-r--r--src/com/dmdirc/ChannelEventHandler.java30
-rw-r--r--src/com/dmdirc/actions/CoreActionType.java2
-rw-r--r--src/com/dmdirc/actions/metatypes/ChannelEvents.java2
-rw-r--r--src/com/dmdirc/config/defaults/default/formatter10
-rw-r--r--src/com/dmdirc/parser/interfaces/callbacks/ChannelModeMessageListener.java1
-rw-r--r--src/com/dmdirc/parser/interfaces/callbacks/ChannelModeNoticeListener.java1
6 files changed, 38 insertions, 8 deletions
Click to Expand/Collapse
diff src/com/dmdirc/ChannelEventHandler.java
@@ -29,7 +29,6 @@ import com.dmdirc.parser.interfaces.ChannelInfo;
import com.dmdirc.parser.interfaces.ClientInfo;
import com.dmdirc.parser.interfaces.Parser;
import com.dmdirc.parser.common.CallbackManager;
-import com.dmdirc.parser.common.CallbackNotFoundException;
import com.dmdirc.parser.interfaces.callbacks.*;
/**
@@ -38,10 +37,12 @@ import com.dmdirc.parser.interfaces.callbacks.*;
* @author chris
*/
public final class ChannelEventHandler extends EventHandler implements
- ChannelMessageListener, ChannelNamesListener, ChannelTopicListener, ChannelJoinListener,
- ChannelPartListener, ChannelKickListener, ChannelQuitListener, ChannelActionListener,
- ChannelNickChangeListener, ChannelModeChangeListener, ChannelUserModeChangeListener,
- ChannelCtcpListener, OtherAwayStateListener, ChannelNoticeListener, ChannelNonUserModeChangeListener {
+ ChannelMessageListener, ChannelNamesListener, ChannelTopicListener,
+ ChannelJoinListener, ChannelPartListener, ChannelKickListener,
+ ChannelQuitListener, ChannelActionListener, ChannelNickChangeListener,
+ ChannelModeChangeListener, ChannelUserModeChangeListener,
+ ChannelCtcpListener, OtherAwayStateListener, ChannelNoticeListener,
+ ChannelNonUserModeChangeListener, ChannelModeNoticeListener {
/** The channel that owns this event handler. */
private final Channel owner;
@@ -60,8 +61,8 @@ public final class ChannelEventHandler extends EventHandler implements
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
@Override
- protected <T extends CallbackInterface> void addCallback(
- final CallbackManager cbm, final Class<T> type) throws CallbackNotFoundException {
+ protected <T extends CallbackInterface> void addCallback(final CallbackManager cbm,
+ final Class<T> type) {
if (OtherAwayStateListener.class.equals(type)) {
cbm.addCallback(type, (T) this);
} else {
@@ -278,7 +279,9 @@ public final class ChannelEventHandler extends EventHandler implements
/** {@inheritDoc} */
@Override
- public void onChannelNonUserModeChanged(Parser tParser, ChannelInfo cChannel, ChannelClientInfo cChannelClient, String sHost, String sModes) {
+ public void onChannelNonUserModeChanged(final Parser tParser,
+ final ChannelInfo cChannel, final ChannelClientInfo cChannelClient,
+ final String sHost, final String sModes) {
checkParser(tParser);
if (owner.getConfigManager().getOptionBool("channel", "splitusermodes")
@@ -297,4 +300,15 @@ public final class ChannelEventHandler extends EventHandler implements
owner.refreshClients();
}
+ /** {@inheritDoc} */
+ @Override
+ public void onChannelModeNotice(final Parser tParser, final char prefix,
+ final ChannelInfo cChannel, final ChannelClientInfo cChannelClient,
+ final String sMessage, final String sHost) {
+ checkParser(tParser);
+
+ owner.doNotification("channelModeMessage", CoreActionType.CHANNEL_MODE_NOTICE,
+ cChannelClient, String.valueOf(prefix), sMessage);
+ }
+
}
Click to Expand/Collapse
diff src/com/dmdirc/actions/CoreActionType.java
@@ -150,6 +150,8 @@ public enum CoreActionType implements ActionType {
CHANNEL_ACTION(ChannelEvents.CHANNEL_SOURCED_EVENT_WITH_ARG, "Channel action received"),
/** Channel notice received. */
CHANNEL_NOTICE(ChannelEvents.CHANNEL_SOURCED_EVENT_WITH_ARG, "Channel notice received"),
+ /** Channel mode notice received. @since 0.6.3m2 */
+ CHANNEL_MODE_NOTICE(ChannelEvents.CHANNEL_SOURCED_EVENT_WITH_CHARARG, "Channel mode notice received"),
/** Channel CTCP received. */
CHANNEL_CTCP(ChannelEvents.CHANNEL_CTCP, "Channel CTCP received"),
Click to Expand/Collapse
diff src/com/dmdirc/actions/metatypes/ChannelEvents.java
@@ -46,6 +46,8 @@ public enum ChannelEvents implements ActionMetaType {
CHANNEL_SOURCED_EVENT(new String[]{"channel", "user"}, Channel.class, ChannelClientInfo.class),
/** Chanel event with source and argument. */
CHANNEL_SOURCED_EVENT_WITH_ARG(new String[]{"channel", "user", "message"}, Channel.class, ChannelClientInfo.class, String.class),
+ /** Chanel event with source, message and mode character argument. @since 0.6.3m2 */
+ CHANNEL_SOURCED_EVENT_WITH_CHARARG(new String[]{"channel", "user", "mode", "message"}, Channel.class, ChannelClientInfo.class, String.class, String.class),
/** Channel event with source and victim. */
CHANNEL_SOURCED_EVENT_WITH_VICTIM(new String[]{"channel", "user", "victim", "message"}, Channel.class, ChannelClientInfo.class, ChannelClientInfo.class, String.class);
Click to Expand/Collapse
diff src/com/dmdirc/config/defaults/default/formatter
@@ -12,6 +12,16 @@ formatter:
# 1: Current timestamp
timestamp=%1$tH:%1$tM:%1$tS |
+# Type: Channel Messages with mode
+# 1: User mode prefixes
+# 2: User nickname
+# 3: User ident
+# 4: User host
+# 5: Mode
+# 6: Message content
+# 7: Channel name
+ channelModeNotice=5-%1$s%2$s:%5$s%7$s- %6$s
+
# Type: Channel Message
# 1: User mode prefixes
# 2: User nickname
Click to Expand/Collapse
diff src/com/dmdirc/parser/interfaces/callbacks/ChannelModeMessageListener.java
@@ -43,6 +43,7 @@ public interface ChannelModeMessageListener extends CallbackInterface {
* cChannelClient is null if user is a server, or not on the channel.
*
* @param tParser Reference to the parser object that made the callback.
+ * @param prefix The mode prefix of the message
* @param cChannel Channel where the Message was sent to
* @param cChannelClient ChannelClient who sent the Message (may be null if server)
* @param sMessage Message contents
Click to Expand/Collapse
diff src/com/dmdirc/parser/interfaces/callbacks/ChannelModeNoticeListener.java
@@ -43,6 +43,7 @@ public interface ChannelModeNoticeListener extends CallbackInterface {
* cChannelClient is null if user is a server, or not on the channel.
*
* @param tParser Reference to the parser object that made the callback.
+ * @param prefix The mode prefix of the message
* @param cChannel Channel where the notice was sent to
* @param cChannelClient ChannelClient who sent the notice (may be null if server)
* @param sMessage notice contents
(0007498)
ChrisNorthwood (administrator)
2009-08-09 01:55

Apparently the parser works

Issue History

Date Modified Username Field Change
2008-10-01 19:59 ChrisNorthwood New Issue
2008-10-01 19:59 ChrisNorthwood Status new => assigned
2008-10-01 19:59 ChrisNorthwood Assigned To => Greboid
2008-10-01 19:59 ChrisNorthwood Needs unit test => no
2008-10-02 00:08 MD87 Relationship added duplicate of 0001816
2008-10-02 00:09 MD87 Status assigned => closed
2008-10-02 00:09 MD87 Resolution open => duplicate
2009-05-09 14:22 Greboid Target Version 0.6.3 => 0.6.3m1
2009-07-03 20:56 Dataforce Relationship replaced depends on 0001816
2009-07-03 20:57 Dataforce Note Added: 0007084
2009-07-03 20:57 Dataforce Assigned To Greboid => MD87
2009-07-03 20:57 Dataforce Status closed => assigned
2009-07-03 20:57 Dataforce Resolution duplicate => open
2009-07-03 23:51 Greboid Target Version 0.6.3m1 => 0.6.3m2
2009-07-21 19:21 MD87 Checkin
2009-07-21 19:21 MD87 Note Added: 0007298
2009-07-21 19:21 MD87 Status assigned => resolved
2009-07-21 19:21 MD87 Resolution open => fixed
2009-08-09 01:55 ChrisNorthwood Note Added: 0007498
2009-08-09 01:55 ChrisNorthwood Status resolved => assigned
2009-08-09 01:55 ChrisNorthwood Resolution fixed => reopened
2009-08-10 11:22 Dataforce Status assigned => closed
2009-08-10 11:22 Dataforce Resolution reopened => fixed