rwdshell 0.95 → 0.96

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/Readme.txt +5 -1
  2. data/code/superant.com.rwdtinkerbackwindow/controlclient.rb +25 -26
  3. data/code/superant.com.rwdtinkerbackwindow/helptexthashtinkerwin2.rb +25 -4
  4. data/code/superant.com.rwdtinkerbackwindow/installapplet.rb +1 -0
  5. data/code/superant.com.rwdtinkerbackwindow/installgemapplet.rb +6 -7
  6. data/code/superant.com.rwdtinkerbackwindow/installremotegem.rb +19 -0
  7. data/code/superant.com.rwdtinkerbackwindow/listgemdirs.rb +12 -0
  8. data/code/superant.com.rwdtinkerbackwindow/listgemzips.rb +2 -2
  9. data/code/superant.com.rwdtinkerbackwindow/listzips.rb +22 -7
  10. data/code/superant.com.rwdtinkerbackwindow/openhelpwindowtinkerwin2.rb +3 -0
  11. data/code/superant.com.rwdtinkerbackwindow/remotegemlist.rb +24 -0
  12. data/code/superant.com.rwdtinkerbackwindow/saveconfigurationrecord.rb +1 -1
  13. data/configuration/rwdshellversion.cnf +1 -1
  14. data/configuration/rwdtinker.cnf +0 -3
  15. data/configuration/rwdtinkerversion.cnf +1 -1
  16. data/configuration/tinkerwin2variables.cnf +5 -1
  17. data/extras/cmdline_parse +47 -0
  18. data/extras/config_file +69 -0
  19. data/extras/errorMsg +19 -0
  20. data/extras/makePlaylist +34 -0
  21. data/extras/mp3controld +289 -0
  22. data/extras/playlist +186 -0
  23. data/extras/showHelp +18 -0
  24. data/gui/00coreguibegin/applicationguitop.rwd +1 -1
  25. data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/40rwdlistzips.rwd +9 -10
  26. data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/45installremotezip.rwd +44 -0
  27. data/init.rb +22 -35
  28. data/installed/rwdtinkerwin2-0.5.inf +8 -0
  29. data/installed/rwdviewlogo-0.4.inf +4 -0
  30. data/rwd_files/HowTo_Shell.txt +5 -1
  31. data/rwd_files/HowTo_Tinker.txt +17 -1
  32. data/tests/rwdtinkertestEN.rb +163 -0
  33. data/tests/test.result +32 -0
  34. metadata +20 -14
  35. data/gui/frontwindowtdocuments/superant.com.shelldocument/vvdocshellxp.rwd +0 -5
  36. data/lang/alanguagehashbegin.rb +0 -4
  37. data/lang/languagehash.rb +0 -4
  38. data/lang/templangfile.rb +0 -16
  39. data/lang/vlanguagehashend.rb +0 -6
  40. data/lang/wlocallangstart.rb +0 -5
  41. data/lang/xlocallangfile.rb +0 -16
  42. data/lang/zlocallangend.rb +0 -2
  43. data/zips/rwdwcalc-0.50.zip +0 -0
data/Readme.txt CHANGED
@@ -193,13 +193,17 @@ http://www.erikveen.dds.nl/rubywebdialogs/index.html
193
193
  Thanks, Steven Gibson
194
194
 
195
195
  == Changelog
196
+ version 0.96
197
+ updated for rwdtinker 1.56
198
+ first debian version
199
+
196
200
  version 0.95
197
201
  added ruby script running
198
202
  add back window for more control tabs
199
203
  beginning of context sensitive help
200
204
  wider text boxes for configuration information
201
205
  updated for rwdtinker 1.51 - finds available port and remote control
202
- updated for rwdtinker 1.52 - cam install applets from Gems
206
+ updated for rwdtinker 1.52 - can install applets from Gems
203
207
 
204
208
  version 0.94
205
209
  updated for rwdtinker 1.44 - refactor gui directory structure
