diff options
Diffstat (limited to 'lib/sisu/v0/remote.rb')
-rw-r--r-- | lib/sisu/v0/remote.rb | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/lib/sisu/v0/remote.rb b/lib/sisu/v0/remote.rb new file mode 100644 index 00000000..b35f2396 --- /dev/null +++ b/lib/sisu/v0/remote.rb @@ -0,0 +1,170 @@ +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007 Ralph Amissah All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007 Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licenses/gpl.html> + <http://www.gnu.org/copyleft/gpl.html> + <http://www.jus.uio.no/sisu/gpl.fsf> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.jus.uio.no/sisu/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: remote operations, get source from or copy output to remote server + +=end +module SiSU_Remote + require "#{SiSU_lib}/sysenv" + include SiSU_Env + pwd=Dir.pwd + class Put + def initialize(opt) + @opt=opt + @dir=SiSU_Env::Info_env.new(@opt.fns) + @put=unless @opt.fns =~/\._sst$/; @opt.fns + else @opt.fns.gsub(/(.+)?\._sst$/,'\1.ssm') + end + @remote=SiSU_Env::Info_remote.new(@opt) + end + def scp + tell=SiSU_Screen::Ansi.new(@opt.cmd,'Remote placement ->',@put) + tell.dark_grey_title_hi unless @opt.cmd =~/q/ + @remote.scp + end + def rsync + tell=SiSU_Screen::Ansi.new(@opt.cmd,'Remote placement ->',@put) + tell.dark_grey_title_hi unless @opt.cmd =~/q/ + @remote.rsync + end + def scp_base + tell=SiSU_Screen::Ansi.new(@opt.cmd,'Remote placement of base site ->','excluding images') + tell.dark_grey_title_hi unless @opt.cmd =~/q/ + @remote.scp_base + end + def scp_base_all + tell=SiSU_Screen::Ansi.new(@opt.cmd,'Remote placement ->','complete') + tell.dark_grey_title_hi unless @opt.cmd =~/q/ + @remote.scp_base_all + end + def rsync_base + tell=SiSU_Screen::Ansi.new(@opt.cmd,'Remote placement ->','rsync') + tell.dark_grey_title_hi unless @opt.cmd =~/q/ + @remote.rsync_base + end + def rsync_base_sync + tell=SiSU_Screen::Ansi.new(@opt.cmd,'Remote placement ->','rsync and sync') + tell.dark_grey_title_hi unless @opt.cmd =~/q/ + @remote.rsync_base_sync + end + def rsync_sitemaps + tell=SiSU_Screen::Ansi.new(@opt.cmd,'Remote placement sitemaps ->','rsync') + tell.dark_grey_title_hi unless @opt.cmd =~/q/ + @remote.rsync_sitemaps + end + end + class Get + def initialize(opt,get_s) + @opt,@get_s=opt,get_s + @msg,@msgs='',nil + @tell=lambda { SiSU_Screen::Ansi.new(@opt.cmd,@msg,"#{@msgs.inspect if @msgs}") } + end + def fns + require 'open-uri' + require 'pp' + require "#{SiSU_lib}/composite" + @rgx_image=/\{\s*(\S+?\.(?:png|jpg|gif))/ + @rgx_skin=/(?:0~|@)skin:?\s+(\S+)/ #@rgx_skin=/^0~skin\s+(\S+)/ + threads=[] + for requested_page in @get_s + threads << Thread.new(requested_page) do |url| + open(url) do |f| + raise "#{url} not found" unless f + re_fnb=/((?:https?|file):\/\/[^\/ ]+?\/[^\/ ]+?)\/\S+?\/([^\/]+?)\.ss(t)/ #revisit and remove DO + base_uri,fnb,instr=re_fnb.match(url)[1..3] if re_fnb + imagedir= base_uri + '/_sisu/image_local' #check on + doc_skin_dir = /((?:https?|file):\/\/\S+?)\/[^\/]+?\.sst$/.match(url).captures.join + '/_sisu/skin/doc' + #"Got file, and ready to process: #{fnb}.t#{instr}" + downloaded_file=File.new("#{fnb}.-sst",'w+') + images=SiSU_Assemble::Remote_image.new.image(imagedir) + skin=SiSU_Assemble::Remote_image.new.image(doc_skin_dir) + f.collect.each do |r| # work area + skin << r.scan(@rgx_skin).uniq if r =~@rgx_skin + images << r.scan(@rgx_image).uniq if r =~@rgx_image + downloaded_file << r + end + if skin and skin.length > 0 + SiSU_Assemble::Remote_image.new.download_doc_skin(skin) + end + if images and images.length > 1 + images.flatten!.uniq! + @msg,@msgs='downloading images:', [ images.join(',') ] + @tell.call.warn unless @opt.cmd =~/q/ + SiSU_Assemble::Remote_image.new.download_images(images) + @msg,@msgs='downloading done',nil + @tell.call.warn unless @opt.cmd =~/q/ + end + downloaded_file.close + end + end + end + threads.each {|thr| thr.join} if threads #and threads.length > 0 + end + def sisupod + if @get_p.length > 0 #% remote sisupod + require 'net/http' + for requested_pod in @get_p + pod_info=Remote_download.new(requested_pod) + @opt.fns=pod_info.pod.name + Net::HTTP.start(pod_info.pod.site) do |http| + resp=http.get("#{pod_info.pod.path}/#{pod_info.pod.name_source}") + open(pod_info.pod.name,'wb') do |file| + file.write(resp.body) + end + end + end + end + end + end +end +__END__ |