six-updater 0.17.1-i386-mingw32

Sign up to get free protection for your applications and to get access to all the features.
data/README ADDED
@@ -0,0 +1,3 @@
1
+ == six-arma-updater
2
+
3
+ You should document your project here.
data/Rakefile ADDED
@@ -0,0 +1,80 @@
1
+ #
2
+ # To change this template, choose Tools | Templates
3
+ # and open the template in the editor.
4
+
5
+
6
+ require 'rubygems'
7
+ require 'rake'
8
+ require 'rake/clean'
9
+ require 'rake/gempackagetask'
10
+ require 'rake/rdoctask'
11
+ require 'rake/testtask'
12
+
13
+ spec = Gem::Specification.new do |s|
14
+ s.platform = "i386-mingw32"
15
+ s.name = 'six-updater'
16
+ s.version = '0.17.1'
17
+ s.has_rdoc = true
18
+ s.extra_rdoc_files = ['README', 'LICENSE']
19
+ s.summary = 'Your summary here'
20
+ s.description = s.summary
21
+ s.author = 'Sickboy'
22
+ s.email = 'sb@dev-heaven.net'
23
+ s.add_dependency('win32-api', '= 1.4.6')
24
+ s.add_dependency('win32-process', '>= 0.6.0')
25
+ s.add_dependency('win32-shortcut', '>= 0.2.3')
26
+ s.add_dependency('log4r', '>= 1.1.2')
27
+ s.add_dependency('six-uac', '>= 0.1.0')
28
+ s.add_dependency('six-rsync', '>= 0.3.4')
29
+ s.files = %w(LICENSE README Rakefile) + Dir.glob("{bin,spec}/**/*") + Dir.glob("lib/*/**/*.rb")
30
+ s.require_path = "lib"
31
+ s.bindir = "bin"
32
+ s.executables = ['six-updater']
33
+ end
34
+
35
+ spec2 = Gem::Specification.new do |s|
36
+ s.name = 'six-updater'
37
+ s.version = '0.17.1'
38
+ s.has_rdoc = true
39
+ s.extra_rdoc_files = ['README', 'LICENSE']
40
+ s.summary = 'Your summary here'
41
+ s.description = s.summary
42
+ s.author = 'Sickboy'
43
+ s.email = 'sb@dev-heaven.net'
44
+ #s.add_dependency('win32-api', '= 1.4.6')
45
+ #s.add_dependency('win32-process', '>= 0.6.0')
46
+ #s.add_dependency('win32-shortcut', '>= 0.2.3')
47
+ s.add_dependency('log4r', '>= 1.1.2')
48
+ #s.add_dependency('six-uac', '>= 0.1.0')
49
+ s.add_dependency('six-rsync', '>= 0.3.4')
50
+ s.files = %w(LICENSE README Rakefile) + Dir.glob("{bin,spec}/**/*") + Dir.glob("lib/*/**/*.rb")
51
+ s.require_path = "lib"
52
+ s.bindir = "bin"
53
+ s.executables = ['six-updater']
54
+ end
55
+
56
+ Rake::GemPackageTask.new(spec) do |p|
57
+ p.gem_spec = spec
58
+ p.need_tar = true
59
+ p.need_zip = true
60
+ end
61
+
62
+ Rake::GemPackageTask.new(spec2) do |p|
63
+ p.gem_spec = spec2
64
+ p.need_tar = true
65
+ p.need_zip = true
66
+ end
67
+
68
+
69
+ Rake::RDocTask.new do |rdoc|
70
+ files =['README', 'LICENSE', 'lib/**/*.rb']
71
+ rdoc.rdoc_files.add(files)
72
+ rdoc.main = "README" # page to start on
73
+ rdoc.title = "six-arma-updater Docs"
74
+ rdoc.rdoc_dir = 'doc/rdoc' # rdoc output folder
75
+ rdoc.options << '--line-numbers'
76
+ end
77
+
78
+ Rake::TestTask.new do |t|
79
+ t.test_files = FileList['test/**/*.rb']
80
+ end
data/bin/six-updater ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/ruby
2
+ # encoding: utf-8
3
+
4
+ begin
5
+ load 'six/updater-app.rb'
6
+ rescue => e
7
+ puts e.class, e.message, e.backtrace.join("\n")
8
+ begin
9
+ require 'fileutils'
10
+ path = File.join(Six::Updater::DATA_PATH, 'logs')
11
+ FileUtils.mkdir_p path unless File.exists?(path)
12
+ File.open(File.join(path, "six-updater-error.log"), 'w') {|f| f.puts e.class, e.message, e.backtrace.join("\n")}
13
+ rescue
14
+ puts "ERROR: #{$!}"
15
+ end
16
+ sleep 10
17
+ end
@@ -0,0 +1,91 @@
1
+ require 'six/updater/options'
2
+ require 'six/updater'
3
+
4
+ # TODO: Should exec outside the module
5
+ module Six
6
+ module Updater
7
+ PID_FILE = File.join(DATA_PATH, "#{COMPONENT}.pid")
8
+ if not defined?(Ocra)
9
+ #Signal.trap("EXIT") { exit_app }
10
+ #Signal.trap("INT") { exit_app }
11
+ #Signal.trap("TERM") { exit_app }
12
+ #Signal.trap("KILL") { exit_app }
13
+
14
+ if File.exist?(PID_FILE)
15
+ pid = File.open(PID_FILE) {|file| file.read}
16
+ pid = pid.to_i
17
+ found = false
18
+ begin
19
+ out = %x[tasklist]
20
+ out.split("\n").each do |line|
21
+ line[/\Aruby\.exe[\t| ]*([0-9]*)/]
22
+ p = $1
23
+ if p
24
+ if p.size > 0
25
+ found = true if pid == p.to_i
26
+ end
27
+ end
28
+ end
29
+ rescue
30
+ log.warn "Failed checking tasklist for #{pid}"
31
+ log.debug "#{$!}"
32
+ end
33
+ if found
34
+ log.error "The program seems to be already running (PID: #{pid}). Please wait/close the other application first."
35
+ log.info "If you believe this is in error, please delete #{PID_FILE}"
36
+ log.info "If the file doesn't exist, you are probably NOT running this software 'As Administrator'"
37
+ sleep 15
38
+ Process.exit
39
+ else
40
+ FileUtils.rm_f PID_FILE
41
+ end
42
+ end
43
+ File.open(PID_FILE, 'w') {|f| f.puts Process.pid}
44
+
45
+ initialize
46
+ mods = []
47
+ puts
48
+ log.info "Processing:"
49
+ @config[:folders].each_with_index do |config, index|
50
+ #unless config[:skip] || config[:disabled]
51
+ # TODO: Only display message when there are actually todo's
52
+ puts
53
+ log.info "= #{config[:folder]}"
54
+ mod = Mod.new(config, @config)
55
+ mods[index] = mod
56
+ @todo.each { |t| mod.send t }
57
+ # end
58
+ end
59
+
60
+ puts
61
+ log.info "Postprocessing:"
62
+ @config[:folders].each_with_index do |config, index|
63
+ # unless config[:skip] || config[:disabled]
64
+ mod = mods[index]
65
+ if mod.changed || @config[:force]
66
+ # TODO: Only display message when there are actually todo's
67
+ puts
68
+ log.info "= #{config[:folder]}"
69
+ @second_todo.each { |t| mod.send t }
70
+ end
71
+ # end
72
+ end
73
+
74
+ puts
75
+ log.info "Processing general tasks:"
76
+ @general_todo.each { |t| Six::Updater.send t }
77
+
78
+ puts
79
+ log.info "Ready!"
80
+ beta_msg
81
+
82
+ FileUtils.rm_f PID_FILE if File.exist?(PID_FILE)
83
+
84
+ if @config[:wait]
85
+ puts
86
+ log.info "Please press ENTER to exit"
87
+ STDIN.gets
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,440 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'yaml'
4
+ require 'fileutils'
5
+
6
+ gem 'log4r', '>= 1.1.2'
7
+ require 'log4r'
8
+ require 'digest/md5'
9
+
10
+ case RUBY_PLATFORM
11
+ when /-mingw32$/, /-mswin32$/
12
+ gem 'win32-api', '= 1.4.6'
13
+ gem 'win32-shortcut'
14
+ require 'win32/shortcut'
15
+ gem 'win32-process'
16
+ require 'win32/process'
17
+ require 'win32/registry'
18
+ end
19
+
20
+ gem 'six-rsync'
21
+ require 'six/rsync'
22
+
23
+ require 'six/updater/mod'
24
+ #require 'sixupdater/gitrepo'
25
+ require 'six/updater/rsyncrepo'
26
+
27
+ include Six::Repositories
28
+
29
+ case RUBY_VERSION
30
+ when /1\.8\.[0-9]/
31
+ class Array
32
+ def sample
33
+ self[rand self.size]
34
+ end
35
+ end
36
+ end
37
+
38
+ module Six
39
+ # TODO: Evaluate if this module should be a class instead?
40
+ module Updater
41
+ VERSION = '0.17.1'
42
+ COMPONENT = 'six-updater'
43
+ LOG_LIMIT = 9999
44
+
45
+ # Configuration
46
+ case RUBY_PLATFORM
47
+ when /-mingw32$/, /-mswin32$/
48
+ ARMA2 = ['SOFTWARE\\Bohemia Interactive Studio\\ArmA 2', 'MAIN']
49
+ ARMA2_ALT = ['SOFTWARE\\Bohemia Interactive\\ArmA 2', 'InstallPath']
50
+ ARMA2_STEAM = ['SOFTWARE\\Valve\\Steam\\Common\\ARMA 2', 'InstallPath']
51
+ DESKTOP = ['Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders', 'Desktop']
52
+ end
53
+
54
+ # Fix for WinXP
55
+ BASE_PATH = if defined?(TAR2RUBYSCRIPT)
56
+ if oldlocation
57
+ oldlocation
58
+ else
59
+ Dir.pwd
60
+ end
61
+ else
62
+ p = Dir.pwd
63
+ p.gsub!('\\', '/')
64
+ p
65
+ end
66
+ TOOL_PATH = File.join(BASE_PATH, 'tools')
67
+
68
+ case RUBY_PLATFORM
69
+ when /-mingw32$/, /-mswin32$/
70
+ TEMP_PATH = if ENV['TEMP']
71
+ if ENV['TEMP'].size > 0
72
+ File.directory?(ENV['TEMP']) ? ENV['TEMP'] : BASE_PATH
73
+ else
74
+ BASE_PATH
75
+ end
76
+ else
77
+ BASE_PATH
78
+ end
79
+ HOME_PATH = File.exists?(File.join(ENV['APPDATA'])) ? File.join(ENV['APPDATA']) : TEMP_PATH
80
+ bpath = BASE_PATH.clone
81
+ bpath.gsub!('/', '\\')
82
+ tpath = "#{File.join(bpath, 'tools')};#{File.join(bpath, 'tools', 'bin')}"
83
+ tpath.gsub!('/', '\\')
84
+ ENV['PATH'] = "#{bpath};#{tpath};#{ENV['PATH']}"
85
+ else
86
+ HOME_PATH = '~/'
87
+ TEMP_PATH = '/tmp'
88
+ end
89
+ DATA_PATH = File.join(HOME_PATH, COMPONENT)
90
+
91
+ =begin
92
+ dpath = BASE_PATH
93
+ unless File.exists?(File.join(BASE_PATH, "legacy.txt"))
94
+ reg_path = nil
95
+ #case RUBY_VERSION
96
+ #when /1\.8\.[0-9]/
97
+ # begin
98
+ # reg_path = Win32::Registry::HKEY_CURRENT_USER.open("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders")['AppData']
99
+ # rescue
100
+ # end
101
+ #end
102
+ if reg_path
103
+ if reg_path.size > 0
104
+ dpath = File.join(reg_path, 'Six-Updater') if File.directory?(reg_path)
105
+ end
106
+ elsif ENV['APPDATA']
107
+ if ENV['APPDATA'].size > 0
108
+ dpath = File.join(ENV['APPDATA'], 'Six-Updater') if File.directory?(ENV['APPDATA'])
109
+ end
110
+ end
111
+ end
112
+ DATA_PATH = dpath
113
+ =end
114
+
115
+ lf = File.join(DATA_PATH, "logs")
116
+ FileUtils.mkdir_p(lf) unless File.directory?(lf)
117
+
118
+ cf = File.join(DATA_PATH, "#{COMPONENT}.yml")
119
+ unless File.exists?(cf)
120
+ cfo = File.join(BASE_PATH, "#{COMPONENT}.yml")
121
+ FileUtils.cp(cfo, cf) if File.exists?(cfo)
122
+ begin
123
+ FileUtils.rm_f(cfo) if File.exists?(cfo)
124
+ rescue
125
+ end
126
+ end
127
+
128
+ @general_todo, @second_todo = [], []
129
+
130
+ # Create config hash with default settings
131
+ @config = Hash.new
132
+ @config[:app_params] = '-noSplash -noFilePatching -showScriptErrors'
133
+ @config[:app_exe] = 'arma2.exe'
134
+ @config[:depth] = 1
135
+ @config[:folders] = []
136
+ @config[:server] = Hash.new
137
+ @config[:verbose] = false
138
+
139
+ # FIXME: Solve this properly!
140
+ @config[:defaultactions] = [:install]
141
+ @config[:defaultgeneralactions] = [:createshortcut]
142
+ @config[:defaultsecondactions] = [:changelog, :cleanup]
143
+
144
+ # Create loggers
145
+ @@log = Log4r::Logger.new(COMPONENT)
146
+ format1 = if defined?(DEBUG)
147
+ Log4r::PatternFormatter.new(:pattern => "[%l] %d: %m", :date_pattern => '%H:%M:%S')
148
+ else
149
+ Log4r::PatternFormatter.new(:pattern => "%m")
150
+ end
151
+ format2 = Log4r::PatternFormatter.new(:pattern => "[%l] %c %d: %m", :date_pattern => '%H:%M:%S')
152
+
153
+
154
+ if not defined?(Ocra)
155
+ # Create Outputters
156
+ path = File.join(DATA_PATH, 'logs')
157
+ FileUtils::mkdir_p path
158
+ o_file = Log4r::FileOutputter.new "#{COMPONENT}-file",
159
+ 'level' => 0, # All
160
+ :filename => File.join(path, "#{COMPONENT}.log"),
161
+ 'formatter' => format2
162
+ #:maxsize => 1024
163
+
164
+ @@log.outputters << o_file
165
+
166
+ o_out = Log4r::StdoutOutputter.new "#{COMPONENT}-stdout",
167
+ 'level' => 2, # no DEBUG
168
+ 'formatter' => format1
169
+
170
+ o_err = Log4r::StderrOutputter.new "#{COMPONENT}-stderr",
171
+ 'level' => 4, # Error and Up
172
+ 'formatter' => format1
173
+
174
+ @@log.outputters << o_out << o_err
175
+ end
176
+
177
+ module_function
178
+ def initialize
179
+ # Banner
180
+ log.info "Updater (v#{VERSION}) by Sickboy <sb_at_dev-heaven.net>"
181
+ log.info 'Run with --help for help'
182
+ log.warn "WARNING: Please make sure anything ArmA related has been closed / shutdown, incl explorer windows, etc"
183
+ log.debug "BASE_PATH: #{BASE_PATH}"
184
+ log.debug "TOOL_PATH: #{TOOL_PATH}"
185
+ log.debug "@config #{@config}"
186
+
187
+ # Process the config file
188
+ config = "#{COMPONENT}.yml"
189
+ config = File.join(DATA_PATH, config)
190
+ if ARGV[0]
191
+ # FIXME: This is not a very good catch..
192
+ if ARGV[0][/.*\..*/]
193
+ if File.exists?(ARGV[0])
194
+ config = ARGV[0]
195
+ else
196
+ log.warn "#{ARGV[0]} not found, trying #{config}"
197
+ end
198
+ end
199
+ end
200
+
201
+ unless File.exists?(config)
202
+ log.error "ERROR: #{config} config missing!"
203
+ wait
204
+ exit
205
+ end
206
+
207
+ File.open(config) { |file| @config.merge!(YAML::load(file)) }
208
+ @config[:folders] = [] unless @config[:folders]
209
+ @config[:server][:folders] = [] unless @config[:server][:folders]
210
+
211
+ # Parses CLI Parameters, merges configuration and gets todo list
212
+ parse_options
213
+
214
+ # Backwards compatibility
215
+ @config[:app_path] = @config[:armapath] if @config[:armapath]
216
+ @config[:app_exe] = @config[:armaexe] if @config[:armaexe]
217
+ @config[:app_params] = @config[:armaparams] if @config[:armaparams]
218
+ #@config[:git_path] = @config[:gitpath] if @config[:gitpath]
219
+
220
+ # Determine arma distribution and location
221
+ case RUBY_PLATFORM
222
+ when /-mingw32$/, /-mswin32$/
223
+
224
+ unless @config[:app_path]
225
+ begin
226
+ @config[:app_path] = Win32::Registry.open(Win32::Registry::HKEY_LOCAL_MACHINE, ARMA2_STEAM[0])[ARMA2_STEAM[1]]
227
+ log.info "ArmA 2 Steam Distribution detected"
228
+ rescue
229
+ begin
230
+ @config[:app_path] = Win32::Registry.open(Win32::Registry::HKEY_LOCAL_MACHINE, ARMA2_ALT[0])[ARMA2_ALT[1]]
231
+ log.info "ArmA 2 Alt Distribution detected"
232
+ rescue
233
+ begin
234
+ @config[:app_path] = Win32::Registry.open(Win32::Registry::HKEY_LOCAL_MACHINE, ARMA2[0])[ARMA2[1]]
235
+ log.info "ArmA 2 Standard Distribution detected"
236
+ rescue
237
+ log.warn "No (known) ArmA 2 Distribution detected"
238
+ end
239
+ end
240
+ end
241
+ end
242
+ end
243
+
244
+ # Verify installation folder
245
+ if @config[:app_path]
246
+ log.info "ArmA Path: #{@config[:app_path]}"
247
+ if File.exists?(@config[:app_path])
248
+ @config[:app_path].gsub!('\\', '/')
249
+ else
250
+ log.error "No valid ArmA installation folder found, please abort!"
251
+ wait
252
+ exit
253
+ end
254
+ else
255
+ log.error "No valid ArmA installation folder found, please abort!"
256
+ wait
257
+ exit
258
+ end
259
+
260
+ if @config[:app_modpath]
261
+ log.info "Installation Path: #{@config[:app_modpath]}"
262
+ if File.exists?(@config[:app_modpath])
263
+ @config[:app_modpath].gsub!('\\', '/')
264
+ else
265
+ log.error "No valid Mod installation folder found, please abort!"
266
+ wait
267
+ exit
268
+ end
269
+ else
270
+ @config[:app_modpath] = @config[:app_path]
271
+ end
272
+
273
+ @config[:folders].uniq!
274
+ @config[:folders].sort! do |a, b|
275
+ a_prio = a[:priority] ? a[:priority] : 9999
276
+ b_prio = b[:priority] ? b[:priority] : 9999
277
+ a_prio <=> b_prio
278
+ end
279
+ log.debug "@config #{@config}"
280
+
281
+ # PreProcess the config data
282
+ @mods = []
283
+ @mods << @config[:mods] if @config[:mods]
284
+
285
+ @beta = false
286
+ @beta_exe = false
287
+ @beta_exe = true if @config[:app_exe][/beta[\/|\\]arma2.*/]
288
+
289
+ @config[:folders].each do |folder|
290
+ @beta = true if folder[:folder] == 'beta'
291
+ unless folder[:disabled]
292
+ folder[:folder].gsub!('\\', '/')
293
+ if folder[:mods]
294
+ @mods << folder[:mods]
295
+ else
296
+ @mods << folder[:folder]
297
+ end
298
+ end
299
+ end
300
+ @mods = @mods.join(';')
301
+
302
+ # Output processed config data
303
+ log.info "Manager for: #{@mods}"
304
+ beta_msg
305
+
306
+ # Prepare stats
307
+ @stats = []
308
+ @config[:folders].each do |folder|
309
+ stat = Hash.new
310
+ @stats << stat
311
+ path = File.join(@config[:app_modpath], folder[:folder])
312
+ stat[:changelog] = []
313
+ end
314
+ end
315
+
316
+ def beta_msg
317
+ if @beta_exe && !@beta
318
+ log.warn "WARNING: You do not seem to be running the 'beta' modfolder, but have selected 'beta/arma2.exe'"
319
+ elsif !@beta_exe && @beta
320
+ log.warn "WARNING: You seem to be running the 'beta' modfolder, but have not selected 'beta/arma2.exe'"
321
+ end
322
+ end
323
+
324
+ def log
325
+ @@log
326
+ end
327
+
328
+ def exit_app
329
+ FileUtils.rm_f PID_FILE
330
+ exit
331
+ end
332
+
333
+ def wait
334
+ STDIN.gets
335
+ end
336
+
337
+ def sure?
338
+ log.info "Are you really sure? Please press Enter to continue, or close the application to abort."
339
+ wait
340
+ end
341
+
342
+ def exit
343
+ FileUtils.rm_f PID_FILE if File.exist?(PID_FILE)
344
+ Process.exit
345
+ end
346
+
347
+ # General Tasks
348
+ def joingame
349
+ cmd = ""
350
+ cmd << " -connect=#{@config[:server][:address]}" if @config[:server][:address]
351
+ cmd << " -port=#{@config[:server][:port]}" if @config[:server][:port]
352
+ cmd << " -password=#{@config[:server][:password]}" if @config[:server][:password]
353
+ startgame(cmd)
354
+ end
355
+
356
+ def startgame(cmd = nil)
357
+ log.info "Starting the game with #{@config[:app_params]} -mod=#{@mods}#{cmd}"
358
+ #system "\"#{@config[:app_exe]}\" #{@config[:app_params]} -mod=#{@mods}"
359
+ case RUBY_PLATFORM
360
+ when /-mingw32$/, /-mswin32$/
361
+ begin
362
+ struct = Process.create(
363
+ :app_name => File.join(@config[:app_path], @config[:app_exe]),
364
+ :command_line => " #{@config[:app_params]} -mod=#{@mods}#{cmd}",
365
+ :creation_flags => Process::DETACHED_PROCESS,
366
+ :process_inherit => false,
367
+ :thread_inherit => false,
368
+ :cwd => @config[:app_path],
369
+ :inherit => false
370
+ #:environment => ""
371
+ )
372
+ rescue
373
+ log.warn "WARNING: Something went wrong starting the app: #{@config[:app_exe]}"
374
+ log.debug "#{$!}"
375
+ end
376
+ else
377
+ Dir.chdir(@config[:app_path]) do
378
+ system "#{@config[:app_exe]} #{@config[:app_params]} -mod=#{@mods}#{cmd}"
379
+ end
380
+ end
381
+ end
382
+
383
+ def shortcut(path)
384
+ case RUBY_PLATFORM
385
+ when /-mingw32$/, /-mswin32$/
386
+ cwd = Dir.pwd
387
+ Dir.chdir path
388
+ mods = @mods.clone
389
+ mods.gsub!(/\//, '-')
390
+ mods2 = @mods.clone
391
+ mods2.gsub!('/', '\\')
392
+ name = "Play ArmA2 with #{mods}.lnk"
393
+ Win32::Shortcut.new(name) do |shortcut|
394
+ shortcut.description = "Start Arma2 with #{mods2}"
395
+ shortcut.path = File.join(@config[:app_path], @config[:app_exe])
396
+ shortcut.working_directory = @config[:app_path]
397
+ shortcut.arguments = "#{@config[:app_params]} -mod=#{mods2}"
398
+ end
399
+ str = path.clone
400
+ str.gsub!('/', '\\')
401
+ log.info "Created shortcut (in #{str}): #{name}"
402
+ Dir.chdir cwd
403
+ else
404
+ log.warn "Unsupported on current Platform: #{RUBY_PLATFORM}"
405
+ end
406
+ end
407
+
408
+ def createshortcut
409
+ shortcut @config[:app_path]
410
+ end
411
+
412
+ def createdesktopshortcut
413
+ case RUBY_PLATFORM
414
+ when /-mingw32$/, /-mswin32$/
415
+ begin
416
+ desktop = Win32::Registry.open(Win32::Registry::HKEY_CURRENT_USER, DESKTOP[0])[DESKTOP[1]]
417
+ while desktop =~ /\%(\w*)\%/ do
418
+ desktop.sub!("%#{$1}%", ENV[$1])
419
+ end
420
+ shortcut desktop if File.directory? desktop
421
+ rescue
422
+ log.warn "WARNING: Problem while creating shortcut! #{$!}"
423
+ end
424
+ else
425
+ log.warn "Unsupported on current Platform: #{RUBY_PLATFORM}"
426
+ end
427
+ end
428
+
429
+ def uninstall
430
+ log.warn "Uninstall feature temporary disabled. Please delete the modfolder manually for uninstall"
431
+ =begin
432
+ @config[:folders].each do |config|
433
+ log.info "= #{config[:folder]}"
434
+ mod = Mod.new(config, @config)
435
+ mod.uninstall
436
+ end
437
+ =end
438
+ end
439
+ end
440
+ end