cpsn 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/Rakefile +1 -0
  2. data/VERSION +1 -1
  3. data/bin/cpsn +47 -10
  4. metadata +18 -4
data/Rakefile CHANGED
@@ -16,6 +16,7 @@ begin
16
16
  gem.authors = ["James Bowes"]
17
17
  gem.add_dependency "mechanize", ">= 0.9.3"
18
18
  gem.add_dependency "json", ">= 1.1.7"
19
+ gem.add_dependency "highline"
19
20
  # there's nothing in lib, so ignore it to quelch warnings during install
20
21
  gem.require_paths = ["bin"]
21
22
  gem.extra_rdoc_files = ""
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.0
1
+ 0.8.0
data/bin/cpsn CHANGED
@@ -12,11 +12,15 @@ require 'yaml'
12
12
  require 'optparse'
13
13
  require 'logger'
14
14
  require 'set'
15
+ require 'highline/import'
15
16
 
16
17
  $login_url = "https://store.playstation.com/external/index.vm?returnURL=http://us.playstation.com/uwps/PSNTicketRetrievalGenericServlet"
17
18
  $friend_url = "http://us.playstation.com/playstation/psn/profile/friends?id="
18
19
 
19
20
 
21
+ class NotLoggedInError < Exception
22
+ end
23
+
20
24
  class Cpsn
21
25
 
22
26
  attr_accessor :settings, :groups, :default_group
@@ -34,13 +38,16 @@ class Cpsn
34
38
  @settings = load_settings()
35
39
  @groups = load_groups(@settings)
36
40
 
37
- get_agent(@settings[:username].value, @settings[:password].value,
38
- options[:cookie])
41
+ get_agent(options[:cookie])
39
42
  end
40
43
 
41
44
  def load_settings()
42
45
  @log.debug("Loading settings")
43
- settings = YAML::parse_file(File.expand_path("~/.cpsn/settings.yml"))
46
+ begin
47
+ settings = YAML::parse_file(File.expand_path("~/.cpsn/settings.yml"))
48
+ rescue
49
+ settings = {}.to_yaml
50
+ end
44
51
  return settings
45
52
  end
46
53
 
@@ -82,9 +89,29 @@ class Cpsn
82
89
  end
83
90
 
84
91
 
85
- def get_cookie(username, password)
92
+ def get_username
93
+ ask("username: ")
94
+ end
95
+
96
+ def get_password
97
+ ask("password: ") {|q| q.echo = false}
98
+ end
99
+
100
+ def get_cookie
86
101
  @log.debug("Signing in for new cookie")
87
102
 
103
+ if @settings[:username].nil?
104
+ username = get_username
105
+ else
106
+ username = @settings[:username].value
107
+ end
108
+
109
+ if @settings[:password].nil?
110
+ password = get_password
111
+ else
112
+ password = @settings[:password].value
113
+ end
114
+
88
115
  @agent.redirect_ok = false
89
116
  page = @agent.get($login_url)
90
117
  login_form = page.forms.first
@@ -111,13 +138,17 @@ class Cpsn
111
138
  # this sets the sessionid cookie and others, which we need.
112
139
  @agent.get("http://us.playstation.com/uwps/HandleIFrameRequests?sessionId=" + sessionId)
113
140
 
141
+ if not File.directory? File.expand_path("~/.cpsn")
142
+ Dir::mkdir File.expand_path("~/.cpsn")
143
+ end
144
+
114
145
  @agent.cookie_jar.save_as File.expand_path("~/.cpsn/cookies.yml")
115
146
 
116
147
 
117
148
  @agent.redirect_ok = true
118
149
  end
119
150
 
120
- def get_agent(username, password, force_cookie)
151
+ def get_agent(force_cookie)
121
152
  @log.debug("Creating new user agent")
122
153
  @agent = Mechanize.new
123
154
  @agent.user_agent_alias = 'Mac FireFox'
@@ -126,7 +157,7 @@ class Cpsn
126
157
  if File.exist? File.expand_path("~/.cpsn/cookies.yml") and not force_cookie
127
158
  @agent.cookie_jar.load File.expand_path("~/.cpsn/cookies.yml")
128
159
  else
129
- get_cookie(username, password)
160
+ get_cookie
130
161
  end
131
162
  end
132
163
 
@@ -135,13 +166,16 @@ class Cpsn
135
166
  return _get_friends()
136
167
  rescue Mechanize::ResponseCodeError => response
137
168
  if response.response_code == '403'
138
- get_cookie(@settings[:username].value,
139
- @settings[:password].value)
169
+ get_cookie
140
170
  retry
141
171
  else
142
172
  raise response
143
173
  end
174
+ rescue NotLoggedInError
175
+ get_cookie
176
+ retry
144
177
  end
178
+
145
179
  end
146
180
 
147
181
  def get_friend_status(friend)
@@ -149,8 +183,7 @@ class Cpsn
149
183
  return _get_friend_status(friend)
150
184
  rescue Mechanize::ResponseCodeError => response
151
185
  if response.response_code == '403'
152
- get_cookie(@settings[:username].value,
153
- @settings[:password].value)
186
+ get_cookie
154
187
  retry
155
188
  else
156
189
  raise response
@@ -170,6 +203,10 @@ class Cpsn
170
203
 
171
204
  divs = page.search("div.slotcontent")
172
205
 
206
+ if divs.length == 0
207
+ raise NotLoggedInError
208
+ end
209
+
173
210
  friends = []
174
211
  for div in divs
175
212
  friend = div.attributes["id"]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cpsn
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
4
+ hash: 63
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 7
8
+ - 8
9
9
  - 0
10
- version: 0.7.0
10
+ version: 0.8.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - James Bowes
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-11-21 00:00:00 Z
18
+ date: 2011-11-26 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: mechanize
@@ -49,6 +49,20 @@ dependencies:
49
49
  version: 1.1.7
50
50
  type: :runtime
51
51
  version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: highline
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ hash: 3
61
+ segments:
62
+ - 0
63
+ version: "0"
64
+ type: :runtime
65
+ version_requirements: *id003
52
66
  description: "\n Query PSN friend status from the CLI. Shows useful information like the\n game being played, and what mode or map your friend is playing\n (if available).\n "
53
67
  email: jbowes@repl.ca
54
68
  executables: