PerfectlyNormal-Twitorious 0.2.7 → 0.2.8

Sign up to get free protection for your applications and to get access to all the features.
data/TODO CHANGED
@@ -13,5 +13,4 @@
13
13
  * Let the app run in a loop where it constantly prompts for new tweets
14
14
  * Make more of a CLI
15
15
  * Update the timeline and get text-tweets in the app
16
- * Add a user-agent string
17
16
  * Open profile pages if there's a username in the tweet
@@ -1,7 +1,40 @@
1
1
  module Twitorious
2
- VERSION = '0.2.7'
2
+ VERSION = '0.2.8'
3
3
 
4
4
  class TooLongUpdate < StandardError; end
5
+
6
+ # Shamelessly stolen from Rails and stripped of its localization-code.
7
+ # Hard-coded strings in english!
8
+ def self.time_ago_in_words(from, to, include_seconds = false, options = {})
9
+ from_time = Time.mktime(from.year, from.month, from.day, from.hour, from.min, from.sec)
10
+ to_time = Time.mktime(to.year, to.month, to.day, to.hour, to.min, to.sec)
11
+ distance_in_minutes = (((to_time - from_time).abs)/60).round
12
+ distance_in_seconds = ((to_time - from_time).abs).round
13
+
14
+ case distance_in_minutes
15
+ when 0..1
16
+ return distance_in_minutes == 0 ? "less than a minute ago" : "#{distance_in_minutes} minutes ago" unless include_seconds
17
+
18
+ case distance_in_seconds
19
+ when 0..4 then "less than five seconds ago"
20
+ when 5..9 then "less than ten seconds ago"
21
+ when 10..19 then "less than twenty seconds ago"
22
+ when 20..39 then "half a minute ago"
23
+ when 40..59 then "less than a minute ago"
24
+ else "one minute ago"
25
+ end
26
+
27
+ when 2..44 then "#{distance_in_minutes} minutes ago"
28
+ when 45..89 then "about one hour ago"
29
+ when 90..1439 then "about #{(distance_in_minutes.to_f / 60.0).round} hours ago"
30
+ when 1440..2879 then "about a day ago"
31
+ when 2880..43199 then "#{(distance_in_minutes / 1440).round} days ago"
32
+ when 43200..86399 then "about a month ago"
33
+ when 86400..525599 then "about #{(distance_in_minutes / 43200).round} months ago"
34
+ when 525600..1051199 then "about a year ago"
35
+ else "#{(distance_in_minutes / 525600).round} years ago"
36
+ end
37
+ end
5
38
  end
6
39
 
7
40
  require 'twitorious/config'
@@ -14,29 +14,32 @@ module Twitorious
14
14
 
15
15
  def update(status)
16
16
  puts "Updating #{@site[:name]}"
17
- req = Net::HTTP::Post.new(@site[:url].path + "/statuses/update.json")
17
+ req = Net::HTTP::Post.new(@site[:url].path + "/statuses/update.json", { "User-Agent" => "Twitorious/#{Twitorious::VERSION}"})
18
18
  req.basic_auth @site[:user], @site[:pass]
19
19
  req.set_form_data({'status' => status}, ';')
20
20
  res = Net::HTTP.new(@site[:url].host, @site[:url].port).start { |http| http.request(req) }
21
21
  end
22
22
 
23
23
  def fetch_timeline
24
+ puts "Fetching timeline from #{@site[:name]}"
24
25
  res = nil
25
26
  Net::HTTP.start(@site[:url].host, @site[:url].port) do |http|
26
27
  path = @site[:url].path + "/statuses/friends_timeline.json"
27
28
  path += "?count=200&since_id=#{@site[:since_id]}" if @site[:since_id]
28
- req = Net::HTTP::Get.new(path)
29
+ req = Net::HTTP::Get.new(path, { "User-Agent" => "Twitorious/#{Twitorious::VERSION}"})
29
30
  req.basic_auth @site[:user], @site[:pass]
30
31
  res = http.request(req)
31
32
  end
32
33
 
33
34
  updates = JSON.parse(res.body)
35
+ puts " No updates" if updates.empty?
34
36
  return if updates.empty?
35
37
 
38
+ puts " Got #{updates.size} update#{"s" if updates.size > 1}"
36
39
  updates.reverse.each do |update|
37
40
  image = Twitorious::Image.from_url(update["user"]["profile_image_url"], @config.image_store)
38
41
  filename = image ? image.filename : @site[:icon]
39
- @notifier.notify(update["user"]["screen_name"], update["text"], filename)
42
+ @notifier.notify(update["user"]["screen_name"], update["text"], update["created_at"], filename)
40
43
  sleep @config.sleep_between_notifications.to_i
41
44
  end
42
45
 
@@ -1,5 +1,6 @@
1
1
  require 'uri'
2
2
  require 'net/http'
3
+ require 'net/https'
3
4
  require 'digest/md5'
4
5
 
5
6
  module Twitorious
@@ -19,10 +20,10 @@ module Twitorious
19
20
  return Image.new(file) if File.exists?(file)
20
21
 
21
22
  site = URI.parse(url)
22
- res = Net::HTTP.start(site.host, site.port) do |http|
23
- http.get(site.path)
24
- end
25
- puts res.class
23
+ http = Net::HTTP.new(site.host, site.port)
24
+ http.use_ssl = (site.scheme == 'https')
25
+ req = Net::HTTP::Get.new(site.path, { "User-Agent" => "Twitorious/#{Twitorious::VERSION}"})
26
+ res = http.request(req)
26
27
 
27
28
  return nil unless res.class == Net::HTTPOK
28
29
  File.mkdirs(path) if !File.exists?(path)
@@ -8,11 +8,14 @@ module Twitorious
8
8
  @meow = Meow.new("Twitorious")
9
9
  end
10
10
 
11
- def notify(sender, message, icon = nil)
11
+ def notify(sender, message, created, icon = nil)
12
+ created = DateTime.parse(created)
13
+ now = DateTime.parse(Time.now.to_s).new_offset(created.offset)
14
+ time_ago = Twitorious.time_ago_in_words(created, now, true)
12
15
  opts = {}
13
16
  opts[:icon] = icon if icon
14
17
 
15
- @meow.notify("Update from #{sender}", message, opts) do
18
+ @meow.notify("#{sender} (#{time_ago})", message, opts) do
16
19
  urls = URI.extract(message, ['http', 'https'])
17
20
  urls.each do |url|
18
21
  %x{open #{url}}
@@ -5,6 +5,7 @@ module Twitorious
5
5
  end
6
6
 
7
7
  def fetch_timeline
8
+ puts "Starting update at #{Time.now.to_s}"
8
9
  @config.sites.each do |site|
9
10
  case site[:api]
10
11
  when "Twitter":
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "Twitorious"
3
- s.version = "0.2.7"
4
- s.date = "2009-03-26"
3
+ s.version = "0.2.8"
4
+ s.date = "2009-04-01"
5
5
  s.author = "Per Christian B. Viken"
6
6
  s.email = "perchr@northblue.org"
7
7
  s.homepage = "http://eastblue.org/projects/twitorious/"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: PerfectlyNormal-Twitorious
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Per Christian B. Viken
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-26 00:00:00 -07:00
12
+ date: 2009-04-01 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency