miguelbaldi-gcalcliapp 0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +0 -0
- data/README +11 -0
- data/VERSION.yml +0 -0
- data/gcalcliapp +56 -0
- data/lib/gcalcore.rb +119 -0
- metadata +89 -0
data/LICENSE
ADDED
File without changes
|
data/README
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
Para utilizar o cliente google calendar, primeiro você deve instalar suas depend�ncias:
|
2
|
+
SimpleConsole, execute isso no terminal
|
3
|
+
sudo gem install -p http://192.168.160.3:8080 simpleconsole --remote
|
4
|
+
RiCal
|
5
|
+
sudo gem install -p http://192.168.160.3:8080 ri_cal --remote
|
6
|
+
TzInfo
|
7
|
+
sudo gem install -p http://192.168.160.3:8080 tzinfo --remote
|
8
|
+
|
9
|
+
Depois de instalar as dependencias, basta rodar o programa desta forma:
|
10
|
+
ruby gcalcliapp
|
11
|
+
Desta forma ele deve mostra a mensagem de help
|
data/VERSION.yml
ADDED
File without changes
|
data/gcalcliapp
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
#!/usr/bin/ruby -W0
|
2
|
+
#!/usr/bin/env ruby -W0
|
3
|
+
require "rubygems"
|
4
|
+
require "simpleconsole"
|
5
|
+
#require File.dirname(__FILE__) + "/../"
|
6
|
+
require "lib/gcalcore"
|
7
|
+
include GCalendarReader
|
8
|
+
class Controller < SimpleConsole::Controller
|
9
|
+
params :text => {:c => :calendar_url},
|
10
|
+
:string => {:h => :proxy_host, :p => :proxy_port, :u => :proxy_user, :w => :proxy_pass},
|
11
|
+
:int => {:n => :number_days}
|
12
|
+
def default
|
13
|
+
@return_text = "gcalcliapp Usage: ruby gcalcliapp [action] [--options]\n"
|
14
|
+
@return_text = @return_text + "Available actions\n"
|
15
|
+
@return_text = @return_text + " query Search given calendar forward -n number_days\n"
|
16
|
+
@return_text = @return_text + "Available options\n"
|
17
|
+
@return_text = @return_text + " -c, --calendar_url Google calendar URL\n"
|
18
|
+
@return_text = @return_text + " -h, --proxy_host Proxy host\n"
|
19
|
+
@return_text = @return_text + " -p, --proxy_port Proxy port\n"
|
20
|
+
@return_text = @return_text + " -u, --proxy_user Proxy username\n"
|
21
|
+
@return_text = @return_text + " -w, --proxy_pass Proxy password\n"
|
22
|
+
@return_text = @return_text + " -n, --number_days Number of days forward\n"
|
23
|
+
@return_text = @return_text + " calendar_url paramter is mandatory!\n"
|
24
|
+
end
|
25
|
+
def query
|
26
|
+
@return_text = ""
|
27
|
+
@calendar_url = params[:calendar_url]
|
28
|
+
@proxy_host = params[:proxy_host]
|
29
|
+
@proxy_port = params[:proxy_port]
|
30
|
+
@proxy_user = params[:proxy_user]
|
31
|
+
@proxy_pass = params[:proxy_pass]
|
32
|
+
@number_days = params[:number_days]
|
33
|
+
unless @calendar_url.nil? || @number_days.nil?
|
34
|
+
nrb_days_in_sec = @number_days * (60 * 60 * 24)
|
35
|
+
cal = Core.new(@calendar_url,@proxy_host,@proxy_port,@proxy_user,@proxy_pass,nrb_days_in_sec)
|
36
|
+
events = cal.events_in_range(DateTime.now, DateTime.now + nrb_days_in_sec)
|
37
|
+
events.collect do |event|
|
38
|
+
@return_text = @return_text + "#{event.start_time.strftime("%b %d %Y %H:%M") } - #{event.summary}\n"
|
39
|
+
end
|
40
|
+
else
|
41
|
+
@return_text = "--calendar_url and --number_days parameters must not be empty!"
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class View < SimpleConsole::View
|
48
|
+
def default
|
49
|
+
puts @return_text
|
50
|
+
end
|
51
|
+
def query
|
52
|
+
puts @return_text
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
SimpleConsole::Application.run(ARGV, Controller, View)
|
data/lib/gcalcore.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'net/http'
|
3
|
+
require 'uri'
|
4
|
+
require 'time'
|
5
|
+
require 'ri_cal'
|
6
|
+
require "tzinfo"
|
7
|
+
|
8
|
+
# include CalendarReader
|
9
|
+
# g = Calendar.new('http://www.google.com/calendar/ical/example%40gmail.com/public/basic.ics')
|
10
|
+
module GCalendarReader
|
11
|
+
class Core
|
12
|
+
attr_accessor :url, :ical, :xml, :product_id, :version, :scale, :method, :time_zone_name, :time_zone_offset, :events,
|
13
|
+
:proxy_host, :proxy_port, :proxy_user, :proxy_pass, :limit_date
|
14
|
+
|
15
|
+
def initialize(cal_url, proxy_host, proxy_port, proxy_user, proxy_pass, nro_dias)
|
16
|
+
self.events = []
|
17
|
+
unless cal_url.empty?
|
18
|
+
self.url = cal_url
|
19
|
+
self.proxy_host=proxy_host
|
20
|
+
self.proxy_port=proxy_port
|
21
|
+
self.proxy_user=proxy_user
|
22
|
+
self.proxy_pass=proxy_pass
|
23
|
+
self.limit_date=Time.now + nro_dias
|
24
|
+
self.parse!
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def add_event(event, sortit=true)
|
29
|
+
self.events = [] unless self.events.is_a?(Array)
|
30
|
+
self.events << event
|
31
|
+
@events.sort! {|a,b| a.start_time <=> b.start_time } if sortit
|
32
|
+
event
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.parse(cal_url)
|
36
|
+
self.new(cal_url)
|
37
|
+
end
|
38
|
+
|
39
|
+
def parse!
|
40
|
+
self.url =~ /\.ics(?:\?.+)?$/ ? self.parse_from_ical! : self.parse_from_xml!
|
41
|
+
end
|
42
|
+
def parse
|
43
|
+
self.dup.parse!
|
44
|
+
end
|
45
|
+
|
46
|
+
def parse_from_xml!
|
47
|
+
return false # THIS IS NOT IMPLEMENTED YET!!
|
48
|
+
end
|
49
|
+
def parse_from_xml
|
50
|
+
self.dup.parse_from_xml!
|
51
|
+
end
|
52
|
+
|
53
|
+
def parse_from_ical!
|
54
|
+
rawdata = self.calendar_raw_data
|
55
|
+
cals = RiCal.parse_string(rawdata)
|
56
|
+
cal = cals.first
|
57
|
+
cal.events.each do |event|
|
58
|
+
unless event.occurrences({:before => self.limit_date}).size > 1
|
59
|
+
self.add_event(event, false) # (disable sorting until done)
|
60
|
+
else
|
61
|
+
event.occurrences({:before => self.limit_date}).each do |ev|
|
62
|
+
self.add_event(ev, false) # (disable sorting until done)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
@events.reject! {|e| e.start_time.nil?}
|
67
|
+
@events.sort! {|a,b| a.start_time <=> b.start_time }
|
68
|
+
end
|
69
|
+
def parse_from_ical
|
70
|
+
self.dup.parse_from_ical
|
71
|
+
end
|
72
|
+
|
73
|
+
def source_format
|
74
|
+
self.ical ? 'ical' : (self.xml ? 'xml' : nil)
|
75
|
+
end
|
76
|
+
|
77
|
+
def future_events
|
78
|
+
t = DateTime.now
|
79
|
+
events.inject([]) {|future,e| e.start_time > t ? future.push(e) : future}
|
80
|
+
end
|
81
|
+
|
82
|
+
def past_events
|
83
|
+
t = DateTime.now
|
84
|
+
events.inject([]) {|past,e| e.start_time < t ? past.push(e) : past}
|
85
|
+
end
|
86
|
+
|
87
|
+
def events_in_range(start_time, end_time)
|
88
|
+
events.inject([]) {|in_range,e| e.start_time < end_time && e.finish_time > start_time ? in_range.push(e) : in_range}
|
89
|
+
end
|
90
|
+
|
91
|
+
def calendar_raw_data
|
92
|
+
# If you need to use a proxy:
|
93
|
+
unless self.proxy_host.nil?
|
94
|
+
response = Net::HTTP::Proxy(self.proxy_host, self.proxy_port,
|
95
|
+
self.proxy_user, self.proxy_pass).get_response(URI.parse(self.url))
|
96
|
+
case response
|
97
|
+
when Net::HTTPSuccess, Net::HTTPRedirection
|
98
|
+
#puts "Data #{data}"
|
99
|
+
return response.body
|
100
|
+
else
|
101
|
+
response.error!
|
102
|
+
return nil
|
103
|
+
end
|
104
|
+
else
|
105
|
+
response = Net::HTTP.get_response(URI.parse(self.url))
|
106
|
+
case response
|
107
|
+
when Net::HTTPSuccess, Net::HTTPRedirection
|
108
|
+
#puts "Data #{data}"
|
109
|
+
return response.body
|
110
|
+
else
|
111
|
+
response.error!
|
112
|
+
return nil
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: miguelbaldi-gcalcliapp
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: "0.1"
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Miguel Baldi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-09-23 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: simpleconsole
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.1.1
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: ri_cal
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.8.4
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: tzinfo
|
37
|
+
type: :runtime
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.3.13
|
44
|
+
version:
|
45
|
+
description: GCalCli is a client for Google Calendar service.
|
46
|
+
email: miguel.horlle@gmailcom
|
47
|
+
executables: []
|
48
|
+
|
49
|
+
extensions: []
|
50
|
+
|
51
|
+
extra_rdoc_files:
|
52
|
+
- README
|
53
|
+
- LICENSE
|
54
|
+
files:
|
55
|
+
- README
|
56
|
+
- VERSION.yml
|
57
|
+
- gcalcliapp
|
58
|
+
- lib/gcalcore.rb
|
59
|
+
- LICENSE
|
60
|
+
has_rdoc: false
|
61
|
+
homepage: http://github.com/miguelbaldi/ruby-gcalendar-client
|
62
|
+
licenses:
|
63
|
+
post_install_message:
|
64
|
+
rdoc_options:
|
65
|
+
- --inline-source
|
66
|
+
- --charset=UTF-8
|
67
|
+
require_paths:
|
68
|
+
- lib
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: "0"
|
74
|
+
version:
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: "0"
|
80
|
+
version:
|
81
|
+
requirements: []
|
82
|
+
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 1.3.5
|
85
|
+
signing_key:
|
86
|
+
specification_version: 2
|
87
|
+
summary: GCalCli is a client for Google Calendar service.
|
88
|
+
test_files: []
|
89
|
+
|