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 ADDED
@@ -0,0 +1,3 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm 1.9.2@dod-maps
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in dod_maps.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,17 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ dod_maps (0.1.0)
5
+ progressbar
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ progressbar (0.9.0)
11
+
12
+ PLATFORMS
13
+ ruby
14
+
15
+ DEPENDENCIES
16
+ dod_maps!
17
+ progressbar
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
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
data/bin/dod-install ADDED
@@ -0,0 +1,9 @@
1
+ #!/user/bin/env ruby
2
+
3
+ require File.join(File.dirname(__FILE__), "..", "lib", "dod_maps")
4
+ require 'dod_maps/installer'
5
+
6
+ map_name = ARGV[0]
7
+ username = ARGV[1]
8
+
9
+ DodMaps::Installer.new(username).install(map_name)
data/bin/dod-sync ADDED
@@ -0,0 +1,8 @@
1
+ #!/user/bin/env ruby
2
+
3
+ require File.join(File.dirname(__FILE__), "..", "lib", "dod_maps")
4
+ require 'dod_maps/installer'
5
+
6
+ username = ARGV[0]
7
+
8
+ DodMaps::Installer.new(username).sync
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,4 @@
1
+ require File.expand_path('../dod_maps/installer', __FILE__)
2
+
3
+ module DodMaps
4
+ end
@@ -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
@@ -0,0 +1,3 @@
1
+ module DodMaps
2
+ VERSION = "0.2.2"
3
+ end
@@ -0,0 +1,11 @@
1
+ "SteamAppData"
2
+ {
3
+ "RememberPassword" "1"
4
+ "AutoLoginUser" "miwillhite"
5
+ "miwillhite"
6
+ {
7
+ "User" "miwillhite"
8
+ "AccountCreated" "1"
9
+ "hash" ""
10
+ }
11
+ }
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