@@ -1,28 +1,22 @@
1
- #
1
+ # Bind message passing socket to rwdtinker application
2
2
 
3
3
  def runcontrolcommand
4
4
  require 'socket'
5
5
 
6
6
  # Change this line...
7
- ip = '127.0.0.1'
7
+ ip = '127.0.0.1'
8
8
  # And this one...
9
- port = $rwdcontrolport1
10
- if @a_remoteportinput
11
- port = @a_remoteportinput.to_i
12
- end
13
- # Done!
9
+ port = $rwdcontrolport1
10
+ if @a_remoteportinput
11
+ port = @a_remoteportinput.to_i
12
+ end
14
13
 
15
-
16
14
  commandtext = @a_remotecommandinput.to_s
17
-
18
- remotehostnotfound = true
19
-
20
- client = UDPSocket::new()
21
- client.send(commandtext, 0, ip, port)
22
-
23
-
24
- if (commandtext == "stop")
25
- begin
15
+ remotehostnotfound = true
16
+ if (commandtext == "stop")
17
+ begin
18
+ client = UDPSocket::new()
19
+ client.send(commandtext, 0, ip, port)
26
20
  @socket = UDPSocket::new()
27
21
  @socket.bind(ip, port)
28
22
  # Rescue the "Address in use" error
@@ -51,17 +45,20 @@ begin
51
45
  @remotecommandresult = "Remote Host not running"
52
46
  end
53
47
  @socket.close
54
- end
48
+ # Close the socket after use
49
+ client.close()
50
+ end
55
51
 
56
- remotehostnotfound = true
57
- if (commandtext == "query")
58
- begin
52
+ remotehostnotfound = true
53
+ if (commandtext == "query")
54
+ begin
55
+ client = UDPSocket::new()
56
+ client.send(commandtext, 0, ip, port)
59
57
  @socket = UDPSocket::new()
60
58
  @socket.bind(ip, port)
61
59
  # Rescue the "Address in use" error
62
60
  rescue Errno::EADDRINUSE
63
61
 
64
-
65
62
  databack, info = client.recv(128)
66
63
  @remotecommandresult = databack
67
64
  @lastremotecommand = "rwdtinker remote: Port #{port} on host #{ip} "
@@ -82,15 +79,17 @@ begin
82
79
  # Rescue all other errors
83
80
  end
84
81
  @socket.close
85
- end
86
- if remotehostnotfound
87
- @remotecommandresult = "Remote Host not running"
88
- end
82
+
89
83
  # Close the socket after use
90
84
  client.close()
85
+ end
91
86
 
87
+ if remotehostnotfound
88
+ @remotecommandresult = "Remote Host not running"
89
+ end
92
90
  end
93
91
 
92
+ # list the remote control options on the screen
94
93
  def showremoteportoptions
95
94
 
96
95
  @remoteportoptions = $rwdcontrolports.rwd_options
@@ -1,11 +1,15 @@
1
-
1
+ # help text files used by context sensitive help
2
2
 
3
3
  Helptext.update( :tinkerwin2_help => " You can view the list of applets you can install
4
4
  by clicking on the list files button
5
5
 
6
6
  You can download an applet created by someone else
7
7
 
8
- put the file in the zips directory",
8
+ put the file in the zips directory
9
+
10
+ rwdtinker applets packaged as RubyGems can be used if you have RubyGems installed.
11
+ You can download rwdtinker gems at the 'Install Remote Applets' tab
12
+ ",
9
13
  :applet_viewing => "You can get a list of all installed applets by clicking the 'listfiles button'
10
14
  To see the text of a install file
11
15
  Type in the name of the file you want.
@@ -32,6 +36,23 @@
32
36
  :applet_tinkerbackeditconfiguration => " You can edit the configuration
33
37
 
34
38
  Remember to reload the configuration variables if you want your
35
- changes used."
36
-
39
+ changes used.",
40
+ :remotegemapplet_install => " To download and install use the 'Install Remote Applets'
41
+
42
+ First click on 'List applets in the Remote GEM Repository available for downloading'
43
+ then go to the very bottom to click on the applet you want
44
+ then on the top click 'install remote Gem applet package'
45
+
46
+ This installs the package in the Gem system
47
+ You still need to install it into rwdtinker - do that in the 'List Zips' tab
48
+
49
+ For this feature to work, you need
50
+ RubyGems installed
51
+ Variables set correctly in the tinerwin2.cnf file
52
+ $xpcommand, $gemdirectory_withgemfiles and $geminstalled_directory
53
+ the defaults as shipped will normally be for a Debian Linux system
54
+ On Debian Linux, you would usually need to be running rwdtinker as root in order to install RubyGems
55
+
56
+ You can view the list of rwdtinker applets you have installed already by clicking 'view already installed GEM applets'
57
+ "
37
58
  )
