class Redwood::SourceManager

Public Class Methods

new() click to toggle source
# File lib/sup/source.rb, line 192
def initialize
  @sources = {}
  @sources_dirty = false
  @source_mutex = Monitor.new
end

Public Instance Methods

[](id) click to toggle source
# File lib/sup/source.rb, line 198
def [](id)
  @source_mutex.synchronize { @sources[id] }
end
add_source(source) click to toggle source
# File lib/sup/source.rb, line 202
def add_source source
  @source_mutex.synchronize do
    raise "duplicate source!" if @sources.include? source
    @sources_dirty = true
    max = @sources.max_of { |id, s| s.is_a?(DraftLoader) || s.is_a?(SentLoader) ? 0 : id }
    source.id ||= (max || 0) + 1
    ##source.id += 1 while @sources.member? source.id
    @sources[source.id] = source
  end
end
load_sources(fn=Redwood::SOURCE_FN) click to toggle source
# File lib/sup/source.rb, line 226
def load_sources fn=Redwood::SOURCE_FN
  source_array = Redwood::load_yaml_obj(fn) || []
  @source_mutex.synchronize do
    @sources = Hash[*(source_array).map { |s| [s.id, s] }.flatten]
    @sources_dirty = false
  end
end
save_sources(fn=Redwood::SOURCE_FN, force=false) click to toggle source
# File lib/sup/source.rb, line 234
def save_sources fn=Redwood::SOURCE_FN, force=false
  @source_mutex.synchronize do
    if @sources_dirty || force
      Redwood::save_yaml_obj sources, fn, false, true
    end
    @sources_dirty = false
  end
end
source_for(uri) click to toggle source
# File lib/sup/source.rb, line 218
def source_for uri
  expanded_uri = Source.expand_filesystem_uri(uri)
  sources.find { |s| s.is_source_for? expanded_uri }
end
sources() click to toggle source
# File lib/sup/source.rb, line 213
def sources
  ## favour the inbox by listing non-archived sources first
  @source_mutex.synchronize { @sources.values }.sort_by { |s| s.id }.partition { |s| !s.archived? }.flatten
end
unusual_sources() click to toggle source
# File lib/sup/source.rb, line 224
def unusual_sources; sources.find_all { |s| !s.usual? }; end
usual_sources() click to toggle source
# File lib/sup/source.rb, line 223
def usual_sources; sources.find_all { |s| s.usual? }; end