class Alfred::Handler::Callback

Constants

ENTRIES_KEY

Public Class Methods

new(alfred, opts = {}) click to toggle source
Calls superclass method Alfred::Handler::Base::new
# File lib/alfred/handler/callback.rb, line 23
def initialize(alfred, opts = {})
  super
  @settings = {
    :handler       => 'Callback'                  ,
    :exclusive?    => true                        ,
    :backend_dir   => @core.volatile_storage_path ,
    :backend_file  => 'callback.yaml'             ,
    :handler_order => ( Base_Invoke_Order / 12 )
  }.update(opts)

  @order = @settings[:handler_order]
end

Public Instance Methods

add_entry(entry, feedback_items) click to toggle source
# File lib/alfred/handler/callback.rb, line 95
def add_entry(entry, feedback_items)
  entry.merge!(:timestamp => Time.now)
  key = entry[:key]
  new_entries = entries.merge(key => entry)
  backend[ENTRIES_KEY] = new_entries
  backend[key] = feedback_items
end
backend() click to toggle source
# File lib/alfred/handler/callback.rb, line 116
def backend
  @backend ||= Moneta.new(:YAML,
                          :file => File.join(@settings[:backend_dir],
                                             @settings[:backend_file]))

  unless @backend.key?(ENTRIES_KEY)
    @backend[ENTRIES_KEY] = {}
  end
  @backend
end
entries() click to toggle source
# File lib/alfred/handler/callback.rb, line 111
def entries
  backend[ENTRIES_KEY]
end
feedback?() click to toggle source
# File lib/alfred/handler/callback.rb, line 43
def feedback?
  options.callback
end
on_callback(keyword, entry, feedback_items) click to toggle source
# File lib/alfred/handler/callback.rb, line 87
def on_callback(keyword, entry, feedback_items)
  add_entry(entry, feedback_items)
  Alfred::Util.notify("#{keyword} --callback '#{entry[:key]}'",
                      entry[:title] || entry[:key],
                      entry)
end
on_close() click to toggle source
# File lib/alfred/handler/callback.rb, line 82
def on_close
  backend.close
end
on_feedback() click to toggle source
# File lib/alfred/handler/callback.rb, line 47
def on_feedback
  return unless feedback?
  if entries[options.callback]
    feedback.merge! backend[options.callback]
    @status = :exclusive if @settings[:exclusive?]

  elsif entries.empty?
    # show a warn feedback item
    feedback.add_item(
      {
        :title        => 'No available callback!' ,
        :valid        => 'no'                     ,
        :autocomplete => ''                       ,
        :subtitle     => 'Please check it later. Background task may still be running.',
        :icon         => ::Alfred::Feedback.CoreServicesIcon('Unsupported') ,
      }
    )
  else
    # list available callbacks
    entries.each do |key, entry|
      feedback.add_item(
        {
          :title        => "Feedback Callback: #{key}" ,
          :subtitle     => "#{entry[:timestamp]}",
          :valid        => 'no'                        ,
          :autocomplete => "--callback '#{key}'"       ,
          :icon         => ::Alfred::Feedback.CoreServicesIcon('AliasBadgeIcon') ,
        }.merge(entry)
      )
    end
    @status = :exclusive if @settings[:exclusive?]
  end
end
on_parser() click to toggle source
# File lib/alfred/handler/callback.rb, line 37
def on_parser
  parser.on("--callback [CALLBACK]", "Alfred callback feedback") do |v|
    options.callback = v || ''
  end
end
remove_entry(key) click to toggle source
# File lib/alfred/handler/callback.rb, line 103
def remove_entry(key)
  new_entries = entries.delete(key)
  backend[ENTRIES_KEY] = new_entries
  backend.delete(key)
end