GENERIC: process-message ( irc-message -- )
M: object process-message drop ;
M: ping process-message trailing>> /PONG ;
-M: join process-message [ sender>> ] [ chat> ] bi join-participant ;
-M: part process-message [ sender>> ] [ chat> ] bi part-participant ;
+! FIXME: it shouldn't be checking for the presence of chat here...
+M: join process-message [ sender>> ] [ chat> ] bi [ join-participant ] [ drop ] if* ;
+M: part process-message [ sender>> ] [ chat> ] bi [ part-participant ] [ drop ] if* ;
M: quit process-message sender>> quit-participant ;
M: nick process-message [ trailing>> ] [ sender>> ] bi rename-participant* ;
M: rpl-nickname-in-use process-message name>> "_" append /NICK ;
: timestamp-path ( timestamp -- path )
timestamp>ymd ".log" append log-directory prepend-path ;
+: update-current-stream ( timestamp -- )
+ current-stream get [ dispose ] when*
+ [ day-of-year current-day set ]
+ [ timestamp-path latin1 <file-appender> ] bi
+ current-stream set ;
+
+: same-day? ( timestamp -- ? ) day-of-year current-day get = ;
+
: timestamp>stream ( timestamp -- stream )
- dup day-of-year current-day get = [
- drop
- ] [
- current-stream get [ dispose ] when*
- [ day-of-year current-day set ]
- [ timestamp-path latin1 <file-appender> ] bi
- current-stream set
- ] if current-stream get ;
+ dup same-day? [ drop ] [ update-current-stream ] if
+ current-stream get ;
: log-message ( string timestamp -- )
[ add-timestamp ] [ timestamp>stream ] bi