Class: DownloadHistory
- Inherits:
-
Object
- Object
- DownloadHistory
- Extended by:
- Logging
- Includes:
- Logging, Singleton
- Defined in:
- lib/download_history.rb
Overview
A singleton of this type manages the previously unfinished or queued downloads.
Constant Summary collapse
- @@log =
init_logger()
- @@history_base =
'rget_queue'
Instance Attribute Summary collapse
-
#history_file ⇒ Object
readonly
Returns the value of attribute history_file.
Instance Method Summary collapse
- #[](ele) ⇒ Object
- #delete(url) ⇒ Object
-
#empty? ⇒ Boolean
is there a history?.
-
#initialize ⇒ DownloadHistory
constructor
load an existing list of unfinished downloads.
- #length ⇒ Object
- #load_history ⇒ Object
-
#previous_download(url) ⇒ Object
find and keep for later reference a previous attempt to load the file from url.
- #queued_URLs ⇒ Object
-
#update(url, opts = {}) ⇒ Object
update te download-history for the file at url.
Methods included from Logging
init_logger, log_level=, log_target=
Methods included from File_Checking
Constructor Details
#initialize ⇒ DownloadHistory
load an existing list of unfinished downloads
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/download_history.rb', line 60 def initialize @log = @@log @log.level = $log_level home = ENV['HOME'] @history = nil @hthread = nil if home hist_dir = home.dup << File::SEPARATOR << ".#{File::basename($0) }" if !File.exist?(hist_dir) begin Dir.mkdir(hist_dir, 0700) rescue Exception => ex @log.error('Cannot create history in ' << hist_dir.dup << ': ' << ex.) @log.error('Aborting') exit false end end @history_file = hist_dir.dup << File::SEPARATOR << @@history_base load_history @log.debug("history-file is in #{@history_file}") else @log.error('Cannot determine the current users home-directory') exit false end end |
Instance Attribute Details
#history_file ⇒ Object (readonly)
Returns the value of attribute history_file.
160 161 162 |
# File 'lib/download_history.rb', line 160 def history_file @history_file end |
Instance Method Details
#[](ele) ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/download_history.rb', line 105 def [](ele) @log.debug('checking for element ' << ele.to_s) prev_dl = nil if(@history && !@history.empty?) if(ele.respond_to?(:to_str)) @history[ele] elsif(ele.respond_to?(:to_int)) @log.debug('looking for queued item #' << (ele).to_s) a = @history.to_a if(ele <= a.size) a[ele - 1][1] else(a.size > 0) raise StandardError.new('Queued items range from 1 to ' << a.size.to_s << '!') end end end end |
#delete(url) ⇒ Object
149 150 151 152 153 154 |
# File 'lib/download_history.rb', line 149 def delete(url) @log.debug('deleting from queue : ' << @history[url].to_s) @history.delete(url) dump load_history end |
#empty? ⇒ Boolean
is there a history?
56 57 58 |
# File 'lib/download_history.rb', line 56 def empty? !@history || @history.empty? end |
#length ⇒ Object
156 157 158 |
# File 'lib/download_history.rb', line 156 def length() return @history.length end |
#load_history ⇒ Object
86 87 88 89 90 91 92 93 |
# File 'lib/download_history.rb', line 86 def load_history if(File.exist?(@history_file) && !File.zero?(@history_file) ) File.open(@history_file, 'r') do |hf| @history = Marshal.load(hf) @log.debug ('history is ' << @history.to_s) end end end |
#previous_download(url) ⇒ Object
find and keep for later reference a previous attempt to load the file from url
101 102 103 |
# File 'lib/download_history.rb', line 101 def previous_download(url) @history ? @history[url] : nil end |
#queued_URLs ⇒ Object
95 96 97 |
# File 'lib/download_history.rb', line 95 def queued_URLs @history ? @history.keys : [] end |
#update(url, opts = {}) ⇒ Object
update te download-history for the file at url.
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/download_history.rb', line 124 def update(url, opts = {}) begin @log.debug('update') @history ||= Hash.new # produces a lot of output if ! @history.has_key?(url) @history[url] = Download.new(url, opts[:local]) elsif(opts[:local]) @history[url].local_file = opts[:local] end @history[url].position = opts[:position] if opts[:position] @history[url].size = opts[:size] if opts[:size] @history[url].updated=DateTime.now @history[url].file_hash @log.debug('dumping history ' << @history.inspect) dump rescue Exception => ex @log.error('CANNOT update history : ' << ex.) @log.error('history is ' << @history.to_s) raise ex end @log.debug('download is ' << @history[url].to_s) end |