got threading to really work! inserted puts diagnostics to let the user know how...
[zcc.git] / bin / zcc-new
blob206fdfcd3c9c93b140c398770f0861f2c8007620
1 #!/usr/bin/ruby -w
2 ## Jason Ronallo
3 # July, 2007
4 #zcc-new
6 require 'rubygems'
7 require 'zoom'
8 require 'marc'
9 require 'stringio'
10 require 'yaml'
12 $KCODE = 'u'
13 require 'jcode'
14 require 'unicode'
15 require 'highline/import'
16 require 'zcc'
17 require 'tempfile'
18 include ZCC
20 termsize = HighLine::SystemExtensions.terminal_size
21 $term_width = termsize[0]
22 $term_height = termsize[1]
23 $clear_code = %x{clear}
26 ft = HighLine::ColorScheme.new do |cs|
27 cs[:headline] = [ :bold, :white, :on_black ]
28 cs[:horizontal_line] = [ :bold, :white, :on_blue]
29 cs[:even_row] = [ :green ]
30 cs[:odd_row] = [ :magenta ]
31 cs[:marc_tag] = [:bold]
32 cs[:bolder] = [:bold]
33 cs[:field_hilite] = [:bold, :blue]
34 cs[:index] = [:bold, :red]
35 end
36 HighLine.color_scheme = ft
39 ##Setting up testing parameter
40 $testing = ARGV[0]
41 $testing = nil unless $testing == 'v' or $testing == 't'
42 file_mode = true if ARGV[0] == 'file'
43 puts "We're testing " if $testing
44 STDIN.gets if $testing
46 #reading in config from yaml file
47 yamlfile = YAML.load_file( "#{File.expand_path("~")}/.zcc/zcc.yaml" )
48 zservers = yamlfile['zservers']
49 zserver_objects = []
50 zservers.each do |server|
51 zserver_objects << Zserver.new(server[0], server[1], server[2], server[3])
52 end
53 puts zserver_objects.inspect
54 #STDIN.gets
57 labels = yamlfile['labels']
58 scripting = yamlfile['scripting']
59 $procs = yamlfile['procs']
61 TO_SHOW = yamlfile['to_show']
62 HOW_TO_SAVE = yamlfile['save_filename']
63 TIMESTAMP = Time.now.strftime("%Y%m%d%H%M%S")
64 SCRIPTING = yamlfile['scripting_on']
65 EDITING = yamlfile['subfield_editing']
66 CSV = yamlfile['csv_on']
67 LINTER = yamlfile['linter_on']
68 FORMAT_TO_SAVE = yamlfile['save_record_syntax']
71 print $clear_code
72 #printed once when starting the program.
73 say("Zcc, Copyright (C) 2007 Jason Ronallo\nZcc comes with ABSOLUTELY NO WARRANTY.\nZcc is released under the terms of the GPL v.2 or later.\nSee LICENSE for full information.\n")
74 say("Introductory help. For now see: http://zcc.rubyforge.org/zcc.html")
77 groups = zserver_objects.collect do |server|
78 server.group
79 end
80 groups.uniq!
81 groups.sort!
83 loop {
85 search_term = ask("\n<%= color('Enter search. [ISBN, title, LCCN (with dash), or :q to quit]', :bolder) %>\nsearch> ", String){ |q| q.readline = true }
86 exit if search_term == ':q'
89 taken = ResultSet.new
90 groups.each do |group|
91 print $clear_code
92 #puts group
93 servers = zserver_objects.find_all{|server| server.group == group }
94 #puts "searching the following servers: #{servers.join("...\n")}"
95 #puts "gets here"
96 query = Query.new(search_term, servers)
97 results = query.search(10)
98 #print "results.class" ; puts results.class
99 if results.records.empty?
100 puts "There are no results from group #{group} servers!\n\n\n"
101 sleep 2
102 print $clear_code
103 next
105 return_value = zcc_select_good_marc(results, 'multi')
106 taken << results
107 break if return_value == 'done'
110 #puts taken.to_s
111 taken.remove_unselected!
112 #puts taken.to_s
113 continue = true
114 say("\a<%= color('This is your combined result set. We will winnow until you choose done or you unselect all records.', :headline) %>")
115 sleep 3
116 while continue
117 return_value = zcc_select_good_marc(taken, 'multi')
118 continue = false if return_value == 'done'
119 #taken.remove_unselected!
120 #continue = false if taken.length == 0
121 continue = false if taken.selected_length == 0
123 taken.remove_unselected!
124 unless taken.length == 0
125 puts "Here are the records you've selected for processing:"
126 taken.each do |record|
127 puts record.title
129 sleep 2
132 taken.records.each do |final_taken|
134 #SCRIPTING and EDITING
135 if SCRIPTING
136 print $clear_code
137 print "\a"
138 say("#{ZCC.zcc_marc_str_bold(final_taken.to_s, 'record')}")
139 say("<%= color('SCRIPTING...', :headline) %>")
140 final_taken.local_script(scripting)
143 if EDITING
144 print $clear_code
145 print "\a"
146 say("#{ZCC.zcc_marc_str_bold(final_taken.to_s, 'record')}")
147 say("Would you like to <%= color('edit', :headline) %> this record [yes or ANYTHING]? ")
148 edit = STDIN.gets.chomp
149 if edit == ('y' or 'yes')
150 print $clear_code
151 say("#{ZCC.zcc_marc_str_bold(final_taken.to_s, 'record')}")
152 final_taken.edit
156 print $clear_code
157 say("<%= color('#{'-'*20}FINAL RECORD#{'-'*20}', :headline) %>")
158 say("#{ZCC.zcc_marc_str_bold(final_taken.to_s, 'record')}")
159 say("<%= color('#{'-'*20}FINAL RECORD#{'-'*20}\a', :headline) %>")
160 print "Would you like to keep this FINAL RECORD? (ANYTHING or n)"
162 to_save_or_not_to_save = STDIN.gets.chomp
164 if to_save_or_not_to_save == 'n'
165 next #if continue? == 'again'
168 if CSV
169 print $clear_code
170 print "\a"
171 say("#{ZCC.zcc_marc_str_bold(final_taken.to_s, 'record')}")
172 say("<%= color('Label making time!', :headline) %>")
173 csv = final_taken.marc_to_csv(labels)
174 print "Final csv:\n#{csv}\n"
177 print $clear_code
178 clear_code_do = false
181 #saves in the directory in which zcc was run
182 if HOW_TO_SAVE == 'search_term'
183 filename = search_term.gsub(' ','_')
184 elsif HOW_TO_SAVE == 'timestamp'
185 filename = TIMESTAMP
188 FORMAT_TO_SAVE.each do |format|
189 if format == 'marc'
190 aFile = File.new("#{filename}\.mrc","a+")
191 aFile.write(final_taken.marc.to_marc)
192 puts "#{final_taken.marc['245']['a']} saved in #{filename}\.mrc"
193 aFile.close
194 elsif format == 'xml'
195 #puts final_taken.marc.to_xml
196 aFile = File.new("#{filename}\.xml","a+")
197 aFile.write(final_taken.marc.to_xml)
198 puts "#{final_taken.marc['245']['a']} saved in #{filename}\.xml"
199 aFile.close
200 elsif format == 'zebra'
201 #puts final_taken.to_xml
202 File.open("#{File.expand_path("~")}/.zcc/zebra/records/#{Time.now.strftime("%Y%m%d%H%M%S")}\.mrc", "w") do |f|
203 f.write final_taken.marc.to_marc
205 Dir.chdir("#{File.expand_path("~")}/.zcc/zebra") do
206 record_update = `zebraidx update records`
207 puts record_update
209 #saving to koha2 is untested. Please let me know if it doesn't work--or even if it does.
210 elsif format == 'koha2'
211 out = Tempfile.new("koha2-")
212 out << final_taken.marc.to_marc
213 out.close
214 koha_save = `perl /usr/local/koha/intranet/scripts/misc/migration_tools/bulkmarcimport.pl -v 6 -file #{out.path}`
215 puts koha_save
219 if CSV
220 csvFile = File.new("csv-#{filename}\.txt","a+")
221 csvFile.write(csv)
222 puts "csv for #{final_taken.marc['245']['a']} saved in csv-#{filename}\.txt"
223 csvFile.close