cpsn 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: