2 proc explain-search {target zz category finish response fresponse} {
3 z39 callback [list explain-search-r $target $zz $category $finish \
6 $zz databaseNames IR-Explain-1
7 $zz preferredRecordSyntax explain
8 $zz search "@attrset exp1 @attr 1=1 $category"
11 proc explain-search-r {target zz category finish response fresponse} {
19 set status [$zz responseStatus]
20 if {![string compare [lindex $status 0] NSD]} {
21 $fresponse $target $zz $category $finish
24 set cnt [$zz resultCount]
26 $fresponse $target $zz $category $finish
29 set rr [$zz numberOfRecordsReturned]
30 set cnt [expr $cnt - $rr]
32 $response $target $zz $category $finish
35 z39 callback [list $response $target $zz $category $finish]
40 proc explain-check {target finish} {
43 set time [clock seconds]
44 set etime [lindex $profile($target) 19]
45 if {[string length $etime]} {
46 # Check last explain. If 1 day since last explain do explain egain.
48 if {$time > [expr 180 + $etime]} {
49 explain-start $target $finish
53 # Check last init. If never init or 1 week after do explain anyway.
55 set etime [lindex $profile($target) 18]
56 if {![string length $etime]} {
57 explain-start $target $finish
59 } elseif {$time > [expr 604800 + $etime]} {
60 explain-start $target $finish
64 eval $finish [list $target]
67 proc explain-start {target finish} {
68 show-status Explaining 1 0
69 show-message TargetInfo
70 explain-search $target z39.targetInfo TargetInfo $finish \
71 explain-check-1 explain-check-1f
74 proc explain-check-1f {target zz category finish} {
75 eval $finish [list $target]
78 proc explain-check-1 {target zz category finish} {
79 show-status Explaining 1 0
80 show-message DatabaseInfo
81 explain-search $target z39.databaseInfo DatabaseInfo $finish \
82 explain-check-2 explain-check-1f
85 proc explain-check-2 {target zz category finish} {
86 global profile settingsChanged
88 set trec [z39.targetInfo getExplain 1 targetInfo]
94 [z39.databaseInfo getExplain $no databaseInfo]}]} break
95 puts "--- databaseInfo $no"
99 set db [lindex [lindex $rec 1] 1]
100 if {![string length $db]} break
104 if {[info exists dbList]} {
105 set profile($target) [lreplace $profile($target) 7 7 $dbList]
106 set profile($target) [lreplace $profile($target) 25 25 {}]
110 set data [lindex [lindex [lindex [lindex [lindex $trec 12] 1] 1] 1] 1]
111 if {[string length $data]} {
112 set profile($target) [lreplace $profile($target) 0 0 $data]
115 set l [llength $profile($target)]
117 lappend profile($target) {}
121 set profile($target) [lreplace $profile($target) 8 8 \
122 [lindex [lindex $trec 4] 1]]
123 set profile($target) [lreplace $profile($target) 19 19 \
125 set profile($target) [lreplace $profile($target) 20 20 \
126 [lindex [lindex $trec 1] 1]]
127 set profile($target) [lreplace $profile($target) 21 21 \
128 [lindex [lindex $trec 2] 1]]
129 set profile($target) [lreplace $profile($target) 22 22 \
130 [lindex [lindex $trec 6] 1]]
131 set profile($target) [lreplace $profile($target) 23 23 \
132 [lindex [lindex $trec 7] 1]]
133 set profile($target) [lreplace $profile($target) 24 24 \
134 [lindex [lindex $trec 8] 1]]
135 set profile($target) [lreplace $profile($target) 26 26 \
136 [lindex [lindex $trec 5] 1]]
137 set profile($target) [lreplace $profile($target) 27 27 \
138 [lindex [lindex [lindex [lindex [lindex $trec 10] 1] 1] 1] 1]]
140 set settingsChanged 1
142 eval $finish [list $target]