dod_maps 0.2.2
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.
- data/.gitignore +3 -0
- data/.rvmrc +1 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +17 -0
- data/README +17 -0
- data/Rakefile +2 -0
- data/bin/dod-install +9 -0
- data/bin/dod-sync +8 -0
- data/dod_maps.gemspec +23 -0
- data/lib/dod_maps.rb +4 -0
- data/lib/dod_maps/installer.rb +139 -0
- data/lib/dod_maps/version.rb +3 -0
- data/spec/fixtures/SteamAppData.vdf +11 -0
- metadata +90 -0
data/.gitignore
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm 1.9.2@dod-maps
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
data/README
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
dod-maps
|
2
|
+
========
|
3
|
+
|
4
|
+
A one-click installer for Day of Defeat maps.
|
5
|
+
---------------------------------------------
|
6
|
+
|
7
|
+
Pulls maps from dod-maps.heroku.com that aren't already installed on the local system. Also provides the ability to download a requested map. Uses Textmate's Cmd+T type search for remote map files.
|
8
|
+
|
9
|
+
# Prompts prior to overwrite
|
10
|
+
`dod-install approximate_file_name`
|
11
|
+
|
12
|
+
or
|
13
|
+
|
14
|
+
# Installs all maps that aren't on the local system
|
15
|
+
`dod-sync`
|
16
|
+
|
17
|
+
|
data/Rakefile
ADDED
data/bin/dod-install
ADDED
data/bin/dod-sync
ADDED
data/dod_maps.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "dod_maps/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "dod_maps"
|
7
|
+
s.version = DodMaps::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Matthew Willhite"]
|
10
|
+
s.email = ["mwillhite@elctech.com"]
|
11
|
+
s.homepage = "http://dod-maps.heroku.com"
|
12
|
+
s.summary = %q{ Pulls maps from dod-maps.heroku.com that aren't already installed on the local system' }
|
13
|
+
s.description = %q{ A one-click installer for Day of Defeat maps. }
|
14
|
+
|
15
|
+
s.rubyforge_project = "dod_maps"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
s.add_dependency "progressbar"
|
23
|
+
end
|
data/lib/dod_maps.rb
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
%w( net/http open-uri json progressbar ).each { |dependency| require dependency }
|
2
|
+
|
3
|
+
module DodMaps
|
4
|
+
class Installer
|
5
|
+
STEAM_PATH = File.join(ENV['HOME'], "Library", "Application Support", "Steam")
|
6
|
+
|
7
|
+
def initialize(username=nil)
|
8
|
+
@username = username
|
9
|
+
@maps_dir = File.join(STEAM_PATH, "SteamApps", steam_username, "day of defeat source", "dod", "maps")
|
10
|
+
end
|
11
|
+
|
12
|
+
def install(pattern)
|
13
|
+
|
14
|
+
make_request("/maps.json?q=#{pattern}") do |maps|
|
15
|
+
if maps.any?
|
16
|
+
if maps.size > 1
|
17
|
+
puts "Which one do you want?"
|
18
|
+
options = maps.map { |r| r["file_file_name"] }.push('all', 'none')
|
19
|
+
|
20
|
+
options.each_with_index do |option, i|
|
21
|
+
puts "#{i}: #{options[i]}"
|
22
|
+
end
|
23
|
+
|
24
|
+
answer = $stdin.gets.chomp
|
25
|
+
|
26
|
+
case options[answer.to_i]
|
27
|
+
when 'all'
|
28
|
+
download_maps maps
|
29
|
+
when 'none'
|
30
|
+
exit 0
|
31
|
+
else
|
32
|
+
download_maps [maps[answer.to_i]]
|
33
|
+
end
|
34
|
+
else
|
35
|
+
download_maps maps
|
36
|
+
end
|
37
|
+
else
|
38
|
+
puts "No maps found."
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def sync
|
44
|
+
# TODO
|
45
|
+
# Make a new api call on the server side, just returns all of the maps if no query string is supplied
|
46
|
+
make_request("/maps.json") do |maps|
|
47
|
+
local_maps = Dir.glob("#{@maps_dir}/*.bsp").map{ |m| File.split(m).last }
|
48
|
+
maps.delete_if do |map|
|
49
|
+
local_maps.include? map["file_file_name"]
|
50
|
+
end
|
51
|
+
download_maps maps, true
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
# Sample file: SteamAppData.vdf
|
58
|
+
#
|
59
|
+
# "SteamAppData"
|
60
|
+
# {
|
61
|
+
# "RememberPassword" "1"
|
62
|
+
# "AutoLoginUser" "miwillhite"
|
63
|
+
# "miwillhite"
|
64
|
+
# {
|
65
|
+
# "User" "miwillhite"
|
66
|
+
# "AccountCreated" "1"
|
67
|
+
# "hash" ""
|
68
|
+
# }
|
69
|
+
# }
|
70
|
+
def steam_username
|
71
|
+
path = File.join(STEAM_PATH, "config", "SteamAppData.vdf")
|
72
|
+
|
73
|
+
File.open(path, "r").each do |line|
|
74
|
+
if line.match(/"AutoLoginUser"\s*"(\w+)"/) and @username.nil?
|
75
|
+
@username = $1
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
begin
|
80
|
+
raise "Please pass your Steam username as the second parameter" if @username.nil?
|
81
|
+
rescue Exception => e
|
82
|
+
puts e.message
|
83
|
+
puts e.backtrace.inspect
|
84
|
+
end
|
85
|
+
|
86
|
+
@username
|
87
|
+
end
|
88
|
+
|
89
|
+
def make_request(path)
|
90
|
+
Net::HTTP.start("dod-maps.heroku.com") do |http|
|
91
|
+
maps_response = JSON.parse http.get(path).body
|
92
|
+
|
93
|
+
yield maps_response
|
94
|
+
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def download_maps(maps, force=false)
|
99
|
+
maps.each do |map|
|
100
|
+
progress_bar = nil
|
101
|
+
|
102
|
+
new_map_location = File.join(@maps_dir, map["file_file_name"])
|
103
|
+
|
104
|
+
if !force and File.exists? new_map_location
|
105
|
+
puts "Would you like to overwrite the following map? (y/n)"
|
106
|
+
puts map['file_file_name']
|
107
|
+
answer = $stdin.gets.chomp
|
108
|
+
end
|
109
|
+
|
110
|
+
if(answer.nil? || answer == 'y')
|
111
|
+
new_map_file = open(new_map_location, 'w')
|
112
|
+
else
|
113
|
+
next
|
114
|
+
end
|
115
|
+
|
116
|
+
begin
|
117
|
+
open(map["file_url"], :content_length_proc => lambda { |t|
|
118
|
+
if t && 0 < t
|
119
|
+
progress_bar = ProgressBar.new("#{map["file_file_name"]}", t)
|
120
|
+
progress_bar.file_transfer_mode
|
121
|
+
end
|
122
|
+
},
|
123
|
+
:progress_proc => lambda { |s|
|
124
|
+
progress_bar.set s if progress_bar
|
125
|
+
}) do |resp|
|
126
|
+
resp.each_line do |segment|
|
127
|
+
new_map_file.write(segment)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
ensure
|
131
|
+
new_map_file.close()
|
132
|
+
end
|
133
|
+
|
134
|
+
progress_bar.finish
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
end
|
metadata
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dod_maps
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 2
|
8
|
+
- 2
|
9
|
+
version: 0.2.2
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Matthew Willhite
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-01-21 00:00:00 -08:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: progressbar
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
33
|
+
description: " A one-click installer for Day of Defeat maps. "
|
34
|
+
email:
|
35
|
+
- mwillhite@elctech.com
|
36
|
+
executables:
|
37
|
+
- dod-install
|
38
|
+
- dod-sync
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- .gitignore
|
45
|
+
- .rvmrc
|
46
|
+
- Gemfile
|
47
|
+
- Gemfile.lock
|
48
|
+
- README
|
49
|
+
- Rakefile
|
50
|
+
- bin/dod-install
|
51
|
+
- bin/dod-sync
|
52
|
+
- dod_maps.gemspec
|
53
|
+
- lib/dod_maps.rb
|
54
|
+
- lib/dod_maps/installer.rb
|
55
|
+
- lib/dod_maps/version.rb
|
56
|
+
- spec/fixtures/SteamAppData.vdf
|
57
|
+
has_rdoc: true
|
58
|
+
homepage: http://dod-maps.heroku.com
|
59
|
+
licenses: []
|
60
|
+
|
61
|
+
post_install_message:
|
62
|
+
rdoc_options: []
|
63
|
+
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
segments:
|
72
|
+
- 0
|
73
|
+
version: "0"
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
segments:
|
80
|
+
- 0
|
81
|
+
version: "0"
|
82
|
+
requirements: []
|
83
|
+
|
84
|
+
rubyforge_project: dod_maps
|
85
|
+
rubygems_version: 1.3.7
|
86
|
+
signing_key:
|
87
|
+
specification_version: 3
|
88
|
+
summary: Pulls maps from dod-maps.heroku.com that aren't already installed on the local system'
|
89
|
+
test_files:
|
90
|
+
- spec/fixtures/SteamAppData.vdf
|