class Redwood::BaseIndex

Public Class Methods

new(dir=BASE_DIR) click to toggle source
# File lib/sup/index.rb, line 30
def initialize dir=BASE_DIR
  @dir = dir
  @lock = Lockfile.new lockfile, :retries => 0, :max_age => nil
  @sync_worker = nil
  @sync_queue = Queue.new
end

Public Instance Methods

add_message(m;) click to toggle source
# File lib/sup/index.rb, line 85
def add_message m; unimplemented end
build_message(id) click to toggle source

Load message with the given message-id from the index

# File lib/sup/index.rb, line 131
def build_message id
  unimplemented
end
contains?(m;) click to toggle source
# File lib/sup/index.rb, line 97
def contains? m; contains_id? m.id end
contains_id?(id) click to toggle source
# File lib/sup/index.rb, line 93
def contains_id? id
  unimplemented
end
delete(id) click to toggle source

Delete message with the given message-id from the index

# File lib/sup/index.rb, line 136
def delete id
  unimplemented
end
each_id(query={}) click to toggle source

Yield each message-id matching query

# File lib/sup/index.rb, line 147
def each_id query={}
  unimplemented
end
each_id_by_date(query={}) click to toggle source

Yields a message-id and message-building lambda for each message that matches the given query, in descending date order. You should probably not call this on a block that doesn't break rather quickly because the results can be very large.

# File lib/sup/index.rb, line 109
def each_id_by_date query={}
  unimplemented
end
each_message(query={}) { |build_message(id)| ... } click to toggle source

Yield each message matching query

# File lib/sup/index.rb, line 152
def each_message query={}, &b
  each_id query do |id|
    yield build_message(id)
  end
end
each_message_in_thread_for(m, opts={}) click to toggle source

yield all messages in the thread containing 'm' by repeatedly querying the index. yields pairs of message ids and message-building lambdas, so that building an unwanted message can be skipped in the block if desired.

only two options, :limit and :skip_killed. if :skip_killed is true, stops loading any thread if a message with a :killed flag is found.

# File lib/sup/index.rb, line 126
def each_message_in_thread_for m, opts={}
  unimplemented
end
empty?() click to toggle source
# File lib/sup/index.rb, line 103
def empty?; size == 0 end
is_a_deprecated_ferret_index?() click to toggle source
# File lib/sup/index.rb, line 26
def is_a_deprecated_ferret_index?; false end
load() click to toggle source
# File lib/sup/index.rb, line 69
def load
  SourceManager.load_sources
  load_index
end
load_contacts(email_addresses, h={}) click to toggle source

Given an array of email addresses, return an array of Person objects that have sent mail to or received mail from any of the given addresses.

# File lib/sup/index.rb, line 142
def load_contacts email_addresses, h={}
  unimplemented
end
load_index() click to toggle source
# File lib/sup/index.rb, line 81
def load_index
  unimplemented
end
lock() click to toggle source
# File lib/sup/index.rb, line 39
def lock
  debug "locking #{lockfile}..."
  begin
    @lock.lock
  rescue Lockfile::MaxTriesLockError
    raise LockError, @lock.lockinfo_on_disk
  end
end
lockfile() click to toggle source
# File lib/sup/index.rb, line 37
def lockfile; File.join @dir, "lock" end
num_results_for(query={}) click to toggle source

Return the number of matches for query in the index

# File lib/sup/index.rb, line 114
def num_results_for query={}
  unimplemented
end
optimize() click to toggle source

Implementation-specific optimization step

# File lib/sup/index.rb, line 159
def optimize
  unimplemented
end
parse_query(s) click to toggle source

parse a query string from the user. returns a query object that can be passed to any index method with a 'query' argument.

raises a ParseError if something went wrong.

# File lib/sup/index.rb, line 176
def parse_query s
  unimplemented
end
run_sync_worker() click to toggle source
# File lib/sup/index.rb, line 202
def run_sync_worker
  while m = @sync_queue.deq
    return if m == :die
    update_message_state m
    # Necessary to keep Xapian calls from lagging the UI too much.
    sleep 0.03
  end
end
save() click to toggle source
# File lib/sup/index.rb, line 74
def save
  debug "saving index and sources..."
  FileUtils.mkdir_p @dir unless File.exists? @dir
  SourceManager.save_sources
  save_index
end
save_index(fn) click to toggle source
# File lib/sup/index.rb, line 89
def save_index fn
  unimplemented
end
save_thread(t) click to toggle source
# File lib/sup/index.rb, line 180
def save_thread t
  t.each_dirty_message do |m|
    if @sync_worker
      @sync_queue << m
    else
      update_message_state m
    end
    m.clear_dirty
  end
end
size() click to toggle source
# File lib/sup/index.rb, line 99
def size
  unimplemented
end
source_for_id(id) click to toggle source

Return the id source of the source the message with the given message-id was synced from

# File lib/sup/index.rb, line 165
def source_for_id id
  unimplemented
end
start_lock_update_thread() click to toggle source
# File lib/sup/index.rb, line 48
def start_lock_update_thread
  @lock_update_thread = Redwood::reporting_thread("lock update") do
    while true
      sleep 30
      @lock.touch_yourself
    end
  end
end
start_sync_worker() click to toggle source
# File lib/sup/index.rb, line 191
def start_sync_worker
  @sync_worker = Redwood::reporting_thread('index sync') { run_sync_worker }
end
stop_lock_update_thread() click to toggle source
# File lib/sup/index.rb, line 57
def stop_lock_update_thread
  @lock_update_thread.kill if @lock_update_thread
  @lock_update_thread = nil
end
stop_sync_worker() click to toggle source
# File lib/sup/index.rb, line 195
def stop_sync_worker
  return unless worker = @sync_worker
  @sync_worker = nil
  @sync_queue << :die
  worker.join
end
unlock() click to toggle source
# File lib/sup/index.rb, line 62
def unlock
  if @lock && @lock.locked?
    debug "unlocking #{lockfile}..."
    @lock.unlock
  end
end
update_message(m;) click to toggle source
# File lib/sup/index.rb, line 86
def update_message m; unimplemented end
update_message_state(m;) click to toggle source
# File lib/sup/index.rb, line 87
def update_message_state m; unimplemented end