@@ -1,3 +1,4 @@
1
+ # code in install rwdtinker applets - now uses ruby.zip module
1
2
  def installapplet
2
3
  require 'fileutils'
3
4
  require 'extras/zip/zip'
@@ -1,3 +1,4 @@
1
+ # install rwdtinker applet from a long directory location
1
2
  def installgemapplet
2
3
  require 'fileutils'
3
4
  require 'extras/zip/zip'
@@ -6,16 +7,14 @@
6
7
  begin # exception trapped block
7
8
  fullname = nametext + ".zip"
8
9
 
9
-
10
- zf = Zip::ZipFile.new(fullname)
11
- zf.sort.each {
12
- |entry|
13
- zf.extract(entry.to_s, entry.to_s)
10
+ zf = Zip::ZipFile.new(fullname)
11
+ zf.sort.each {
12
+ |entry|
13
+ zf.extract(entry.to_s, entry.to_s)
14
14
  }
15
- @installapplettext = Message[:applet_installed]
15
+ @installapplettext = Message[:applet_installed]
16
16
 
17
17
  rescue
18
18
  @installapplettext = "unzip error - applet may not be installed correctly"
19
19
  end # exception rescue
20
-
21
20
  end
@@ -0,0 +1,19 @@
1
+ # download gem of rwdtinker applet
2
+ def superantcominstallremotegemapplet
3
+ require 'fileutils'
4
+
5
+ tempnametext = "%s" % [@superantcominstallremoteappletinput]
6
+ temparray = tempnametext.split(/ /)
7
+ nametext = temparray[0]
8
+ begin # exception trapped block
9
+
10
+
11
+ commandline = $xpcommand + "gem install " + nametext
12
+
13
+ @superantcominstallremotegemappletresult = `#{commandline}`
14
+
15
+ rescue
16
+ @superantcominstallremotegemappletresult = "error during gem install!"
17
+ end # exception rescue
18
+
19
+ end
@@ -0,0 +1,12 @@
1
+ # this code is to list the gem directories that are installed
2
+ def superantcomshowgemfiledirs
3
+
4
+ fileList = Dir.new($gemdirectory_withgemfiles).entries.sort.delete_if { |x| ! (x =~ /\Arwdzip/) }
5
+ @superantcomshowgemappletdirsresult = fileList.rwd_method("superantcomshowgemappletdirsname")
6
+ end
7
+
8
+ def superantcomshowgemappletdirsname(inffile)
9
+ applet = inffile
10
+ @a_gemfiledirsinput = applet
11
+
12
+ end
@@ -1,7 +1,7 @@
1
1
  # this code is to list the zips
2
2
 
3
3
 
4
- def fillhypernotename(inffile)
4
+ def fillzipappletname(inffile)
5
5
  applet = inffile.gsub(/\.zip$/, "")
6
6
  @a_installapplet = applet
7
7
 
@@ -50,5 +50,5 @@ def listgemzips
50
50
  findzipfiles(x + "/**")
51
51
  end
52
52
  end
53
- @zipslistresult = $zipsarray.rwd_method("fillhypernotename")
53
+ @zipslistresult = $zipsarray.rwd_method("fillzipappletname")
54
54
  end
@@ -1,16 +1,31 @@
1
1
  # this code is to list the zipped applets that can be installed
2
- def listzipfilestoinstall
3
- if File.exist?($zipslocation)
4
- fileList = Dir.new($zipslocation).entries.sort.delete_if { |x| ! (x =~ /zip$/) }
5
- @zipslistresult = fileList.rwd_method("fillziptoinstallname")
6
- end
7
- end
2
+
8
3
 
9
4
  def fillziptoinstallname(inffile)
10
5
  applet = inffile.gsub(/\.zip$/, "")
11
6
  @a_installapplet = applet
12
7
 
13
8
  end
9
+
14
10
 
15
11
 
16
-
12
+
13
+ def listzipfilestoinstall
14
+ startlangdir = File.join($progdir, $zipslocation )
15
+ #get a list of the files and subdirectories on the starting directory only
16
+
17
+
18
+ a = Array.new(Dir["#{startlangdir}/*"].entries.sort)
19
+
20
+ #loop through and get the files names
21
+ a.each do |x|
22
+ # only zip files
23
+ if x =~ /\.zip/
24
+ # puts "#{x}" #adds the file to the array to display on the screen
25
+ $zipsarraylocal = $zipsarraylocal | ["#{x}"]
26
+ end
27
+
28
+ end
29
+
30
+ @zipslistresult = $zipsarraylocal.rwd_method("fillziptoinstallname")
31
+ end
@@ -24,6 +24,9 @@ def runhelpwindowtinkerwin2
24
24
  $help_topic = "remote_control"
25
25
 
26
26
  end
27
+ if @rwd_tab == "superantcomremotezipsinstall"
28
+ $help_topic = "remotegemapplet_install"
29
+ end
27
30
 
28
31
 
29
32
  if @rwd_window != "rwdtinkerhelpwindow"
@@ -0,0 +1,24 @@
1
+ # This tinker method is to retrieve the list of rwdzip applets available to install from the remote repository
2
+
3
+ def superantcomremotegemlist
4
+ gemcommandoption = "search --remote "
5
+ gemfilename = "rwdzip"
6
+ commandtext = "gem search --remote rwdzip"
7
+ commandtemp = $xpcommand + commandtext
8
+ begin # exception trapped block
9
+
10
+ tempremotegemappletsresult = `#{commandtemp} 2>&1`
11
+ @superantcomremotegemappletsfullresult = tempremotegemappletsresult
12
+ fileList = tempremotegemappletsresult.split(/\n/).delete_if { |x| ! (x =~ /\Arwdzip/) }
13
+
14
+ @superantcomremotegemappletsresult = fileList.rwd_method("superantcomremotegemappletdirsname")
15
+ rescue SystemCallError, StandardError
16
+ @superantcomremotegemappletsresult = "system call error: " + $!
17
+ end # exception rescue
18
+ end
19
+
20
+ def superantcomremotegemappletdirsname(inffile)
21
+ applet = inffile
22
+ @superantcominstallremoteappletinput = applet
23
+
24
+ end
@@ -1,4 +1,4 @@
1
- # this method adds a new address record
1
+ # this method saves the configuration record
2
2
  def saveconfigurationrecord
3
3
  require 'fileutils'
4
4
  if @a_configurationfilename
@@ -1,2 +1,2 @@
1
1
 
2
- RwdShellVersion = "0.95"
2
+ RwdShellVersion = "0.96"
@@ -2,11 +2,8 @@
2
2
  ConfigurationDir = "configuration" # for use in program - init.rb has this value without using this constant
3
3
  CodeName = "rwdtinker"
4
4
  CodeNameFile = CodeName + ".rb"
5
- LangNameFile = "rwdlanguage.rb"
6
5
  RWDFile = "rwdtinker.rwd"
7
6
  LangDir = "lang"
8
- TempLangHashFile = LangDir + "/" + "templangfile.rb"
9
- LocalLangHashFile = LangDir + "/" + "xlocallangfile.rb"
10
7
  CodeDir = "code"
11
8
  GuiDir = "gui"
12
9
  $help_topic = "general_help"
@@ -1,2 +1,2 @@
1
1
 
2
- RwdTinkerVersion = "1.52"
2
+ RwdTinkerVersion = "1.56"
@@ -1,7 +1,11 @@
1
1
 
2
2
  TinkerWin2ConfigurationFileName = "tinkerwin2variables.cnf" # this file name - do not change
3
3
  $zipslocation = "zips" # location of applets to add
4
- $zipsarray = [""]
4
+ $zipsarray = [""] ; $zipsarraylocal = [""]
5
+ $xpcommand = " " # Linux machines
6
+ # $xpcommand = "cmd /C " # XP machines with cmd shell
7
+ $gemdirectory_withgemfiles = "/usr/lib/ruby/gems/1.8/gems"
8
+ # $gemdirectory_withgemfiles = "c:\\ruby\\lib\\ruby\\gems\\1.8\\gems" # XP machine
5
9
  # $geminstalled_directory = "/ruby/lib/ruby/gems/1.8/gems" # XP machine
6
10
  $geminstalled_directory = "/usr/lib/ruby/gems/1.8/gems" # Debian Linux
7
11
 
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/ruby
2
+ # --- Parse command line ---
3
+ #
4
+ # Author: Magnus Engstr�m
5
+ # Email: magnus@gisab.se
6
+ # File: cmdline_parse
7
+ #
8
+ # Description
9
+ # -----------
10
+ # Parses the commandline and
11
+ # returns a hash with the
12
+ # switch as key and the
13
+ # value as value :)
14
+ # --------------------------
15
+
16
+ class Commandline
17
+ def Commandline::parse()
18
+
19
+ params = Hash::new() # Could be useful to have something to put the commandline in ;)
20
+ key = false # Just a really ugly hack to keep track on if we're reading key or value
21
+ foo = '' # Keeps the key name
22
+
23
+ # Iterate through the command line ($*) and put it in the params hash
24
+ $*.each { |param|
25
+ key = ( key == true ? false : true ) # Negate the value of key
26
+ if(key)
27
+ foo = param
28
+ else
29
+ params[foo] = param
30
+ end
31
+ }
32
+
33
+ # Validate the command line.
34
+ # Every key should begin with at least one '-' and have a value
35
+ if( !key ) # If key equals true, then the user should enter one more parameter
36
+ passed = true
37
+ params.each { |key, value| # Iterate through all parameters
38
+ passed = false if(key[0].chr() != '-') # Doesn't it start with a '-'? Not passed...
39
+ passed = false if(value == '') # I really want a value here, not just an empty string
40
+ }
41
+ end
42
+
43
+ # Return params if check passed, else return -1
44
+ passed ? params : -1
45
+
46
+ end
47
+ end
@@ -0,0 +1,69 @@
1
+ #!ruby
2
+ require 'ftools'
3
+ require 'tempfile'
4
+
5
+ class ConfigFile
6
+
7
+ def ConfigFile::parse(filename)
8
+ # Make sure this file exists and is readable
9
+ if( FileTest::readable_real?(filename) )
10
+ new(filename) # Return the class instance
11
+ else
12
+ -1 # Return -1 on failure
13
+ end
14
+ end
15
+
16
+ def initialize(filename)
17
+ @filename = filename
18
+ @config = Hash::new() # The class internal variable that holds the config data
19
+ section = ''
20
+
21
+ # Parse the configuration file (and in only TWO rows, God I love Ruby! =)
22
+ IO::foreach(@filename) { |configLine| @config[section = $1] = Hash::new() if(configLine.gsub(/\s*#.*$/, '') =~ /\s*(\S+)\s*\{/)
23
+ @config[section].update({$1 => $2}) if(configLine.gsub(/\s*#.*$/, '') =~ /\s*(\S+)\s*=\s*(.*)/) }
24
+ end
25
+
26
+ # Return the requested parameter
27
+ def getParam(section, parameter)
28
+ @config[section][parameter] if(@config[section].type == Hash)
29
+ end
30
+
31
+ # Set the provided parameter
32
+ def setParam(section, parameter, value)
33
+ # Create a temp file
34
+ temp = Tempfile::new('config')
35
+
36
+ current_section = ''
37
+ # Loop through the config file
38
+ IO::foreach(@filename) { |line|
39
+ current_section = $1 if( line =~ /^\s*(\S+)\s*{\s*(#.*)?$/ ) # Handle the section stuff
40
+ # Is this a correct parameter entry?
41
+ if( line =~ /^\s*(\S+)\s*=\s*\S+\s*(#.*)?$/ )
42
+
43
+ if( current_section == section && $1 == parameter ) # This is the line we want to change!
44
+ line.gsub!( /^(\s*\S+\s*=\s*)\S+(\s*(#.*)?)$/, "\\1#{value}\\2" ) # Change the parameter value to the one the user supplied
45
+ end
46
+
47
+ end
48
+
49
+ temp.puts(line) # Write the line to the tempfile
50
+ }
51
+
52
+ temp.close() # Close the file
53
+ File::copy(temp.path, @filename) # Copy the tempfile to overwrite the old one
54
+ temp.close(true) # Remove the file
55
+ end
56
+
57
+ # Loop through all sections
58
+ def each_section()
59
+ @config.each { |key,value| yield(key) }
60
+ end
61
+
62
+ # Loop through all parameters in a section
63
+ def each_parameter(section)
64
+ @config[section].each { |key,value| yield(key) }
65
+ end
66
+
67
+ attr_reader :filename
68
+
69
+ end
data/extras/errorMsg ADDED
@@ -0,0 +1,19 @@
1
+ #!ruby
2
+
3
+ # --- errorMsg ---
4
+ #
5
+ # Author: Magnus Engstr�m
6
+ # Email: magnus@gisab.se
7
+ # File: errorWrite
8
+ #
9
+ # Description
10
+ # -----------
11
+ # Outputs an error message to the administrator
12
+ # ------------------
13
+
14
+ def errorMsg(message, exitapp = false)
15
+ STDERR.puts(message)
16
+ MP3Control::exit_mpg123() if(exitapp)
17
+ Kernel::exit(exitapp) if(exitapp) # Terminate application and return the exitapp value if it isn't falsew
18
+
19
+ end
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/ruby
2
+ require 'mp3tag'
3
+
4
+ def getList(dir)
5
+ Dir::chdir(dir)
6
+
7
+ # Find the files in this directory
8
+ Dir['*mp3'].each { |file|
9
+ if(FileTest::file?(file))
10
+ mp3tag = Mp3Tag::new(Dir::getwd()+"/"+file)
11
+ if(mp3tag.songname.length > 0)
12
+ puts("#{Dir::getwd()+"/"+file}||#{mp3tag.songname}||#{mp3tag.artist}||#{mp3tag.album}||#{mp3tag.year}||#{mp3tag.comment}||#{mp3tag.tracknum}||#{mp3tag.genre_id}||#{mp3tag.genre}")
13
+ else
14
+ name = Dir::getwd()+"/"+file
15
+ name =~ /([^\/]+)\.mp3$/
16
+ puts("#{Dir::getwd()+"/"+file}||#{$1}||#{mp3tag.artist}||#{mp3tag.album}||#{mp3tag.year}||#{mp3tag.comment}||#{mp3tag.tracknum}||#{mp3tag.genre_id}||#{mp3tag.genre}")
17
+ end
18
+ end
19
+ }
20
+
21
+ Dir['*'].each { |entry|
22
+ if(FileTest::directory?(entry))
23
+ getList(entry)
24
+ end
25
+ }
26
+ Dir::chdir('..')
27
+ end
28
+
29
+ # Change current directory to user supplied one
30
+ Dir::chdir(ARGV[0])
31
+ getList(ARGV[0])
32
+
33
+ #song = Mp3Tag::new(ARGV[0])
34
+ #puts song.songname()