zik 0.17.0 → 0.17.1

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
data/ChangeLog CHANGED
@@ -1,3 +1,10 @@
1
+ Fix bug when ZiK is called with configuration option
2
+
3
+ ###Version 0.17.1
4
+ Fix a bug in configuration reading that leads to a crash (Thank Mouine89 for the report on ubuntu-fr forum)
5
+ Fix bugs in Pack module and export functions with ruby1.9 (Thank Кຼزດ for the report on ubuntu-fr forum)
6
+ Fix a bug in dependencies script
7
+
1
8
  ###Version 0.17.0
2
9
  Use new icons picture. Thanks J. Kaiden for the artwork.
3
10
  Add choices for theme in preferences window.
@@ -1,5 +1,5 @@
1
1
  NAME=ZiK
2
- VERSION=0.17.0
2
+ VERSION=0.17.1
3
3
 
4
4
  SHELL=/bin/sh
5
5
  RUBY=/usr/bin/ruby
@@ -89,7 +89,6 @@ install-theme:
89
89
  $(INSTALL_DIR) $(DESTDIR)$(THEMEDIR)
90
90
  for theme in $(THEMES); do \
91
91
  $(INSTALL_DIR) $(DESTDIR)$(THEMEDIR)/$$theme; \
92
- # echo $(SRCDIR)/theme/$theme/*; \
93
92
  $(INSTALL_DATA) $(SRCDIR)/theme/$$theme/* $(DESTDIR)$(THEMEDIR)/$$theme; \
94
93
  done
95
94
 
data/ZiK.rb CHANGED
@@ -119,8 +119,8 @@ $border=5
119
119
  #Configuration
120
120
  require File.join(Data_dir, 'gui/config')
121
121
  if (defined? User_dir)
122
- Cache_dir=File.join('User_dir', 'cache')
123
- Runtime_dir=File.join('User_dir', 'runtime')
122
+ Cache_dir=File.join(User_dir, 'cache')
123
+ Runtime_dir=File.join(User_dir, 'runtime')
124
124
  else
125
125
  User_dir= ENV['XDG_CONFIG_HOME'] ? File.join(ENV['XDG_CONFIG_HOME'], 'ZiK') :
126
126
  File.join(ENV['HOME'], '.config', 'ZiK')
@@ -142,7 +142,7 @@ unless File.exist?(User_dir)
142
142
  Dir.mkdir(User_dir)
143
143
  config_new=true
144
144
  end
145
- Dir.mkdir(Cache_dir) unless File.exist?(Cache_dir)
145
+ Dir.mkdir(Cache_dir) unless File.exist?(Cache_dir)#TODO bug with zik -c /dev/null
146
146
  Dir.mkdir(Runtime_dir, 0700) unless File.exist?(Runtime_dir)
147
147
  if File.directory?(User_dir)
148
148
  configuration_file=File.join(User_dir,'ZiKrc')
@@ -80,7 +80,7 @@ else
80
80
  EXIT=1
81
81
  fi
82
82
 
83
- if (ruby -e "require 'gtk2'; Gdk::Pixbuf.new('pix/sound_directory.svg')")
83
+ if (ruby -e "require 'gtk2'; Gdk::Pixbuf.new('pix/ZiK.svg')")
84
84
  then
85
85
  echo "Checking svg support..Ok"
86
86
  else
@@ -1,3 +1,10 @@
1
+ Fix bug when ZiK is called with configuration option
2
+
3
+ ###Version 0.17.1
4
+ Fix a bug in configuration reading that leads to a crash (Thank Mouine89 for the report on ubuntu-fr forum)
5
+ Fix bugs in Pack module and export functions with ruby1.9 (Thank Кຼزດ for the report on ubuntu-fr forum)
6
+ Fix a bug in dependencies script
7
+
1
8
  ###Version 0.17.0
2
9
  Use new icons picture. Thanks J. Kaiden for the artwork.
3
10
  Add choices for theme in preferences window.
@@ -20,6 +20,13 @@ This file is part of ZiK.
20
20
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
21
  =end
22
22
 
23
+ #General utilities methods
24
+ def array_from_args(arg)
25
+ #To be call after "def my_method(*args)"
26
+ #in order to accept both forms: my_method([1, 2, 3]) and my_method(1, 2, 3)
27
+ arg[0].instance_of?(Array) && arg.length==1 ? arg[0] : arg
28
+ end
29
+
23
30
  #GDK_KEY_name are defined since gtk 2.22 and ruby-gnome2 ?.?
24
31
  #GDK_name will be dropped
25
32
  begin
@@ -38,7 +45,7 @@ end
38
45
  module Pack
39
46
  private
40
47
  def hpack(*a)#Accept both forms: hpack([1, 2, 3]) and hpack(1, 2, 3)
41
- array=*a
48
+ array=array_from_args(a)
42
49
  hbox=Gtk::HBox.new
43
50
  hbox.border_width=$border
44
51
  hbox.spacing=$border
@@ -48,7 +55,7 @@ def hpack(*a)#Accept both forms: hpack([1, 2, 3]) and hpack(1, 2, 3)
48
55
  hbox
49
56
  end
50
57
  def vpack(*a)
51
- array=*a
58
+ array=array_from_args(a)
52
59
  vbox=Gtk::VBox.new
53
60
  vbox.border_width=$border
54
61
  vbox.spacing=$border
@@ -95,7 +95,7 @@ private
95
95
  #Player
96
96
  self['play_on_start']=="true" ? self['play_on_start']=true : self['play_on_start']=false
97
97
  self['current_song']=self['current_song'].to_i
98
- self['volume']=self['volume'].gsub(/,/,'.').to_f#Volume is written with a comma to seperate decimals. Is it a bug?
98
+ self['volume']=self['volume'].to_f
99
99
  self['shuffle']=="true" ? self['shuffle']=true : self['shuffle']=false
100
100
  self['repeat']=="true" ? self['repeat']=true : self['repeat']=false
101
101
  #cd
data/gui/gui.rb CHANGED
@@ -510,7 +510,7 @@ class Gui < Gtk::Window
510
510
  @bnext= Gtk::Button.new;@bnext.image=@inext
511
511
  @bnext.signal_connect('clicked'){next_song}
512
512
  #time
513
- @lposition=Gtk::Label.new('--:--')
513
+ @lposition=Gtk::Label.new(' --:--')
514
514
  @lposbox=Gtk::EventBox.new
515
515
  @lposbox.events=Gdk::Event::BUTTON_PRESS_MASK
516
516
  @lposbox.add(@lposition)
@@ -784,14 +784,14 @@ public
784
784
  @song_title.text="#{song.name}"
785
785
  duration=song.duration
786
786
  if duration <= 0
787
- @lduration.text='--:--'
787
+ @lduration.text='--:-- '
788
788
  @sposition.set_range(0,1200)#Use 20 minutes if song's duration is not known.
789
789
  GLib::Timeout.add(600){get_gst_duration(player, song)}#if taglib cannot give the track duration, let's try GStreamer
790
790
  elsif duration < 3600
791
- @lduration.text=Time.at(duration).strftime("%M:%S")
791
+ @lduration.text=Time.at(duration).strftime("%M:%S ")
792
792
  @sposition.set_range(0,duration)
793
793
  else
794
- @lduration.text=(duration.to_i/3600).to_s+":"+Time.at(duration).strftime("%M:%S")
794
+ @lduration.text=(duration.to_i/3600).to_s+":"+Time.at(duration).strftime("%M:%S ")
795
795
  @sposition.set_range(0,duration)
796
796
  end
797
797
  store.each{|model, path, iter|
@@ -805,25 +805,25 @@ public
805
805
  GLib::Timeout.add(400){
806
806
  position=player.position
807
807
  if position <= 0
808
- @lposition.text="--:--"
808
+ @lposition.text=" --:--"
809
809
  else
810
810
  duration=song.duration#get an uptodate duration
811
811
  if duration <= 0
812
- @lposition.text=Time.at(position).strftime("%M:%S")
812
+ @lposition.text=Time.at(position).strftime(" %M:%S")
813
813
  elsif duration < 3600
814
814
  if @config['remaining_time']
815
- t=duration-position; format="-%M:%S"
815
+ t=duration-position; format=" -%M:%S"
816
816
  else
817
- t=position; format="%M:%S"
817
+ t=position; format=" %M:%S"
818
818
  end
819
819
  @lposition.text=Time.at(t).strftime(format)
820
820
  else
821
821
  if @config['remaining_time']
822
822
  t=duration-position
823
- format="-"
823
+ format=" -"
824
824
  else
825
825
  t=position
826
- format=""
826
+ format=" "
827
827
  end
828
828
  @lposition.text=format+(t.to_i/3600).to_s+":"+Time.at(t).strftime("%M:%S")
829
829
  end
@@ -848,9 +848,9 @@ private
848
848
  if duration>0
849
849
  song.duration=duration
850
850
  if duration < 3600
851
- @lduration.text=Time.at(duration).strftime("%M:%S")
851
+ @lduration.text=Time.at(duration).strftime("%M:%S ")
852
852
  else
853
- @lduration.text=(duration.to_i/3600).to_s+":"+Time.at(duration).strftime("%M:%S")
853
+ @lduration.text=(duration.to_i/3600).to_s+":"+Time.at(duration).strftime("%M:%S ")
854
854
  end
855
855
  @sposition.set_range(0,duration)
856
856
  else
@@ -20,7 +20,33 @@ This file is part of ZiK.
20
20
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
21
  =end
22
22
 
23
- require 'ftools'
23
+ begin
24
+ #ruby 1.9+
25
+ require 'fileutils'
26
+ rescue LoadError
27
+ #Emulate FileUtils needed methods
28
+ require 'ftools'
29
+ class FileUtils
30
+ def FileUtils.makedirs(dir)
31
+ File.makedirs(dir)
32
+ end
33
+ def FileUtils.copy_file(src, dest)
34
+ File.copy(src, dest)
35
+ end
36
+ end
37
+ end
38
+
39
+ =begin
40
+ begin
41
+ #ruby 1.8
42
+ require 'ftools'
43
+ # def ExportList.makedirs ExportList.copy
44
+ rescue LoadError
45
+ #ruby 1.9
46
+ require 'fileutils'
47
+ # def ExportList.makedirs ExportList.copy
48
+ end
49
+ =end
24
50
 
25
51
  class ExportSong
26
52
  attr_reader :old_path, :path, :duration, :name, :bitrate, :samplerate, :channels, :type,
@@ -87,8 +113,8 @@ class ExportList
87
113
  estock.add(ErrorWARNING, _("#{song.path} allready exists."))
88
114
  else
89
115
  dir=File.dirname(song.path)
90
- File.makedirs(dir) unless File.exist?(dir)
91
- File.copy(song.old_path, song.path)
116
+ FileUtils.makedirs(dir) unless File.exist?(dir)
117
+ FileUtils.copy_file(song.old_path, song.path)
92
118
  end
93
119
  rescue Errno::ENOENT#Original file (song.old) was removed
94
120
  estock.add(ErrorERROR, _("Cannot access #{song.old_path}"))
@@ -92,6 +92,7 @@ class Song
92
92
  @bitrate=tag.bitrate
93
93
  @samplerate=tag.samplerate
94
94
  @channels=tag.channels
95
+ tag.close if tag.respond_to?(:close)
95
96
  rescue TagLib::BadFile
96
97
  ErrorWarning.new("Cannot read #{file}\'s tag.")
97
98
  @title||=''; @artist||=''; @album||=''; @track||=-1; @genre||=''; @duration||=-1
@@ -103,6 +104,8 @@ class Song
103
104
  rescue TagLib::BadAudioProperties
104
105
  ErrorWarning.new("Cannot read #{file}\'s audio properties.")
105
106
  @bitrate||=-1; @samplerate||=-1; @channels||=-1
107
+ ensure
108
+ tag.close if tag&&tag.respond_to?(:close)#Deprecated (ruby-taglib >= 0.1.3). Use "tag.close if tag"
106
109
  end
107
110
  end
108
111
 
@@ -116,6 +119,8 @@ class Song
116
119
  ErrorWarning.new("Cannot write #{file}\'s tag.")
117
120
  rescue TagLib::BadTag
118
121
  ErrorWarning.new("Cannot write #{file}\'s tag.")
122
+ ensure
123
+ tag.close if tag&&tag.respond_to?(:close)#Deprecated (ruby-taglib >= 0.1.3)
119
124
  end
120
125
  end
121
126
 
data/zik CHANGED
@@ -1,401 +1,2 @@
1
1
  #!/usr/bin/env ruby
2
2
  # encoding: UTF-8
3
-
4
- =begin
5
- Copyright 2007-2011 Vincent Carmona
6
- vinc4mai@gmail.com
7
-
8
- This file is part of ZiK.
9
-
10
- ZiK is free software; you can redistribute it and/or modify
11
- it under the terms of the GNU General Public License as published by
12
- the Free Software Foundation; either version 2 of the License, or
13
- (at your option) any later version.
14
-
15
- ZiK is distributed in the hope that it will be useful,
16
- but WITHOUT ANY WARRANTY; without even the implied warranty of
17
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
- GNU General Public License for more details.
19
-
20
- You should have received a copy of the GNU General Public License
21
- along with ZiK; if not, write to the Free Software
22
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23
- =end
24
-
25
- $name='ZiK'
26
- Version='0.17.0+gitv0.17'
27
-
28
- #Usage
29
- def usage
30
- puts "ZiK is an audio player based on gstreamer.\n\n"
31
- puts "Options."
32
- puts "--help -h\tPrint this help."
33
- puts "--configuration -c <path>\tDirectory used to load and save configuration."
34
- puts "--file -f <files>\tAdd files to playlist."
35
- puts "--append -f <files>\tAppend files playlist."
36
- puts "--show-all\tshow browser and playlist."
37
- puts "--show-browser\tshow browser."
38
- puts "--show-playlist\tshow playlist."
39
- puts "--show-cd\tshow CD."
40
- puts "--show-radio\tshow radios."
41
- puts "--disable-cd\tDisable cd support"
42
- puts "--disable-radio\tDisable webradios"
43
- puts "--disable-module\tDisable module support"
44
- puts "--hide-errors\tDo not show errors dialogs."
45
- puts "--quiet -q\tDo not print on standart output."
46
- puts "--no-save\tDo not overwrite configuration file"
47
- puts "--title -t <name>\tRename window's title."
48
- puts "--version\tDisplay the current version and exit."
49
- end
50
-
51
- #Parse options
52
- $write_config=true
53
- $show_errors=true
54
- $cd=true
55
- $radio=true
56
- $module=true
57
- append=false
58
- playfiles=[]
59
- while arg=ARGV.shift
60
- case arg
61
- when '--version'
62
- puts "ZiK version #{Version}.";exit 0
63
- when '--help', '-h'
64
- usage;exit 0
65
- when '--quiet', '-q'
66
- $stderr=$stdout=File.new('/dev/null', 'w')
67
- when '--no-save'
68
- $write_config=false
69
- when '--hide-errors'
70
- $show_errors=false
71
- when '--disable-cd'
72
- $cd=false
73
- when '--disable-radio'
74
- $radio=false
75
- when '--disable-module'
76
- $module=false
77
- when '--configuration', '-c'
78
- User_dir=ARGV.shift
79
- when '--show-all'
80
- view='all'
81
- when '--show-browser'
82
- view='browser'
83
- when '--show-playlist'
84
- view='playlist'
85
- when '--show-cd'
86
- view='cd'
87
- when '--show-radio'
88
- view='radio'
89
- when '--file', '-f'
90
- append=false
91
- when '--append', '-a'
92
- append=true
93
- when '--title', '-t'
94
- $name+=' - '+ARGV.shift
95
- when /^-/
96
- $stderr.puts "Unknown option. Try ZiK --help.";exit 1
97
- else
98
- playfiles.push(arg)
99
- end
100
- end
101
-
102
- Data_dir='/usr/local/share/ZiK'
103
- Pix_dir=File.join(Data_dir,'pix')
104
- Theme_dir=File.join(Data_dir, 'theme')
105
- Doc_dir='/usr/local/share/doc/ZiK'
106
- Locale_dir='/usr/local/share/locale'
107
-
108
- require 'gettext'
109
- include GetText
110
- bindtextdomain('ZiK', {:path=>Locale_dir})
111
- require File.join(Data_dir, 'gui/error')
112
- estock=ErrorsStock.new
113
-
114
- ErrorInfo.new("Hi! This is #{$name} (#{Version}). Enjoy your music.")
115
-
116
- #Global configuration
117
- $border=5
118
-
119
- #Configuration
120
- require File.join(Data_dir, 'gui/config')
121
- if (defined? User_dir)
122
- Cache_dir=File.join('User_dir', 'cache')
123
- Runtime_dir=File.join('User_dir', 'runtime')
124
- else
125
- User_dir= ENV['XDG_CONFIG_HOME'] ? File.join(ENV['XDG_CONFIG_HOME'], 'ZiK') :
126
- File.join(ENV['HOME'], '.config', 'ZiK')
127
- unless File.exist?(User_dir)#Check for deprecated location of User_dir
128
- old_user_dir=File.join(ENV['HOME'],'.ZiK')
129
- File.rename(old_user_dir, User_dir) if File.directory?(old_user_dir)
130
- end
131
- Cache_dir= ENV['XDG_CACHE_HOME'] ? File.join(ENV['XDG_CACHE_HOME'], 'ZiK') :
132
- File.join(ENV['HOME'], '.cache', 'ZiK')
133
- if ENV['XDG_RUNTIME_DIR']
134
- Runtime_dir=File.join(ENV['XDG_RUNTIME_DIR'], 'ZiK')
135
- else
136
- require 'tempfile'
137
- Runtime_dir=File.join(Dir.tmpdir, 'ZiK-'+ENV['USER'])
138
- ErrorWarning.new("XDG_RUNTIME_DIR is not set. #{Runtime_dir} is used instead.")
139
- end
140
- end
141
- unless File.exist?(User_dir)
142
- Dir.mkdir(User_dir)
143
- config_new=true
144
- end
145
- Dir.mkdir(Cache_dir) unless File.exist?(Cache_dir)
146
- Dir.mkdir(Runtime_dir, 0700) unless File.exist?(Runtime_dir)
147
- if File.directory?(User_dir)
148
- configuration_file=File.join(User_dir,'ZiKrc')
149
- config=Configuration.new(configuration_file)
150
- else
151
- config=Configuration.new("")
152
- $write_config=false
153
- config_new=true
154
- estock.add(ErrorERROR, _("Configuration will not be saved. #{User_dir} is not a directory."))
155
- end
156
- config_new||=false
157
- config['view']=view if view
158
-
159
- #Socket (client part)
160
- module ZiKSocket
161
- Address=File.join(Runtime_dir, 'socket')
162
- end
163
- if File.socket?(ZiKSocket::Address)
164
- require File.join(Data_dir, 'gui/socket')
165
- begin
166
- client=ZiKSocket::Client.new
167
- ErrorInfo.new(_("Multisession : server already exists."))
168
- playfiles.each{|file|
169
- file=File.join(Dir.pwd, file) unless file =~ /^\//#absolute path
170
- p client.command("add #{file}")
171
- }
172
- client.command("show")
173
- client.close
174
- exit 0
175
- rescue Errno::ECONNREFUSED
176
- ErrorError.new(_("Multissession: socket exists but server does not respond."))
177
- File.delete(ZiKSocket::Address)
178
- end
179
- end
180
-
181
- #Files needed for playlist managing
182
- require 'pathname'
183
- require 'rexml/document'
184
- begin
185
- require 'taglib2'
186
- rescue LoadError
187
- require 'taglib'
188
- ErrorWarning.new("ruby-taglib is depreated.")
189
- end
190
- require File.join(Data_dir, 'playlist/song')
191
- require File.join(Data_dir, 'playlist/common')
192
- require File.join(Data_dir, 'playlist/export')
193
- require File.join(Data_dir, 'playlist/playlist')
194
-
195
-
196
- #Files needed for the audio player
197
- require 'gst'
198
- require File.join(Data_dir, 'player/player')
199
-
200
- #Files needed for graphical interface
201
- require 'gtk2'
202
- require 'find'
203
- require File.join(Data_dir, 'gui/common')
204
- require File.join(Data_dir, 'gui/preference')
205
- require File.join(Data_dir, 'gui/search')
206
- require File.join(Data_dir, 'playlist/editlist')
207
- require File.join(Data_dir, 'gui/edit')
208
- require File.join(Data_dir, 'gui/progress')
209
- require File.join(Data_dir, 'gui/gui')
210
-
211
- #Files needed for audio cd
212
- if $cd
213
- begin
214
- require 'musicbrainz'
215
- require File.join(Data_dir, 'playlist/cdlist')
216
- require File.join(Data_dir, 'player/cdplayer')
217
- require File.join(Data_dir, 'gui/cdgui')
218
- rescue LoadError
219
- estock.add(ErrorERROR, _("CD support disable. mb-ruby is probably not installed."))
220
- $cd=false
221
- end
222
- end
223
-
224
- #Files needed for webradio
225
- if $radio
226
- begin
227
- require 'uri'
228
- require 'net/http'
229
- require File.join(Data_dir, 'playlist/radiolist')
230
- require File.join(Data_dir, 'player/radioplayer')
231
- require File.join(Data_dir, 'gui/radiogui')
232
- rescue LoadError
233
- estock.add(ErrorERROR, _("Radio support disable."))
234
- $radio=false
235
- end
236
- end
237
-
238
- #Playlists
239
- if (playfiles.empty? || append)
240
- playlist=PlayList.new(File.join(User_dir,'playlist'),
241
- config['current_song'], config['shuffle'], config['repeat'], config['name_format'], config['sort_by_track'])
242
- end
243
- playlist||=PlayList.new(nil, 0, config['shuffle'], config['repeat'], config['name_format'], config ['sort_by_track'])
244
- playfiles.each{|f| playlist.add(f)}
245
-
246
- cdlist=Cd::List.new(config) if $cd
247
- if $radio
248
- radio_file=File.join(User_dir,'radio')
249
- radiolist=Radio::List.new(radio_file)
250
- end
251
-
252
- #Players
253
- player=Player.new
254
- player.volume=config['volume']
255
- if $cd
256
- begin
257
- cdplayer=Cd::Player.new(config['cd_device'])
258
- cdplayer.volume=config['volume']
259
- rescue
260
- estock.add(ErrorERROR, _("CD support disable (device not found?)."))
261
- $cd=false
262
- end
263
- end
264
- if $radio
265
- radioplayer=Radio::Player.new
266
- radioplayer.volume=config['volume']
267
- end
268
-
269
- cdplayer=nil unless $cd
270
- cdlist=nil unless $cd
271
- radiolist=nil unless $radio
272
-
273
- #Gui
274
- module View
275
- View::ALL=0
276
- View::PLAYLIST=1
277
- View::BROWSER=2
278
- View::COMPACT=3
279
- if $cd
280
- View::CD=4
281
- $radio ? View::RADIO=5 : View::RADIO=View::ALL
282
- else
283
- View::CD=View::ALL
284
- $radio ? View::RADIO=4 : View::RADIO=View::ALL
285
- end
286
- end
287
- module DragType
288
- #Type of data
289
- #General types
290
- #DragType::STRING=104 #Gdk::Atom.intern('string',true).to_i
291
- DragType::URI_LIST=105 #text/uri-list
292
- #DragType::PLAIN=106 #text/plain
293
- #ZiK types
294
- DragType::BROWSER_SELECTION=700
295
- end
296
- begin
297
- Gdk::Color.parse(config['playing_color'])
298
- rescue
299
- ErrorError.new("#{config['playing_color']} is not a valid color. Use default one.")
300
- config['playing_color']=config.default['playing_color']
301
- end
302
- if config_new
303
- require File.join(Data_dir, 'gui/assistant')
304
- assistant=Assistant.new(config)
305
- def assistant.quit
306
- self.destroy
307
- Gtk.main_quit
308
- end
309
- Gtk.main
310
- end
311
- gui=Gui.new(player, playlist, config, cdplayer, cdlist, radioplayer, radiolist)
312
- gui.show
313
- Error.gui=gui
314
- ErrorsStock.gui=gui
315
- player.gui=gui
316
- cdplayer.gui=gui if $cd
317
- radioplayer.gui=gui if $radio
318
-
319
- #Socket (Server part)
320
- ##See http://ruby-gnome2.sourceforge.jp/hiki.cgi?tips_threads if random crash happen (or try GLib::Idle before)
321
- module ZiKSocket
322
- def ZiKSocket.clean
323
- if File.socket?(Address)
324
- c=ZiKSocket::Client.new
325
- c.close_server
326
- File.delete(Address)
327
- end
328
- end
329
- end
330
- if config['socket']
331
- require File.join(Data_dir, 'gui/socket')
332
- ZiKSocket.start_server(gui, config, playlist)
333
- end
334
-
335
- #Modules
336
- if $module
337
- require File.join(Data_dir, 'gui/mod')
338
- Mod.zik=gui
339
- modinput={:config_dir=>File.join(User_dir, 'mod'), :mod_dir=>File.join(Data_dir,'mod'), :pix_dir=>Pix_dir}
340
- ext='.rb'
341
-
342
- mfiles=Dir.glob(File.join(Data_dir, 'mod', '*'+ext))
343
- mfiles.each{|file|
344
- begin
345
- require file#require all modules in order to build preferences dialog.
346
- rescue LoadError
347
- estock.add(ErrorERROR, _("Cannot loaded a module (#{file})."))
348
- rescue ModNotUniqueId
349
- estock.add(ErrorERROR, _("Module id not unique (#{file})."))
350
- end
351
- }
352
- Mod.own.each{|mod|
353
- mod.init(modinput)
354
- mod.load if config['module'].split(',').include?(mod.id)
355
- }
356
-
357
- Mod.global=false
358
- mfiles=Dir.glob(File.join(User_dir, 'mod','*'+ext))
359
- modinput[:mod_dir]=File.join(User_dir, 'mod')
360
- mfiles.each{|file|
361
- begin
362
- require file#require all modules in order to build preferences dialog.
363
- rescue LoadError
364
- estock.add(ErrorERROR, _("Cannot loaded a module (#{file})."))
365
- rescue ModNotUniqueId
366
- estock.add(ErrorERROR, _("Module id not unique (#{file})."))
367
- end
368
- }
369
- Mod.user.each{|mod|
370
- mod.init(modinput)
371
- mod.load if config['module'].split(',').include?(mod.id)
372
- }
373
- ModErrorLoadError.show_all
374
- end
375
-
376
- #Main
377
- gui.play if config['play_on_start']
378
- estock.show_all
379
- begin
380
- Gtk.main
381
- if $write_config
382
- playlist.save_zik(File.join(User_dir,'playlist'), config['relative_playlist'])
383
- config['current_song']=playlist.current
384
- config['volume']=player.volume
385
- config.write
386
- radiolist.write if $radio
387
- end
388
- Mod.all.each{|mod| mod.quit} if $module
389
- ensure
390
- player.stop
391
- cdplayer.stop if $cd
392
- radioplayer.stop if $radio
393
- ZiKSocket.clean
394
- begin
395
- Dir.rmdir(Runtime_dir) if File.directory?(Runtime_dir)
396
- rescue Errno::ENOTEMPTY
397
- ErrorError.new("Cannot delete #{Runtime_dir}.")
398
- end
399
- end
400
-
401
- ErrorInfo.new("Bye.")
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zik
3
3
  version: !ruby/object:Gem::Version
4
- hash: 91
5
- prerelease: false
4
+ hash: 89
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 17
9
- - 0
10
- version: 0.17.0
9
+ - 1
10
+ version: 0.17.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Vincent Carmona
@@ -36,8 +36,7 @@ cert_chain:
36
36
  oxzIRXlS
37
37
  -----END CERTIFICATE-----
38
38
 
39
- date: 2011-04-15 00:00:00 +02:00
40
- default_executable:
39
+ date: 2011-12-13 00:00:00 Z
41
40
  dependencies:
42
41
  - !ruby/object:Gem::Dependency
43
42
  name: gtk2
@@ -110,7 +109,7 @@ dependencies:
110
109
  type: :runtime
111
110
  version_requirements: *id005
112
111
  - !ruby/object:Gem::Dependency
113
- name: ruby-libnotify
112
+ name: ruby-mp3info
114
113
  prerelease: false
115
114
  requirement: &id006 !ruby/object:Gem::Requirement
116
115
  none: false
@@ -124,7 +123,7 @@ dependencies:
124
123
  type: :runtime
125
124
  version_requirements: *id006
126
125
  - !ruby/object:Gem::Dependency
127
- name: ruby-mp3info
126
+ name: globalhotkeys
128
127
  prerelease: false
129
128
  requirement: &id007 !ruby/object:Gem::Requirement
130
129
  none: false
@@ -137,20 +136,6 @@ dependencies:
137
136
  version: "0"
138
137
  type: :runtime
139
138
  version_requirements: *id007
140
- - !ruby/object:Gem::Dependency
141
- name: globalhotkeys
142
- prerelease: false
143
- requirement: &id008 !ruby/object:Gem::Requirement
144
- none: false
145
- requirements:
146
- - - ">="
147
- - !ruby/object:Gem::Version
148
- hash: 3
149
- segments:
150
- - 0
151
- version: "0"
152
- type: :runtime
153
- version_requirements: *id008
154
139
  description:
155
140
  email: vinc4mai@gmail.com
156
141
  executables:
@@ -232,9 +217,6 @@ files:
232
217
  - mod/brainz/ofa.rb
233
218
  - mod/brainz/song.rb
234
219
  - mod/brainz/widget.rb
235
- - mod/interact.rb
236
- - mod/interact/configwidget.rb
237
- - mod/interact/interaction.rb
238
220
  - doc/COPYING
239
221
  - doc/html/fr/index.html
240
222
  - doc/html/index.html
@@ -247,10 +229,8 @@ files:
247
229
  - doc/html/pix/logo.png
248
230
  - doc/html/styles/main.css
249
231
  - doc/ChangeLog
250
- - doc/man/zik.1.gz
251
232
  - doc/man/manpage.1
252
233
  - ./zik
253
- has_rdoc: true
254
234
  homepage: http://zik.rubyforge.org/
255
235
  licenses:
256
236
  - General Public License v2
@@ -280,7 +260,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
280
260
  requirements:
281
261
  - GStreamer Base Plugins
282
262
  rubyforge_project: zik
283
- rubygems_version: 1.3.7
263
+ rubygems_version: 1.7.2
284
264
  signing_key:
285
265
  specification_version: 3
286
266
  summary: ZiK is an audio player based on gstreamer. It uses the path of your audio files instead of a music library.
metadata.gz.sig CHANGED
@@ -1,3 +1,2 @@
1
- 8�����l�
2
- /�8]����(]�|ľ���8U߱��[��1D
3
- �}nl\�5�����j�A���k��,�l "0+��T�*����όd���}�M'�m]�k����yI��|����!�:I/�������Hh2:mă`�R{����4%��c�:\^E�׿j�5g���b�4�L�P�]�F��P� �םz���J��4{�=��P::!��.-Tr���)�B�L�V���PL�tu��;�4@`F�K{�
1
+ 1��`;�p<��w���v3o�ĄW� S��������!ѧ��f?�bJ�{b�Z�ᵀg���.Z_K,>`hѯ���r���5B�B�V�b�=�%ī�����3�!:�ʩ
2
+ U�&@��j�Fa0 l���1|:
Binary file
@@ -1,131 +0,0 @@
1
- # encoding: UTF-8
2
- =begin
3
- Copyright 2007-2010 Vincent Carmona
4
- vinc4mai@gmail.com
5
-
6
- This file is part of ZiK.
7
-
8
- ZiK is free software; you can redistribute it and/or modify
9
- it under the terms of the GNU General Public License as published by
10
- the Free Software Foundation; either version 2 of the License, or
11
- (at your option) any later version.
12
-
13
- ZiK is distributed in the hope that it will be useful,
14
- but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- GNU General Public License for more details.
17
-
18
- You should have received a copy of the GNU General Public License
19
- along with ZiK; if not, write to the Free Software
20
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
- =end
22
-
23
- module Interact
24
- Menu,LocalMenu=[], []
25
- Arg, LocalArg=[], []
26
- def self.menu_const_set(name, val, lval)
27
- Menu.push(const_set(name, val))#Is it ok to push an object on a constant (not frozen) array ?
28
- LocalMenu.push(const_set("LOCAL_"+name, lval))
29
- end
30
-
31
- def self.arg_const_set(name, val, lval)
32
- Arg.push(const_set(name, val))
33
- LocalArg.push(const_set("LOCAL_"+name, lval))
34
- end
35
-
36
- menu_const_set "MENU", "Menu", _("Menu")
37
-
38
- arg_const_set "NONE", "None", _("None")
39
- arg_const_set "PLAYLIST_FILES", "Playlit files", _("Playlit files")
40
- arg_const_set "CURRENT_SONG", "Current Song", _("Current song")
41
- arg_const_set "CURRENT_SONG_NAME", "Current song name", _("Current song name")
42
-
43
- def Interact.mod
44
- @m||=Mod.new('interact', "Interact", _("Add menu entries to interact with ZiK."),
45
- 'Vincent Carmona <vinc4mai@gmail.com>', 'GPL-2')
46
- end
47
-
48
- Interact.mod
49
- def @m.init(input)
50
- @dir=input[:mod_dir]
51
- require File.join(@dir, 'interact', 'interaction')
52
- require File.join(@dir, 'interact', 'configwidget')
53
- @interactions=Interaction.read(input[:config_dir])
54
- @destroy_on_unload=[]
55
- end
56
-
57
- def @m.load
58
- unless @loaded
59
- @interactions.each{|interaction|
60
- case interaction[:menu]
61
- when MENU
62
- it=Gtk::MenuItem.new(interaction[:name])
63
- it.signal_connect('activate'){
64
- arg=resolve_argument(interaction[:argument])
65
- c=interaction[:command].split(' ')
66
- t=[*c]+[*arg]
67
- Thread.new{system(*t)}
68
- }
69
- menu_add(it.show)
70
- @destroy_on_unload.push(it)
71
- else
72
- ModErrorError.new(self,
73
- _("Cannot create interactions named #{interaction[:name]}(unknow menu type)."), true)
74
- end
75
- }
76
- @loaded=true
77
- else
78
- false
79
- end
80
- end
81
-
82
- def @m.unload
83
- if @loaded
84
- @destroy_on_unload.each{|w| w.destroy}
85
- @destroy_on_unload.clear
86
- menu_hide
87
- @loaded=false
88
- true
89
- else
90
- false
91
- end
92
- end
93
-
94
- def @m.configwidget
95
- @wconfig=ConfigWidget.new(@interactions)
96
- end
97
-
98
- def @m.saveconfig
99
- old_interactions=@interactions
100
- @interactions=@wconfig.interactions
101
- reload if @loaded
102
- end
103
-
104
- def @m.quit
105
- Interaction.write(@interactions)
106
- end
107
-
108
- private
109
-
110
- def @m.reload
111
- unload
112
- self.load
113
- end
114
-
115
- def @m.resolve_argument(type)
116
- #escape=/[\ \'\#\[\]\(\)\&\;\|\!]/; String#gsub(escape){|s| '\\'+s}
117
- case type
118
- when NONE
119
- ""
120
- when PLAYLIST_FILES
121
- list=zik.playlist
122
- list.songs.map{|song| song.path}
123
- when CURRENT_SONG
124
- list=zik.playlist
125
- list.songs[list.current].path
126
- when CURRENT_SONG_NAME
127
- list=zik.playlist
128
- list.songs[list.current].name
129
- end
130
- end
131
- end
@@ -1,107 +0,0 @@
1
- # encoding: UTF-8
2
- =begin
3
- Copyright 2007-2010 Vincent Carmona
4
- vinc4mai@gmail.com
5
-
6
- This file is part of ZiK.
7
-
8
- ZiK is free software; you can redistribute it and/or modify
9
- it under the terms of the GNU General Public License as published by
10
- the Free Software Foundation; either version 2 of the License, or
11
- (at your option) any later version.
12
-
13
- ZiK is distributed in the hope that it will be useful,
14
- but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- GNU General Public License for more details.
17
-
18
- You should have received a copy of the GNU General Public License
19
- along with ZiK; if not, write to the Free Software
20
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
- =end
22
-
23
- module Interact
24
- class InteractionWidget
25
- attr_reader :menu, :name, :command, :argument, :rm
26
-
27
- def initialize(interaction=nil)
28
- @removed=false
29
- if interaction
30
- menu=Menu.index(interaction[:menu])
31
- name=interaction[:name]
32
- command=interaction[:command]
33
- arg=Arg.index(interaction[:argument])
34
- sensitive=true
35
- end
36
- menu||=-1
37
- name||=""
38
- command||=""
39
- arg||=0
40
- sensitive||=false
41
-
42
- @menu=Gtk::ComboBox.new
43
- @menu.append_text(LOCAL_MENU)
44
- @menu.active=menu
45
- @menu.signal_connect('changed'){
46
- sensitive=@menu.active>=0
47
- [@name, @command, @argument].each{|w| w.sensitive=sensitive}
48
- }
49
- @name=Gtk::Entry.new
50
- @name.text=name
51
- @command=Gtk::Entry.new
52
- @command.text=command
53
- @argument=Gtk::ComboBox.new
54
- LocalArg.each{|c| @argument.append_text(c)}
55
- @argument.active=arg
56
- @rm=Gtk::Button.new
57
- @rm.image=Gtk::Image.new(Gtk::Stock::REMOVE, Gtk::IconSize::BUTTON)
58
- @rm.signal_connect('clicked'){
59
- [@menu, @name, @command, @argument, @rm].each{|w| w.hide}
60
- @removed=true
61
- }
62
- [@menu, @name, @command, @argument, @rm].each{|w| w.show}
63
- [@name, @command, @argument].each{|w| w.sensitive=sensitive} unless sensitive
64
- end
65
-
66
- def to_h
67
- if @removed||@menu.active<0
68
- {}
69
- else
70
- {:menu=>Menu[LocalMenu.index(@menu.active_text)], :name=>@name.text,
71
- :command=>@command.text, :argument=>Arg[LocalArg.index(@argument.active_text)]}
72
- end
73
- end
74
- end
75
-
76
- class ConfigWidget < Gtk::Table
77
- def initialize(interactions)
78
- @iwidgets=[]; @nb=0
79
- badd=Gtk::Button.new
80
- badd.image=Gtk::Image.new(Gtk::Stock::ADD, Gtk::IconSize::BUTTON)
81
- badd.signal_connect('clicked'){add_interaction}
82
- super(interactions.length+1, 5)
83
- self.attach(badd, 0, 5, 0, 1)
84
- self.attach(Gtk::Label.new(_("Menu")), 0, 1, 1, 2)
85
- self.attach(Gtk::Label.new(_("Name")), 1, 2, 1, 2)
86
- self.attach(Gtk::Label.new(_("Command")), 2, 3, 1, 2)
87
- self.attach(Gtk::Label.new(_("Argument")), 3, 4, 1, 2)
88
- interactions.each_with_index{|interact, i| add_interaction(interact)}
89
- end
90
-
91
- def add_interaction(interaction=nil)
92
- @iwidgets.push(iwidget=InteractionWidget.new(interaction))
93
- self.attach(iwidget.menu, 0, 1, @nb+2, @nb+3)
94
- self.attach(iwidget.name, 1, 2, @nb+2, @nb+3)
95
- self.attach(iwidget.command, 2, 3, @nb+2, @nb+3)
96
- self.attach(iwidget.argument, 3, 4, @nb+2, @nb+3)
97
- self.attach(iwidget.rm, 4, 5, @nb+2, @nb+3)
98
- @nb+=1
99
- end
100
-
101
- def interactions
102
- tmp=@iwidgets.map{|w| w.to_h}
103
- tmp.reject!{|h| h.empty?||h[:name].empty?||h[:command].empty?}
104
- tmp.map{|h| Interaction.new(h)}
105
- end
106
- end
107
- end
@@ -1,79 +0,0 @@
1
- # encoding: UTF-8
2
- =begin
3
- Copyright 2007-2010 Vincent Carmona
4
- vinc4mai@gmail.com
5
-
6
- This file is part of ZiK.
7
-
8
- ZiK is free software; you can redistribute it and/or modify
9
- it under the terms of the GNU General Public License as published by
10
- the Free Software Foundation; either version 2 of the License, or
11
- (at your option) any later version.
12
-
13
- ZiK is distributed in the hope that it will be useful,
14
- but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- GNU General Public License for more details.
17
-
18
- You should have received a copy of the GNU General Public License
19
- along with ZiK; if not, write to the Free Software
20
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
- =end
22
-
23
- module Interact
24
- class Interaction < Hash
25
- def Interaction.read(dir)
26
- @file=File.join(dir,'interactionrc')
27
- if File.exist?(@file)
28
- begin
29
- f=File.open(@file,'r')
30
- interactions=f.read.split("\n\n").map!{|i| i.split("\n").reject{|a| a =~ /^#/}.reject{|a| a =~ /^\n/}}
31
- interactions.map!{|i| Interaction.from_a(i)}
32
- interactions.reject!{|i| i.empty?}
33
- rescue
34
- interactions=[]
35
- ModErrorError.new(Interact.mod, "reading configuration file.")
36
- ensure
37
- f.close if f
38
- end
39
- else
40
- ModErrorError.new(Interact.mod, "Configuration file not found.")
41
- end
42
- interactions||[]
43
- end
44
-
45
- def Interaction.write(interactions)
46
- if $write_config
47
- begin
48
- dir=File.dirname(@file)
49
- Dir.mkdir(dir) unless File.exist?(dir)
50
- f=File.open(@file,'w')
51
- f.puts '##Configuration file for interact module (ZiK audio player).'
52
- interactions.each{|i|
53
- i.each_pair{|key, value| f.puts "#{key}=#{value}"}
54
- f.puts ""
55
- }
56
- ModErrorInfo.new(Interact.mod, "configuration saved")
57
- rescue
58
- ModErrorError.new(Interact.mod, "writting configuration file.")
59
- ensure
60
- f.close if f
61
- end
62
- end
63
- end
64
-
65
- def Interaction.from_a(a)
66
- i=Interaction.new
67
- a.each{|l|
68
- k, v=l.split('=', 2)
69
- i[k.to_sym]=v
70
- }
71
- i
72
- end
73
-
74
- def initialize(hash=nil)
75
- super()
76
- self.merge!(hash) if hash
77
- end
78
- end
79
- end