Jump to content

Sahil

Member
  • Posts

    1
  • Joined

  • Last visited

Sahil's Achievements

Helping Hand

Helping Hand (3/5)

0

Reputation

  1. I have written a workflow that gives output the attached file. The way I have added in alfred feedback is this: fb.add_item({ :uid => project["id"], :title => project["content"], :subtitle => [name,dueDate].map(&:to_s).join(''), :arg => url, :autocomplete => project["content"], :valid => "yes" }) In the search results, I want to search by both title and subtitle. How do we do this? Currently it looks only in the title. Here is the complete code: #!/usr/bin/env ruby # encoding: utf-8 ($LOAD_PATH << File.expand_path("..", __FILE__)).uniq! require "rubygems" unless defined? Gem # rubygems is only needed in 1.8 require "bundle/bundler/setup" require "alfred" require "net/http" require "json" Alfred.with_friendly_error do |alfred| ALFRED = alfred # prepend ! in query to refresh is_refresh = false if ARGV[0].start_with? '!' is_refresh = true ARGV[0] = ARGV[0].gsub(/!/, '') end # contants QUERY = ARGV[0] BASECAMP_TOKEN = ARGV[1] BASECAMP2_COMPANY_IDS = ARGV[2].split(",") BASECAMP3_COMPANY_IDS = ARGV[3].split(",") def get_uri(api, company_id, x) if api == 2 "https://basecamp.com/#{company_id}/api/v1/projects.json" else "https://3.basecampapi.com/#{company_id}/projects/recordings.json?type=Todo&page=#{x}" end end def get_project_json(api, company_id) # use system curl because system ruby on osx is 2.0.0 # 2.0.0 does not have updated openssl bindings for Net:HTTP # el capitan has an issue with libcurl based solutions finding libcurl # so, just curl the joker x = 0 parsed = [] loop do x = x + 1 uri = get_uri(api, company_id, x) # puts uri request = <<-EOF curl -s -H "Authorization: Bearer #{BASECAMP_TOKEN}" \ -H 'User-Agent: alfred2-basecamp (john.pinkerton@me.com)' \ #{uri} EOF response = `#{request}` parsed1 = JSON.parse(response) parsed = parsed + parsed1 break if x > 0 end # puts parsed.length # request = <<-EOF # curl -s -H "Authorization: Bearer #{BASECAMP_TOKEN}" \ # -H 'User-Agent: alfred2-basecamp (john.pinkerton@me.com)' \ # #{uri}&page=#{x} # EOF # response = `#{request}` # parsed = JSON.parse(response) # puts parsed begin throw_token_error if parsed["error"] rescue parsed end end def load_projects fb = ALFRED.feedback b2_projects = BASECAMP2_COMPANY_IDS.map{ |company| get_project_json(2, company) } b3_projects = BASECAMP3_COMPANY_IDS.map{ |company| get_project_json(3, company) } projects_collection = b2_projects + b3_projects projects_collection.each do |projects| projects.each do |project| url = project["app_url"] || project["url"] url.sub!("basecampapi", "basecamp") if url.include?("basecampapi") name = "" names = [] if project["assignees"].length > 0 project["assignees"].each do |assignee| names << assignee['name'] name = names.join(', ') name = '(' + name + ')' name = name + ' ' end end dueDate = project['due_on'] if dueDate dueDate = 'Due Date: ' + dueDate end fb.add_item({ :uid => project["id"], :title => [project["content"]].map(&:to_s).join(''), :subtitle => [name,dueDate].map(&:to_s).join(''), :arg => url, :autocomplete => [project["content"],name,dueDate].map(&:to_s).join(''), :valid => "yes" }) end end fb end def throw_token_error fb = ALFRED.feedback if BASECAMP_TOKEN != "" title = "You need a new token" else title = "You need a token" end fb.add_item({ :uid => "gettoken", :title => title, :subtitle => "Press enter and follow the instructions", :arg => "https://alfred2-basecamp-auth.herokuapp.com" }) puts fb.to_alfred exit end throw_token_error if BASECAMP_TOKEN == "" ALFRED.with_rescue_feedback = true ALFRED.with_cached_feedback do use_cache_file :expire => 86400 end if !is_refresh and fb = ALFRED.feedback.get_cached_feedback # cached feedback is valid puts fb.to_alfred(ARGV[0]) else fb = load_projects fb.put_cached_feedback puts fb.to_alfred(ARGV[0]) end end
×
×
  • Create New...