Zinc: Zinc Is Not Cur(fl|ph)oo - Console Yahoo! Chat Client version 1.0.1 (7/7/2004): * YMSG protocol has been fixed version 1.0 (5/26/2004): * fixed error_invalidunbuddyparam missing message * changed project url to http://zinc.sourceforge.net * made changes for /checkupd feature to work with zinc.sourceforge.net version 1.0rc6 (5/12/2004): * removed all debug code * added more info in README for Mac OS X 10.3 "Panther" users. * fixed broken /hs (highlight string) command * fixed minor highlight string and name add/save bug * fixed minor ghost user handling on comment and emote packets version 1.0rc5 (4/27/2004): * fixed broken auto reconnect code * removed some commented debug code version 1.0rc4 (4/20/2004): * rolled back multiple login with same id attempt detect code version 1.0rc3 (4/17/2004): * fixed unhandled socket exception when calling setcblocking method * fixed rare YMSG challenge response crash bug when some variables are used without being initialized with default value of 0 * mapped ctrl-q and ctrl-w to be Page Down and Page Up respectively * added code to detect and handle rapid reconnect situations when multiple copies of zinc was launched with same login id. * README now contains instruction on how to get Zinc working with Mac OS X Terminal.app version 1.0rc2 (4/3/2004): * fixed crash bug with buddy away event with no message * fixed big endian cpu YMSG protocol crypt routine added Crypt.py which is a Python port of glibc crypt function * commented out thread deadlock debug code * fixed param substitution problem with custom command shell commands version 1.0rc1 (3/19/2004): * fixed spelling error in browser launch message * improved custom command refresh logic * fixed custom away and back message crash bug (YCHT) * fixed color set lockup bug * fixed potential thread deadlock problem with regex based ignores * added state checking for incoming packet handling * fixed 'openurl' related lockup problem * thread locking tweaks in ChatWindow.py * fixed thread deadlock problem in Regex.py * added code for handling invalid socket state * added /checkupd command to check for latest version of zinc version 1.0pre32 (3/3/2004): * fixed regex related crash bug * fixed regex change and ignore list sync problem * made /join command to accept space delimited room number specifier instead of just / * added code for handling strange budy away status * fixed case sensitivity bug with /buddy command * fixed serious YCHT protocol repeated join problem * lot of whitespace cleanups * optimized windows refresh calls * fixed pm state restore sync bug when zincrc file is refreshed * merged config variable filter-enters and filter-exits into filter-enters-exits * merged config variable scroll-enters and scroll-exits into scroll-enters-exits * fixed potential thread deadlock and cpu spike problem in PacketQueue.py * removed duplicated code from ChatWindow.py * enhanced split function to correctly parse double quotes as a word delimiter * added /ccs command. This is custom command search feature to search for keywords in custom command text /ccs ... * added code to check for validity of UI object before actually doing anything with it version 1.0pre31 (2/27/2004): * created Zinc.py * cleanup of zinc * fixed join command bug where room number greater than two digit will result in error * emotes starting with "' " or "'s " will now show correctly * fixed '\' last char custom command crash bug * removed 'version' parameter from zincrc * added date to primary statusbar * added pm state to primary status bar * made status bar to be adjustable to width * secondary status bar added. ctrl-s to toggle * secondary status bar shows online time, protocol, server and bandwidth usage * added thread locking for ChatWindow.py, StatusWindow.py and EntryWindow.py * lots of thread locking code added * fixed really dumb multiple connect bug in Zinc.py * removed unnecessary save file call on exit * created base class file Yahoo.py by merging code from YahooYCHT.py and YahooYMSG.py * very basic traceback capture code is in place. It will dump most traceback to ~/.zinc/error * removed bogus CommandType.py * merged HightlightString.py and HighlightUser.py into Highlight.py * added "the big red button" feature * moved connect retry code from Zinc.py to PacketQueue.py * added full buddy list handling code * added default-buddy-group config variable This varible controls name of the group which a buddy will be added to when group parameter is omitted * /buddy command added /buddy /buddy /buddy : * disabled python version requirement checking in install.sh for now to solve FreeBSD users having problems with it * added "think bubble" packet handling code * added ability to manage server side ignore names via /ssi command /ssi /ssi * added third pm state called blwl which means only allow pm from names in buddy list or from whitelisted names * YMSG protocol tweaks * added allow-budding parameter to control whether others can add you to their buddy list. If it's set to Y, anyone can add you to their buddy list. If it's set to N, only the names listed in white list can add you to their buddy list. * /unbuddy feature has been added. This allows you to remove yourself from other people's buddy list. /unbuddy /unbuddy If message is omitted, then text from 'unbuddymsg' in ~/.zinc/en/msg will be used as a default unbuddy notification text * /status will now show list of valid status to be chosen * /back now has an optional parameter * moved PacketQueue object from Zinc to Session * moved protocol object from Zinc to Session * added missing name param error message for /follow command * fixed first char tab complete repeat feature * added "zombie" packet and state handling * login packet format tweaks * added ${serverip} substitute variable * added ${serverhostname} substitute variable. This may be different than ${server} in that it's reverse lookup from IP resolved from ${server} * /reconnect command added to manually reestablish network connection * fixed system command file migration problem * fixed unnecessary load of four files during launch * changed packet parsing, packet handling, and command handling code from series of if statements to a hash lookup * added /cc command to execute multiple custom commands in a series /cc * added logout packet handling * reconnect parameter variable added to zincrc This variable controls how may reconnects are made before giving up. To disable auto reconnect feature, set this variable to 0 * reconnect-wait parameter variable added to zincrc This variable controls number of seconds to wait before attempting to reconnect. * fixed sporadic window resize lockup version 1.0pre30 (2/3/2004): * minor changes to option help text * added ${myname} substitute variable * added ${server} substitute variable * following color/message names were shortened regexfiltercommentadd -> rfcadd regexfiltercommentremove -> rfcremove regexignorecomment -> ric regexignorecommentadd ->ricadd regexignorecommentremove ->ricremove regexignorename -> rin regexignorenameadd ->rinadd regexignorenameremove ->rinremove * following color names were shortened highcommenttext -> hlcommenttext highcommentuser -> hlcommentuser highstringtext -> hlstringtext highstringuser -> hlstringuser * fixed color list wrapping problem * Color.py cleanup * fixed weird tab complete scrambling bug /pm => garbage => garbage * minor message and custom command subst optimization * fixed custom command with \ char as last char crash bug fix * added shell output non-printable char stripping * shell output format tweaks * fixed rare temporary file related thread problem * added scroll-enters and scroll-exists config variables to control chatter entering and exiting message to be scrolled or overwritten * /rfu command added for adding url regex filter * /rmc command added for adding comment regex mute * /rmn command added for adding name regex mute * adding regex will now sync with current chatters list * merged six regex related source files to one * added initial window resize handling code only works for Python 2.2 and 2.3 * added hl-directed-comment feature comment which is directed to user will be highlighted color for this is controlled by highdirecteduser and highdirectedtext * tab complete should work better now that it attempts to read user's mind via recent activity ranking * bunch of thread timing tuning * automated config file refresh notification message added * removed gyach smiley regex filtering you can add ^\|\d{1,6}\.png to ~/.zinc/regex.filter.comment to get same functionality * fixed a bug where message file was being saved and loaded repeatedly when two instances of zinc is running simultaniosly on same user * shell command core dump problem should be fixed * shell-timeout config variable added (default to 5) * made background color setting to become active immediately * added code to solve foreground and background color collision problem * code to support transparent background for Python 2.4 added * incoming and outgoing pm message color customization added incoming -------- pminfromname from name pminarrow arrow pmintoname to name pmintext message outgoing -------- pmoutfromname from name pmoutarrow arrow pmouttoname to name pmouttext message * autoload-interval config variable added (default to 6) this controls time intervals between checking file refresh. The value cannot be less than 3. * fixed syscmd file dupe entry bug * minor cleanup of main zinc file * moved command line option handling code from zinc to Login.py * fixed command line option override problem version 1.0pre29 (1/17/2004): * fixed Python 2.3 FutureWarning message suppression (YMSG) * fixed "OverflowError: integer exponentiation" error with Python 2.1 * increased incoming and outgoing wait time to 1.00. This should help users with high latency to chat server. (YMSG) * made code inside thread locking smaller * fixed broken /back (YMSG) * fixed sporadic pm problem (YMSG) * made ChatWindow thread safe * fixed /proto custom command version 1.0pre28 (1/14/2004): * added ${prototocol} substitute variable. It's will be either YCHT or YMSG * added /proto default custom command * fixed bogus custom command default * took sleep call out of the incoming packet queue thread loop * removed useless ignore-pornbot-name config param * new YMSG protocol auth code has been ported and included * added FutureWarning suppression for Python 2.3 * room list fixed for YCHT protocol * changed default YCHT protocol server to jcs.chat.dcn.yahoo.com version 1.0pre27 (1/9/2004): * added YCHT protocol support YCHT protocol can be selected by -p cli option version 1.0pre26 (1/8/2004): * retracted custom command with \ as last char crash bug fix because it causes problems with Python 2.3 users version 1.0pre25 (1/8/2004): * fixed startup crash "loop over non-sequence" bug when running zinc with python 2.1 * year 2004 added to copyright lines * fixed custom command with \ as last char crash bug * fixed highlight name crash bug * fixed missing error_openurl message * finally fixed the long standing stability issue version 1.0pre24 (1/1/2004): * fixed bogus url open failure message * url parsing regex tweaks to correctly extract url from gyach's crappy anchor tag. * better control L key refresh handling * added refresh calls after opening url * added regex code to parse and strip html anchor tags other crappy chat clients have put in for reasons unknown. * console url open window corruption should be fixed * added code to skip .* and *.swp file in ~/.zinc/cmd/ path * ignore-pornbot-name feature removed. Adding following regex's to ~/.zinc/regex.ignore.name will duplicate this feature _pr[0o]f[i1][l1]e_ [^0-9][12][0-9]f(em)?$ [^0-9][12][0-9]hot?$ iluvu ^www_.*_com$ * fixed broken figlet output bug * whitelist remove crash bug fixed * made verbose ignore only applicable when the chatter being ignored is in the room. * verbose ignore will now duplicate the behavior of silent ignore's behavior of removing chatter from whitelist * Logging will stop gracefully when disk is full * filter-enters and filter-exits runtime config params to toggle chatter entering and leaving notification message * changed default chat server from scs.yahoo.com to scs-dcng.msg.yahoo.com * fixed broken help when migrating from older version of zinc * fixed bug where ~/.zinc/en/msg file was being reloaded for no reason * ping time offset is now relative to last outgoing rather than from it's own thread clock * ~/.zinc/usrpwd format changed to support protocol param version 1.0pre23 (11/03/2003): * install.sh now accepts --prefix option * bogus private room name filtering bug fix * unbreak last tab complete feature * room list visual tweaks * supressing warning message for python 2.3 fix confirmed * lowered the required python version to 2.1 * bumped up the max number of recently logged off chatters to 10 * made regex based ignore to actually do something * added regex escape wrapper to three regex based ignore/filter * added whitelist exclusion to regex based auto ignore * Control L key handling added * customizable brower selection added valid values for "browser" is auto, mozilla, netscape, mosaic, kfm, grail, links, lynx, w3m * minor zinc file cleanup * url parsing/caching feature added /urllist to see list of recent urls /urlopen n to open url /urlsave n to save url to ~/.zinc/url * changed /join #nn:nn:nn format to /join nn/nn/nn to make it simpler and more numeric keypad friendly * removed useless 5 though 8 server cli param handling code * fixed ~/.zinc/syscmd save bug * made ignore list to be sorted when saving * added --install option to allow install.sh to create .pyc and .pyo during install * added --prefix option to uninstall.sh * removed old install cleanup code from install.sh * check was added to install.sh and uninstall.sh so only the root can run it. * Made upgrading more graceful for Help.py and Message.py * changed command type var into integer * fixed word wrapping indent bug that occurs when timestamp is shown * fixed invalid command line parameter handling * fixed exception error handling in Option.py * scripts/pygetopt was created to parse option params during install * added exception handling to protect bad regex from crashing zinc * url-list-size added to control the maximum number of urls cached * /rfc, /ric, /rin commands added to add or remove filter comment regex, ignore comment regex, ignore name regex respectively * created base class Regex.py to consolidate three regex based ignore/filter classes version 1.0pre22 (10/21/2003): * fixed LICENSE spelling * fixed /join bug version 1.0pre21 (10/21/2003): * changelog format change * version number scheme changed * minor YahooCrypt.py tweak to get around python 2.1 version issue * fixed url opening bug that crept in during recent build * brought curses.wrapper back to zinc for now * fixed "imaginary chatter creation" bug * python version checking assertion added * room list feature as been added /room : show room categories /room catindex : show room names in the category /room catindex roomindex : show room detail ex. /room 13 -> show rooms in 'Computers & Internet' category ex. /room 13 4 -> show 'Linux, FreeBSD, Solaris' room detail * /join was modified to work with room list number /join #catindex:roomindex : join a room:1 /join #catindex:roomindex:roomnum : join a room with specified room number ex. /join #13:5 -> join Macintosh:1 room ex. /join #13:5:2 -> join Macintosh:2 room * show-privaterooms config variable added to control listing of private chatrooms * /join command handler code cleanup * slightly more intelligent verbose shell output * more protocol stability tweaks * null string pm repeat string crash bug fixed * null string emote and shell command checking added * setting runtime config with no value crash bug fixed * fixed immediate runtime config save bug * fixed garbled tunes custom command * regex based ignore fixes * fixed erroneous custom command purge/reload bug * LICENSE renamed to COPYING version 1.0-preview20 (10/10/2003): * ignoring null pm message logic added * fixed signal event function with missing params * fixed a crash when illegal names causing problem with regex * log width tweak * wordwrap function has been rewritten * removed queue based incoming buffer code from PacketQueue.py * added bytein and byteout substitute variables * removed unnecessary sleep call in PacketQueue.py * removed unnecessary module imports * changes to YahooCrypt.py eliminating the need to import struct module version 1.0-preview19 (10/04/2003): * Fixed initial tab key crash bug * horizontal entry bar bug is mostly fixed * added infrastructure to handle escape keys * added home and end key handling * added more smiley characters. now allows arbitrary single char as mouth * install.sh was changed slightly * rewrote some bad threading code * removed the use of Timer object which should makes zinc be able to run on python 2.1 again * some tweaks to further improve stability * fixed text decoration garbage not being filted for pm * spelling fix for usage cli help * removed uses of curses from zinc * removed curses.wrapper from zinc * now install.sh will install itself to /usr/lib/zinc/ instead of /usr/share/zinc/ as did in previous two versions. install.sh will also clean up the mess created by older version * uninstall.sh was added. This will also clean up the mess created by 1.0-preview17 and 18 * connection retry code was added. By default it will try to connect up to three times before giving up. version 1.0-preview18 (10/02/2003): * usage cli param bug fixed. -h works now * rolled back logout user and pm user caching based on hash code * trimmed some fat in Session.py * made incoming packet queing default to stream * ymsg auth code changes version 1.0-preview17 (10/01/2003): * dupe var cleanup on Session.py and Config.py * minor annoying name ignore tweaks * minor pornbot name ignore tweaks * optimized text cleaups routine * removed shexec.py * merged encodep.py into Yahoo.py * made whitelist case insensitive * whitelist auto load code audit * whitelist user is no longer subjected to comment-incoming-max * fixed comment-outgoing-max to include DIM and BOLD * color value is not check for validity * /clear bug should be fixed * ${pyvershort} and ${pyverlong} subst var added * logging is now stored at ~/.zinc/log/YYYY/MM/YYYY-MM-DD.log * Moved m9dec.py string format code to MessageHander.py to make it more resistant to flooding * ${ignoretotalcount} added as substitute var. It's number of chatters on ignores file * ${ignorecount} added as substitute var. It's number of chatters currently ignored in the room * Chatters.py added and ripped out lot of code from all over the place. * curphoo code from EntryWindow.py has been removed * curphoo code from m9dec.py has been rewritten as PacketParser.py * PacketType.py created * MessageHandler.py renamed to PacketHandler.py to avoid confusion with Message.py * PacketHandler.py has been optimized for efficiency. * completely removed all curphoo code from zinc. Zinc is now 100% free of crappy curphoo code. * new ymsg protocol implementation * fixed lingering hanged process. * fixed big endian problem that was in original gaim's yahoo auth code. Zinc now works on big endian cpu * ${sysname}, ${sysnodename}, ${sysrelease}, ${sysversion}, ${sysmachine} substitute vars added * made logout user and pm user caching to be stored as hash instead of list * made the incoming and outgoing packet queing into two separate threads * added ability for user to turn off beeps * implemented two kinds of incoming packet queuing, list and stream version 1.0-preview16 (09/11/2003): * moved smiley handling code from CommandHandler.py to CommandParser.py * removed all curses.COLS and curses.LINES * improved custom command. It will now load ~/.zinc/cmd/* instead of ~/.zinc/cmd * added ability to repeat last pm * user configurable system characters char-command / char-emote : char-localshell # char-shortshell i @ char-verboseshell ! char-repeatpm = * ability to pm custom command, emote and shell output has been added * localshell is now visibly distinct from simpleshell and verboseshell * added code to remember last five chatters who have pm'd the user from outside the room. This is to enhance tab complete. * incoming/outgoing excessive spam protection added comment-incoming-max and comment-outgoing-max controls the maximum number lines a user comment can be received or sent * removed curses import from MessageHandler.py * updated Python version requirement to version 2.2 or later * highlight string deselect crash bug fixed * changed HighlightString.py to use hash instead of list * changed HighlightUser.py to use hash instead of list * added trivial --log, --help and --version cli options * moved substitute variable code from Session.py to CommandHandler.py * changed substitute variable format to ${name} * added chattotalsecs, chathours, chatmins, chatsecs, chattime substitute variables. * added /uptime custom command * fixed "Parse Error (PM)" bug when sending pm to person currently away * added code to add ' ' after /pm username tab complete * optimized m9dec.py * merged format.py into m9dec.py * invisible user exit message is now silent * removed seemingly unnecessary logoff handling code * fixed pm'ing smiley ability bug * fixed -u username command line option alias naming bug * fixed new alias creation bug when user chooses not to save any preference version 1.0-preview15 (08/29/2003): * really fix the install.sh version 1.0-preview14 (08/29/2003): * moved the config file mtime checking code to separate thread * moved ping to separate thread * fixed install.sh version 1.0-preview13 (08/28/2003): * useless pud removed * more code cleanups with PgUp and PgDn key handling * ignoring someone who is in whitelist user will now remove that user from whitelist. * removed curses calls from Color.py * started changing code around for new UI and Window code * scroll to black problem fixed * /save and /load features removed. All the config files are loaded and saved real time. * Config.py added. Pulled rc off of Session.py * case insensitive ignore/unginore feature fixed * README updated * added install_withoutannoyingnameignore.sh * added copyright information * added hson and hsoff messages * made pm state persistant across chat sessions * split code in UI.py to ChatWindow.py, EntryWindow.py and StatusWindow.py * reworked the entire chat window scrolling scheme. * added background color scheme * now tarball inclues md5 digest for all files * setting statusbarbg color will take effect immediately * fixed muted or ignored user exit handling * tweaked ignore-annoying-name feature to ignore letter o to number zero transition to add to ignore index * minor change to ignore-pornbot-name feature * started using .bz2 instead of .gz version 1.0-preview12 (08/07/2003): * fixed /load command breakage * added -v command line parameter * fixed /load and /save bugs * fixed some /set breakages version 1.0-preview11 (08/06/2003): * fixed the mislabeling of version number * fixed to handle custom command anomaly more gracefully * fixed hcon color profile name * fixed buddyisaway color profile name version 1.0-preview10 (08/06/2003): * this version number was skipped due to mislabeling when releasing preview9 version 1.0-preview9 (08/06/2003): * fixed /set crash bug * fixed missing sessionID in Session.py * fixed missing info in CHANGELOG * fixed /save all * fixed broken /help * Session.py code cleanup version 1.0-preview8 (08/05/2003): * help added * fixed 'dentified' typo * finally fixed the buddyaway without text issue * style-tabcomplete added to allow user to change name tab complete char. * added whitelist command * mail-notice added so it can be turned off * fixed custom command replacement bug * added language mapping to room name aliasing * implemented three types of shell output # - local output only @ - output only shell result ! - output shell command and the result * encodep.py code cleanup * multiple user login version 1.0-preview7 (07/18/2003): * bugfix for regexignorename feature when joining room * room name aliasing * fixed highlight string bug * fixed bogus error msg from install.sh * fixed a silly bug in Sessions.py version 1.0-preview6 (07/18/2003): * fixed bad install.sh (I hope) * regex based ignore and filter added ignore chatter based on name matched by regex ignore chatter based on comment matched by regex filter comments matched by regex * fixed pesky int and string concat problem * extended tab complete. tab complete will now loop through matches * tab as first char will return last successful first char tab complete result version 1.0-preview5 (07/16/2003): * added ability to pm output from a shell command. ex: /pm someone !uptime * highlight string feature was added * zinc file cleanup * added /load all, hn, and hs * added /save all, hn, and hs * fixed backspace bug (I hope) * statusbar clock is broken for now * added self-intensity feature. Valid values are dim, normal or bold. Default value is normal. This replaces highlight-self feature. * install.sh added version 1.0-preview4 (07/16/2003): * disabled Ctrl-W key due to bug. * Entry.py cleanups * silent-autoignore feature added. default is N * Session.py cleanups * highlight-self feature added. default is N * starting zinc with -l now starts logging * move logging destination to ~/.zinc/log version 1.0-preview3 (07/15/2003): * Added basic whitelist feature. Adding a name to ~/.zinc/whitelist will prevent the chatter from being auto ignored version 1.0-preview2 (07/15/2003): * Fixed repeated auto ignore message bug version 1.0-preview1 (07/15/2003): * First public release Copyright (C) 2003, 2004 John Kim