⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 remind.tcl

📁 Linux下的MSN聊天程序源码
💻 TCL
字号:
########################################################                  REMIND PLUGIN                      ######################################################### Maintainer: Frederic Diaz (gadget_boy@users.sf.net) ########################################################namespace eval ::remind {	variable config	variable configlist	variable language############################### ::remind::InitPlugin dir   ## ---------------------------## Load proc of Remind Plugin ###############################proc InitPlugin { dir } {	global version	::plugins::RegisterPlugin remind	source [file join $dir remind.tcl]	::plugins::RegisterEvent remind new_conversation Remind	array set ::remind::config [list beginend {1} daysnumber {7} filetransfert {1} nbline {10} checknote {1} when {1}]	# Loads langs if aMSN version is upper than 0.95	if { $version == "0.94"  | ![file isdirectory "$dir/lang"] } {		array set ::remind::language [list always {Always} beginendconversation {Display begin and end of conversation} checknote {Display if there are notes} daysnumber {Number of days} filetransfert {Display file transfers} lastsentence {Last sentences in the previous conversations} nbdisplay {Number of line displayed} noteswritten {You have written notes about this contact} talklast {If we have talk in the last x days} talkwinthin {If we have not talk within x days}]		set ::remind::configlist [list \			[list str "$::remind::language(nbdisplay)" nbline] \			[list bool "$::remind::language(beginendconversation)" beginend] \			[list bool "$::remind::language(filetransfert)" filetransfert] \		]	} else {		set langdir [file join $dir "lang"]		set lang [::config::getGlobalKey language]		load_lang en $langdir		load_lang $lang $langdir		array set ::remind::language [list always "[trans always]" beginendconversation "[trans beginendconversation]" checknote "[trans checknote]" daysnumber "[trans daysnumber]" filetransfert "[trans filetransfert]" lastsentence "[trans lastsentence]" nbdisplay "[trans nbdisplay]" noteswritten "[trans noteswritten]" talklast "[trans talklast]" talkwithin "[trans talkwithin]"]		set ::remind::configlist [list \			[list str "$::remind::language(nbdisplay)" nbline] \			[list rbt "$::remind::language(always)" "$::remind::language(talklast)" "$::remind::language(talkwithin)" when] \			[list str "$::remind::language(daysnumber)" daysnumber] \			[list bool "$::remind::language(beginendconversation)" beginend] \			[list bool "$::remind::language(filetransfert)" filetransfert] \			[list bool "$::remind::language(checknote)" checknote] \		] 		}}################################################################# ::remind::Remind event epvar                                 ## ------------------------------------------------------------ ## Tell the other procs what to do according to the preferences #################################################################proc Remind { event evpar } {	global version	upvar 2 $evpar parameters	set chatid $parameters(chatid)	set email $parameters(usr_name)			if { $version == "0.94" } {			::remind::ShowLastSentences $chatid $email			} else {					set lastmessage [string range [::abook::getContactData $email last_msgedme] 0 7]		set date [clock format [clock seconds] -format "%D"]				set lastmessage [clock scan $lastmessage]		set date [clock scan $date]		set timeline [expr { $::remind::config(daysnumber) * 86400 }]		if { $::remind::config(when) == 1			|| ( $::remind::config(when) == 2 && [expr { $date - $lastmessage }] <= $timeline )			|| ( $::remind::config(when) == 3 && [expr { $date - $lastmessage }] >= $timeline )		} {			::remind::ShowLastSentences $chatid $email		}		if { $::remind::config(checknote) == 1 } {			::remind::CheckNote $chatid $email		}	}	}	################################################# ::remind::ShowLastSentences chatid email     ## -------------------------------------------- ## Display the last sentences in the chatwindow #################################################proc ShowLastSentences { chatid email } {	global version	# Get the last sentences of the contact	set loglines [::remind::GetLastSentences $email]	set tagname "black"	set font [lindex [::config::getGlobalKey basefont] 0]	if { $font == "" } { set font "Helvetica" }			set fontformat [list "" "" ""]	set win_name [::ChatWindow::For $chatid]	# Allow something to be written into the chat window	if { $version == "0.94" } {		${win_name}.f.out.text configure -state normal -font bplainf -foreground black	} else {		[::ChatWindow::GetOutText ${win_name}] configure -state normal -font bplainf -foreground black	}	::remind::WinWrite "$chatid" "$::remind::language(lastsentence) :" blue	foreach line $loglines {		# If the line doesn't begin with |"L		if { [string range $line 0 2] != "\|\"L" & $line != ""} {			::remind::WinWrite $chatid "\n$line" $tagname $fontformat		} else {			set color [string range $line 3 5]			switch $color {				GRA { # If the line is a message...					set aidx [string first "\|\"L" $line 16]					set color2 [string range $line [expr {$aidx + 3}] [expr {$aidx + 5}]]					switch $color2 {					    ITA {						# Check if the time must be displayed or not						if { [::config::getKey showtimestamps] } {							set tstamp [string range $line 6 15]						} else {							set tstamp ""						}						set aidx [string first "\|\"L" $line 19]						set nick [string range $line 23 [expr {$aidx - 2}]]						# Look at the style used in chatwindows						switch [::config::getKey chatstyle] {						    msn {::config::setKey customchatstyle "\$tstamp [trans says \$nick]:\n"}						    irc {::config::setKey customchatstyle "\$tstamp <\$nick> "}						    - { }						}						set customchat [string map {"\\" "\\\\" "\$" "\\\$" "\(" "\\\(" } [::config::getKey customchatstyle]]						set customchat [string map { "\\\$nick" "\${nick}" "\\\$tstamp" "\${tstamp}" } $customchat]						set customchat [string map {"\\\$newline" "\n" } $customchat]						set customchat [subst -nocommands $customchat]						# Look if there is a color information in the message						if {[string index $line [expr {$aidx + 3}]] == "C"} {							set color [string range $line [expr {$aidx + 4}] [expr {$aidx + 9}]]							set fontformat [list "$font" "" "$color"]							set tagname "user"							set string [string range $line [expr {$aidx + 11}] end]						} else {							set fontformat [list "$font" "" ""]							set tagname black							set string [string range $line [expr {$aidx + 8}] end]						}						::remind::WinWrite $chatid "\n$customchat" gray						::remind::WinWrite $chatid "$string" $tagname $fontformat									    }					    GRE { #... or a filetransfert						if { $::remind::config(filetransfert) == 1 } {							set string "\n[string range $line [expr {$aidx + 6}] end]"							set tagname green							::remind::WinWrite $chatid "$string" green						}					    }					    - { }					}				}				RED { #If the line is an information (e.g. conversation closed)					if { $::remind::config(beginend) == 1 } {						set string "\n[string range $line 6 end]"						set tagname red						::remind::WinWrite $chatid "$string" red					}				}				- { }			}		}	}	::remind::WinWrite $chatid "\n" black	::amsn::WinWriteIcon $chatid greyline 3		if { $version == "0.94" } {		${win_name}.f.out.text yview end		${win_name}.f.out.text configure -state disabled	} else {		[::ChatWindow::GetOutText $win_name] yview end		[::ChatWindow::GetOutText ${win_name}] configure -state normal -font bplainf -foreground black	}}############################################## ::remind::GetLastSentence email           ## ----------------------------------------- ## It gets the last sentences of the contact ##############################################proc GetLastSentences { email } {	global log_dir	# Select the last logging file, and cancel the proc if there is no log file yet	if { [file exists [file join ${log_dir} ${email}.log]] == 1 } {		set id [open "[file join ${log_dir} ${email}.log]" r]		set size [file size [file join ${log_dir} ${email}.log]]	} elseif {[::config::getKey logsbydate] == 1} {		set date_list [list]		set erdate_list [list]		foreach date [glob -nocomplain -types f [file join ${log_dir} * ${email}.log]] {			set date [getfilename [file dirname $date]]			if { [catch { clock scan "1 $date"}] == 0 } {				lappend date_list  [clock scan "1 $date"]			} else {				lappend erdate_list $date			}		}		set sorteddate_list [lsort -integer -decreasing $date_list]		set date [lindex $sorteddate_list 0]		set date "[clock format $date -format "%B"] [clock format $date -format "%Y"]"		set id [open [file join ${log_dir} ${date} ${email}.log] r]	} else {		return	}	fconfigure $id -encoding utf-8	set logvar [read $id]	close $id	# Select the $nbline last lines	set loglines [split $logvar "\n"]	set nbline [expr {int($::remind::config(nbline))}]	set begin [expr {[llength $loglines] - $nbline}]	set loglines [lrange $loglines $begin end]	return $loglines}############################################### ::remind::CheckNote email                  ## ------------------------------------------ ## Check if there are notes about the contact ###############################################proc CheckNote { chatid email } {	global HOME	set file [file join $HOME notes ${email}_note.xml]		if { [file exists $file] } {		status_log "REMIND : OK\n" red		::remind::WinWrite "$chatid" "\n$::remind::language(noteswritten)\n" blue	}	}##################################################### ::remind::WinWrite chatid txt tagname fontformat ## ------------------------------------------------ ## Light version of ::amsn::WinWrite (faster)       #####################################################proc WinWrite {chatid txt tagname {fontformat ""}} {	global version	set win_name [::ChatWindow::For $chatid]	if { [::ChatWindow::For $chatid] == 0} {		return 0	}	set fontname [lindex $fontformat 0]	set fontstyle [lindex $fontformat 1]      	set fontcolor [lindex $fontformat 2]	#Store position for later smiley	if { $version == "0.94" } {		set text_start [${win_name}.f.out.text index end]	} else {		set text_start [[::ChatWindow::GetOutText ${win_name}] index end]	}	set posyx [split $text_start "."]	set text_start "[expr {[lindex $posyx 0]-1}].[lindex $posyx 1]"	set tagid $tagname	if { $tagid == "user" } {		set size [expr {[lindex [::config::getGlobalKey basefont] 1]+[::config::getKey textsize]}]		set font "\"$fontname\" $size $fontstyle"		set tagid [::md5::md5 "$font$fontcolor"]		if { $version == "0.94" } {			${win_name}.f.out.text tag configure $tagid -foreground #$fontcolor -font $font		} else {			[::ChatWindow::GetOutText ${win_name}] tag configure $tagid -foreground #$fontcolor -font $font		}	}	if { $version == "0.94" } {		${win_name}.f.out.text insert end "$txt" $tagid	} else {		[::ChatWindow::GetOutText ${win_name}] insert end "$txt" $tagid	}	if {[::config::getKey chatsmileys]} {		if { $version == "0.94" } {			custom_smile_subst $chatid ${win_name}.f.out.text $text_start end			::smiley::substSmileys ${win_name}.f.out.text $text_start end 0		} else {			custom_smile_subst $chatid [::ChatWindow::GetOutText ${win_name}] $text_start end			::smiley::substSmileys [::ChatWindow::GetOutText ${win_name}] $text_start end 0 0		}	}}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -