/pocket-irc

An IRC client for Windows Pocket PCs (cira 2000)

Primary LanguageC++MIT LicenseMIT

BUGS

o WM6.5 the keyboard button disappears - phigan on #pocketpc - use hardware button to bring up home/taskmanager
o Can't Send/Receive files from storage card
o DCC not recognised in some formats, notice type maybe?
o Replace "[ ... ]" with "" in channel list
o Unlamify "Trying..." and other status messages

TODO

o Multiple codepage support
o Logging

o Per network/server? channel lists
o Take channel list out of session object
o Auto Reconnect on Disconnection
o Secondary/generated nick

o Resizeable user list
o Network server lists
o DNS lookup on server provided host info
o Make /list window headers sortable
o Show user list by default option
o Hold to scroll right/left through tabs
o Highlight tab arrow with highest notification colour

o Notify list
o Ignore list
o Channel mode window
o Top of window info bar on disconnect/kick/DCC
o Key combinations for navigating the interface, tabs
o Scroll dialogs into view when tabbing to controls off screen
o Tweak scroll behavior when SIP raised/lowered, try to maintain view
o Auto Rejoin on Kick
o DCC Progress meter
o Open/Run/Play files from DCC window

? Simply socket sink to a single callback with messages
? Auto-connect on run
? Single thread socket handling
? DLL Plugins
? Event scripts
? Configurable command menus
? Tray Notifications
? Audio/Vibration notifications?
? Have TabStrip autosize itself instead of MainWindow doing so
? Double click nick to query
? General perform on connect script
? Per network join on connect and perform

x Server capability parsing
x Doesn't properly parse user mode flags like % and &, general problem of any non-EFNet server flag compatibility
x Channel list breaks on non-breaking spaces in nicknames !#%#@  (irc.visp.ru, #sarovnet, "Dr Geegle")
x User changes nick with query open can no longer talk to that user
x Make DCC List window landscape/square friendly
? drano - can't add favourite to channel (with key?)
x psyBNC compat, has usernames starting with -, ( and )
? psyBNC compat, joining channel with many users causes an error (no other details known)
x Remove duplicates when adding stuff to input combo box
x Enable green button at all times since you can always use it :/
x /server and /connect behaviour when already connected
x Channel List doesn't parse some channels correctly
x Remember channel list (per session)
x Landscape friendly Options dlg
x Landscape friendly Channels dlg
x Add List tab to Channels window and ability to join by typing in a new one
x Timestamps
x Allow querying nicks with ' in them?
x Support /commands
x Better Win32 error code reporting
x Popup menu on channel window too, not just tab
x Perform on connect / join channel / channel favourites
x Nick list menu
x Disable popup menus when disconnected
x DCC chat
x DCC file transfer
x URL hotlinks in display
x Popup menu for nicks and channels in display



XML MENU

<MENU NAME="Channel">
	<COMMAND NAME="Part">
		Part
	</COMMAND>
	<COMMAND NAME="Say">
		Say(InputBar.GetText());
 	</COMMAND>
	<COMMAND NAME="Topic">
		Topic(InputBar.GetText());
 	</COMMAND>
	<SUBMENU NAME="Modes">
		<COMMAND NAME="+s">	
			Mode("+s");
		</COMMAND>
		<COMMAND NAME="+s">	
			Mode("+s");
		</COMMAND>
	</SUBMENU>
</MENU>

<MENU NAME="Query">
	<COMMAND NAME="Close">
		Close
	</COMMAND>
	<COMMAND NAME="Say">
		Say(InputBar.GetText());
 	</COMMAND>
</MENU>



INCOMING EVENT

o Session gets parsed IRCEvent
o Session updates internal state based on
  NICK or MODE changes
  JOIN, PART, KICK events, remote QUITs
o Session optionally passes event to script engine
o If script engine indicates the message should not be processed further, break.
o Session handles PING replies, creates QUERY windows if required
o Event passed to output dispatcher for display on the screen

USER INPUT

o Parse command into IRCCommand object
o Pass IRCCommand to script engine
o If script engine indicates the command should not be processed further, break
o Build in or scripted handler builds an IRCEvent
o IRCEvent is passed to IRCSession
o Session passes Event to OutputDispatcher for display
o IRCSession passed IRCEvent to IRCWriter which formats the event for network transport
o Outgoing message is written to tranport


CHANNEL MODES

	O - give "channel creator" status;
    o - give/take channel operator privilege;
    v - give/take the voice privilege;

    a - toggle the anonymous channel flag;
    i - toggle the invite-only channel flag;
    m - toggle the moderated channel;
    n - toggle the no messages to channel from clients on the
        outside;
    q - toggle the quiet channel flag;
    p - toggle the private channel flag;
    s - toggle the secret channel flag;
    r - toggle the server reop channel flag;
    t - toggle the topic settable by channel operator only flag;

    k - set/remove the channel key (password);
    l - set/remove the user limit to channel;

    b - set/remove ban mask to keep users out;
    e - set/remove an exception mask to override a ban mask;
    I - set/remove an invitation mask to automatically override
        the invite-only flag;

MENU COMMANDS

- Global Commands
	JOIN (input)
	QUIT (input)
	QUERY (input)
	WHOIS (input)
	CTCP (input)
	NICK (input)
	MODE (self) (input)
	RAW (input)
	DCC
		SEND (input)
		XMIT (input)
		CHAT (input)

- Channel
	SAY (channel) (input)
	ACT (channel) (input)
	NOTICE (channel) (input)
	CTCP (channel) (input)
	PART (channel)
	MODE (channel) (*input)
	INVITE (channel) (input)
	User
		VOICE (channel) (input)
		DEVOICE (channel) (input)
		OP (channel) (input)
		DEOP (channel) (input)
		KICK (channel) (input)
		BAN (channel) (input)
		KICK/BAN (channel) (input)

- Channel User
	VOICE (channel) (user)
	DEVOICE (channel) (user)
	OP (channel) (user)
	DEOP (channel) (user)
	KICK (channel) (user) (*input)
	BAN (channel) (user)
	KICK/BAN (channel) (user) (*input)
	User
		MSG (user) (input)
		NOTICE (user) (input)
		CTCP (user) (input)
		QUERY (user)


- Query
	Say(user, input);
	Act(user, input);
	Notice(user, input);
	CTCP(user, input);
	Whois(user);
	OpenQuer(user);
	CloseQuery(user);
	Invite(input, user);

	DCC
		DCCSend(user);
		DCCChat(user);
		DCCXmit(user);

IMenuProvider:
	DoMenu(MENU_TYPE_X, POINT pt, channel, user, input);