📄 loging.tcl
字号:
if {$answer == "yes"} { global webcam_dir catch { file delete [file join ${webcam_dir} $date ${email}.cam] } } return 1 } #/////////////////////////////////////////////////////////////////////////////// # ClearAllLogs () # Deletes all the log files proc ClearAllLogs {} { set parent "." catch {set parent [focus]} set answer [::amsn::messageBox "[trans confirm]" yesno question [trans clearlog3] $parent] if {$answer == "yes"} { global log_dir catch { file delete -force ${log_dir} } create_dir $log_dir } } proc ClearAllCamLogs {} { set parent "." catch {set parent [focus]} set answer [::amsn::messageBox "[trans confirm]" yesno question [trans clearwebcamlogs] $parent] if {$answer == "yes"} { global webcam_dir catch { file delete -force ${webcam_dir} } create_dir $webcam_dir } } #/////////////////////////////////////////////////////////////////////////////// #Events logging proc OpenLogEvent { } { StartLog eventlog } proc CloseLogEvent { } { close [LogArray eventlog get] LogArray eventlog unset } #Log Events proc EventLog { txt } { ::log::OpenLogEvent set fileid [LogArray eventlog get] catch {puts -nonewline $fileid "\|\"LGRA[timestamp] \|\"LNOR: $txt\n" } ::log::CloseLogEvent } proc event { event name {status ""} } { switch $event { connect { set eventlog "$name [trans online]" } disconnect { set eventlog "$name [trans offline]" } email { set eventlog "[trans email] $name" } state { set eventlog "$name [trans $status]" } } if {[::config::getKey display_event_$event]} { set eventmenu "[clock format [clock seconds] -format "%H:%M:%S"] : $eventlog" .main.eventmenu.list list insert 0 $eventmenu if { [.main.eventmenu.list list index end] > 100 } { .main.eventmenu.list list delete 100 end } .main.eventmenu.list select 0 } if {[::config::getKey log_event_$event]} { ::log::EventLog $eventlog } } #Check if an event display is activated proc checkeventdisplay { } { if { [::config::getKey display_event_connect] || [::config::getKey display_event_disconnect] || [::config::getKey display_event_email] || [::config::getKey display_event_state] } { return 1 } else { return 0 } } #Check if an event log is activated proc checkeventlog { } { if { [::config::getKey log_event_connect] || [::config::getKey log_event_disconnect] || [::config::getKey log_event_email] || [::config::getKey log_event_state] } { return 1 } else { return 0 } } #Display/log when we connect if we display/log an event proc eventlogin { } { global eventdisconnected if { $eventdisconnected } { set eventdisconnected 0 if { [::log::checkeventdisplay] } { .main.eventmenu.list list insert 0 "[clock format [clock seconds] -format "%H:%M:%S"] : [trans connectedwith [::config::getKey login]]" } if { [::log::checkeventlog] } { ::log::OpenLogEvent set fileid [LogArray eventlog get] catch {puts -nonewline $fileid "\|\"LRED\[[clock format [clock seconds] -format "%d %b %Y %T"]\] [trans connectedwith [::config::getKey login]]\n"} ::log::CloseLogEvent } } } #Display/log when we disconnect if we display/log an event proc eventlogout { } { global eventdisconnected if { [::log::checkeventdisplay] } { .main.eventmenu.list list insert 0 "[clock format [clock seconds] -format "%H:%M:%S"] : [trans disconnectedfrom [::config::getKey login]]" .main.eventmenu.list select 0 } if { [::log::checkeventlog] } { ::log::OpenLogEvent set fileid [LogArray eventlog get] puts -nonewline $fileid "\|\"LRED\[[clock format [clock seconds] -format "%d %b %Y %T"]\] [trans disconnectedfrom [::config::getKey login]]\n\n" ::log::CloseLogEvent } } #/////////////////////////////////////////////////////////////////////////////// # Log what concerns filetransferts proc ftlog {email txt} { if { [::config::getKey keep_logs] } { set fileid [LogArray $email get] if { $fileid == 0 } { StartLog $email set fileid [LogArray $email get] puts -nonewline $fileid "\|\"LRED\[[trans lconvstarted [clock format [clock seconds] -format "%d %b %Y %T"]]\]\n" } puts -nonewline $fileid "\|\"LGRA[timestamp]\|\"LGRE $txt\n" } #Postevent when filetrasfer is logged set evPar(email) email set evPar(txt) txt ::plugins::PostEvent ft_loged evPar } #/////////////////////////////////////////////////////////////////////////////// # Sort the contact by the log size proc sortalllog { } { global log_dir set contactlist [::abook::getAllContacts] set contactsize [list] set months "0 January February March April May June July August September October November December" foreach email $contactlist { set size 0 set file "[file join ${log_dir} ${email}.log]" if { [file exists $file] == 1 } { set size [file size $file] } if { [::config::getKey logsbydate] == 1 } { 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 } { set date [clock scan "1 $date"] set month [clock format $date -format "%m"] if { [string range $month 0 0] == "0" } { set month [string range $month 1 1] } set month "[lindex $months $month]" set year "[clock format $date -format "%Y"]" set date "$month $year" set file [file join ${log_dir} ${date} ${email}.log] if { [file exists $file] } { incr size [file size $file] } } } } set contactsize [lappend contactsize [list $email $size]] } set contactsize [lsort -integer -index 1 -decreasing $contactsize] return $contactsize } proc sortthismonthlog { } { global log_dir set contactlist [::abook::getAllContacts] foreach email $contactlist { set file [file join ${log_dir} ${email}.log] if { [file exists $file] } { set size [file size $file] } else { set size 0 } set contactsize [lappend contactsize [list $email $size]] } set contactsize [lsort -integer -index 1 -decreasing $contactsize] return $contactsize } proc sortmonthlog { month } { global log_dir set contactlist [::abook::getAllContacts] set contactsize [list] foreach email $contactlist { set file [file join ${log_dir} ${month} ${email}.log] if { [file exists $file] } { set size [file size $file] } else { set size 0 } set contactsize [lappend contactsize [list $email $size]] } set contactsize [lsort -integer -index 1 -decreasing $contactsize] return $contactsize } proc getAllDates { } { if { [::config::getKey logsbydate] == 1 } { global log_dir set datelist [list] set datelisterror [list] foreach date [glob -nocomplain -types d -path "${log_dir}/" *] { set idx [expr {[string last "/" $date] + 1}] set date2 [string range $date $idx end] if { [catch { set date2 [clock scan "1 $date2"] set datelist [lappend datelist $date2] } ] } { set datelisterror [lappend datelisterror $date2] } } set datelist [lsort -integer -decreasing $datelist] set datelist2 [list] set months "0 January February March April May June July August September October November December" foreach date $datelist { set month [clock format $date -format "%m"] if { [string range $month 0 0] == "0" } { set month [string range $month 1 1] } set month "[lindex $months $month]" set year "[clock format $date -format "%Y"]" set date "$month $year" set datelist2 [lappend datelist2 $date] } set datelist2 [concat $datelist2 $datelisterror] return $datelist2 } else { return "" } } #/////////////////////////////////////////////////////////////////////////////// # Make a stats window proc stats { } { set w .stats if { [winfo exists $w] } { raise $w return } toplevel $w wm title $w "[trans stats]" wm geometry $w 300x390 set months [::log::getAllDates] frame $w.select label $w.select.text -text [trans stats] -font bigfont combobox::combobox $w.select.list -editable true -highlightthickness 0 -width 15 -bg #FFFFFF -font splainf $w.select.list list delete 0 end $w.select.list list insert end "[trans allmonths]" $w.select.list select "0" $w.select.list list insert end "[trans thismonth]" foreach month $months { $w.select.list list insert end "$month" } pack configure $w.select.text -side top pack configure $w.select.list -side right pack configure $w.select -side top -fill x -expand false frame $w.totalsize label $w.totalsize.txt -text "[trans totalsize] :" pack configure $w.totalsize.txt -side bottom -fill x pack $w.totalsize -side top -fill x -expand false ScrolledWindow $w.list ScrollableFrame $w.list.sf -constrainedwidth 1 $w.list setwidget $w.list.sf pack $w.list -anchor n -side top -fill both -expand true set frame [$w.list.sf getframe] set contactsize [::log::sortalllog] set id 0 set totalsize 0 foreach contact $contactsize { set email [lindex $contact 0] set size [lindex $contact 1] if { $size == 0 } { break } incr id incr totalsize $size set wlabel "label_$id" label $frame.$wlabel -text "$id) $email ([::amsn::sizeconvert $size]b)" pack configure $frame.$wlabel -side top } $w.select.list configure -editable false -command "::log::stats_select $id" $w.totalsize.txt configure -text "[trans totalsize] : [::amsn::sizeconvert $totalsize]b" #frame $w.button button $w.close -text "[trans close]" -command "destroy $w" pack configure $w.close -side bottom -padx 10 -pady 10 #pack configure $w.button -side bottom -fill x -expand true bind $w <<Escape>> "destroy $w" moveinscreen $w 30 } proc stats_select { id wname month} { set w .stats set frame [$w.list.sf getframe] for {set i 1} {$i<=$id} {incr i} { set wlabel "label_$i" destroy $frame.$wlabel } if { [$w.select.list curselection] == 0} { set contactsize [::log::sortalllog] } elseif { [$w.select.list curselection] == 1 } { set contactsize [::log::sortthismonthlog] } else { set contactsize [::log::sortmonthlog $month] } set id 0 set totalsize 0 foreach contact $contactsize { set email [lindex $contact 0] set size [lindex $contact 1] if { $size == 0 } { break } incr id incr totalsize $size set wlabel "label_$id" label $frame.$wlabel -text "$id) $email ([::amsn::sizeconvert $size]b)" pack configure $frame.$wlabel -side top } $w.select.list configure -editable false -command "::log::stats_select $id" $w.totalsize.txt configure -text "[trans totalsize] : [::amsn::sizeconvert $totalsize]b" $w.list.sf yview moveto 0 }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -