zik 0.16.1
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.tar.gz.sig +0 -0
- data/ChangeLog +222 -0
- data/INSTALL +34 -0
- data/Makefile.in +199 -0
- data/README +53 -0
- data/ZiK.desktop +11 -0
- data/ZiK.rb +377 -0
- data/configure +269 -0
- data/dependencies +142 -0
- data/doc/COPYING +340 -0
- data/doc/ChangeLog +222 -0
- data/doc/html/fr/index.html +128 -0
- data/doc/html/index.html +126 -0
- data/doc/html/pix/ZiK3.png +0 -0
- data/doc/html/pix/capture.png +0 -0
- data/doc/html/pix/capture_cd.png +0 -0
- data/doc/html/pix/capture_compact.png +0 -0
- data/doc/html/pix/capture_radio.png +0 -0
- data/doc/html/pix/icon.png +0 -0
- data/doc/html/pix/logo.png +0 -0
- data/doc/html/styles/main.css +47 -0
- data/doc/man/manpage.1 +43 -0
- data/gui/assistant.rb +133 -0
- data/gui/cdgui.rb +54 -0
- data/gui/common.rb +56 -0
- data/gui/config.rb +120 -0
- data/gui/edit.rb +413 -0
- data/gui/error.rb +124 -0
- data/gui/gui.rb +1383 -0
- data/gui/mod.rb +239 -0
- data/gui/preference.rb +496 -0
- data/gui/progress.rb +50 -0
- data/gui/radiogui.rb +404 -0
- data/gui/search.rb +249 -0
- data/gui/socket.rb +107 -0
- data/mod/brainz.rb +76 -0
- data/mod/brainz/dialogs.rb +132 -0
- data/mod/brainz/functions.rb +55 -0
- data/mod/brainz/ofa.rb +76 -0
- data/mod/brainz/song.rb +139 -0
- data/mod/brainz/widget.rb +34 -0
- data/mod/cover.rb +90 -0
- data/mod/cover/application-x-cd-image.svg +666 -0
- data/mod/cover/config.rb +79 -0
- data/mod/cover/configwidget.rb +35 -0
- data/mod/cover/widget.rb +147 -0
- data/mod/hotkeys.rb +137 -0
- data/mod/hotkeys/config.rb +84 -0
- data/mod/hotkeys/configwidget.rb +93 -0
- data/mod/interact.rb +131 -0
- data/mod/interact/configwidget.rb +107 -0
- data/mod/interact/interaction.rb +79 -0
- data/mod/notify.rb +128 -0
- data/mod/notify/config.rb +96 -0
- data/mod/notify/configwidget.rb +76 -0
- data/mod/notify/window.rb +56 -0
- data/mod/trayicon.rb +83 -0
- data/mod/trayicon/config.rb +79 -0
- data/mod/trayicon/configwidget.rb +35 -0
- data/mod/trayicon/icon.rb +99 -0
- data/pix/ZiK.svg +78 -0
- data/pix/ZiK3.png +0 -0
- data/pix/assistant/capture.png +0 -0
- data/pix/gtk-directory.svg +287 -0
- data/pix/media-cdrom.svg +292 -0
- data/pix/network-wireless.svg +429 -0
- data/pix/player_play.svg +286 -0
- data/pix/sound.svg +244 -0
- data/pix/sound_directory.svg +464 -0
- data/player/cdplayer.rb +108 -0
- data/player/player.rb +132 -0
- data/player/radioplayer.rb +124 -0
- data/playlist/cdlist.rb +140 -0
- data/playlist/common.rb +343 -0
- data/playlist/editlist.rb +50 -0
- data/playlist/export.rb +108 -0
- data/playlist/playlist.rb +143 -0
- data/playlist/radiolist.rb +148 -0
- data/playlist/song.rb +122 -0
- data/po/ZiK.pot +622 -0
- data/po/fr/ZiK.po +658 -0
- data/zik +2 -0
- metadata +265 -0
- metadata.gz.sig +0 -0
data/mod/cover/config.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
=begin
|
3
|
+
Copyright 2007-2011 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 Cover
|
24
|
+
class Configuration < Hash
|
25
|
+
def initialize(dir)
|
26
|
+
@file=File.join(dir,'coverrc')
|
27
|
+
default={:hide=>false}
|
28
|
+
super
|
29
|
+
self.merge!(default)
|
30
|
+
if File.exist?(@file)
|
31
|
+
read
|
32
|
+
else
|
33
|
+
ModErrorWarning.new(Cover.mod, "Configuration file not found. Use default configuration.")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def read
|
38
|
+
begin
|
39
|
+
f=File.open(@file,'r')
|
40
|
+
array=f.readlines
|
41
|
+
array.reject!{|a| a =~ /^#/}
|
42
|
+
array.reject!{|a| a =~ /^\n/}
|
43
|
+
array.each{|a| a.chomp!}
|
44
|
+
array.each{|a|
|
45
|
+
l=a.split('=', 2)
|
46
|
+
self[l[0].to_sym]=l[1]
|
47
|
+
}
|
48
|
+
str2value
|
49
|
+
ModErrorInfo.new(Cover.mod, "configuration read.")
|
50
|
+
rescue
|
51
|
+
ModErrorError.new(Cover.mod, "reading configuration file.")
|
52
|
+
ensure
|
53
|
+
f.close if f
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def save
|
58
|
+
if $write_config
|
59
|
+
begin
|
60
|
+
dir=File.dirname(@file)
|
61
|
+
Dir.mkdir(dir) unless File.exist?(dir)
|
62
|
+
f=File.open(@file,'w')
|
63
|
+
f.puts '##Configuration file for cover module (ZiK audio player).'
|
64
|
+
self.each_pair{|key, value| f.puts "#{key}=#{value}"}
|
65
|
+
ModErrorInfo.new(Cover.mod, "Configuration saved.")
|
66
|
+
rescue
|
67
|
+
ModErrorError.new(Cover.mod, "Writting configuration file.")
|
68
|
+
ensure
|
69
|
+
f.close if f
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
def str2value
|
76
|
+
self[:hide]=="true" ? self[:hide]=true : self[:hide]=false
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
=begin
|
3
|
+
Copyright 2007-2011 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 Cover
|
24
|
+
class ConfigWidget < Gtk::Frame
|
25
|
+
attr_reader :bhide
|
26
|
+
|
27
|
+
def initialize(config)
|
28
|
+
@bhide=Gtk::CheckButton.new(_("Check to hide cover area when no cover is found."))
|
29
|
+
@bhide.active=config[:hide]
|
30
|
+
|
31
|
+
super(_('Hide'))
|
32
|
+
self.add(@bhide)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/mod/cover/widget.rb
ADDED
@@ -0,0 +1,147 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
=begin
|
3
|
+
Copyright 2007-2011 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 Cover
|
24
|
+
Encoding=[LATIN1=0, UTF16_LE=1, UTF16_BE=2, UTF8=3]
|
25
|
+
|
26
|
+
class Widget < Gtk::Table
|
27
|
+
attr_reader :mp3info
|
28
|
+
|
29
|
+
def initialize(dir, zik)
|
30
|
+
begin
|
31
|
+
require 'mp3info'
|
32
|
+
@mp3info=true
|
33
|
+
rescue LoadError
|
34
|
+
ModErrorLoadError.new(Cover.mod, "ruby-mp3info not found. Covers from tag will not be displayed.")
|
35
|
+
@mp3info=false
|
36
|
+
end
|
37
|
+
|
38
|
+
@zik=zik
|
39
|
+
@default=File.join(dir, 'cover', 'application-x-cd-image.svg')
|
40
|
+
@title=Gtk::Label.new(_('Title: '))
|
41
|
+
@artist=Gtk::Label.new(_('Artist: '))
|
42
|
+
@album=Gtk::Label.new(_('Album: '))
|
43
|
+
@cover=Gtk::Image.new(Gdk::Pixbuf.new(@default, 124, 124))
|
44
|
+
|
45
|
+
super(5 ,2)
|
46
|
+
self.column_spacings=$border
|
47
|
+
self.attach(@cover, 0, 1, 0, 5, Gtk::SHRINK, Gtk::SHRINK)
|
48
|
+
self.attach(@title, 1, 2, 1, 2, Gtk::SHRINK, Gtk::SHRINK)
|
49
|
+
self.attach(@artist, 1, 2, 2, 3, Gtk::SHRINK, Gtk::SHRINK)
|
50
|
+
self.attach(@album, 1, 2, 3, 4, Gtk::SHRINK, Gtk::SHRINK)
|
51
|
+
end
|
52
|
+
|
53
|
+
def new_song(song)
|
54
|
+
case song.type
|
55
|
+
when SONG_RADIO
|
56
|
+
@title.text=_('Title: '); @artist.text=_('Artist: '); @album.text=_('Album: ')
|
57
|
+
false
|
58
|
+
when SONG_CD
|
59
|
+
update_text(song)
|
60
|
+
false
|
61
|
+
when SONG_FILE
|
62
|
+
update_text(song); tf=find_cover(song)
|
63
|
+
@cover.show#Update view
|
64
|
+
tf
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def update_text(song)
|
71
|
+
@title.text=_('Title: ')+song.title
|
72
|
+
@artist.text=_('Artist: ')+song.artist
|
73
|
+
@album.text=_('Album: ')+song.album
|
74
|
+
end
|
75
|
+
|
76
|
+
def find_cover(song)
|
77
|
+
if @mp3info
|
78
|
+
begin
|
79
|
+
t=Mp3Info.new(song.path)
|
80
|
+
if t.hastag2?
|
81
|
+
case t.tag2.version
|
82
|
+
when '2.3.0', '2.4.0'
|
83
|
+
apic=t.tag2['APIC']
|
84
|
+
enc=apic.unpack('c')[0]
|
85
|
+
case enc
|
86
|
+
when LATIN1, UTF8
|
87
|
+
pixstr=apic.unpack('c Z* c Z* a*')[4]
|
88
|
+
@cover.pixbuf=pixload(pixstr)
|
89
|
+
return true
|
90
|
+
when UTF16_LE, UTF16_BE
|
91
|
+
cp=apic.unpack('c Z* c a*')[3]
|
92
|
+
comment, pixstr=cp.split(/\000\000/,2)
|
93
|
+
comment+=pixstr.slice!(0, 1) while pixstr[0]==?\000
|
94
|
+
@cover.pixbuf=pixload(pixstr)
|
95
|
+
return true
|
96
|
+
else
|
97
|
+
ModErrorError.new(Cover.mod, "Encoding of #{song.path} APIC frame was not found.")
|
98
|
+
end
|
99
|
+
else
|
100
|
+
ModErrorError.new(Cover.mod, "id3v#{t.tag2.version} is not supported")
|
101
|
+
end
|
102
|
+
else
|
103
|
+
ModErrorError.new(Cover.mod, "No id3v2 tag found in #{song.path}.")
|
104
|
+
end
|
105
|
+
rescue
|
106
|
+
ModErrorInfo.new(Cover.mod, "cannot found cover in #{song.path} tag.")
|
107
|
+
end
|
108
|
+
end
|
109
|
+
dir=File.dirname(song.path)
|
110
|
+
files=Dir.glob(File.join(dir.gsub(/(?=[{\[\]}*])/, '\\'), '*'))#Error in Dir.glob when file contains [ or ]. str.gsub(/(?=[{\[\]}*])/, '\\') -> escape { [ ] } *
|
111
|
+
files.map!{|file| File.basename(file)}
|
112
|
+
f=files.grep(/^cover\.(jpg|png)$/i)
|
113
|
+
unless f.empty?
|
114
|
+
@cover.pixbuf=pixbuf(File.join(dir, f[0]))
|
115
|
+
return true
|
116
|
+
end
|
117
|
+
f=files.grep(/cover.*\.(jpg|png)$/i)
|
118
|
+
unless f.empty?
|
119
|
+
@cover.pixbuf=pixbuf(File.join(dir, f[0]))
|
120
|
+
return true
|
121
|
+
end
|
122
|
+
f=files.grep(/\.(jpg|png)$/i)
|
123
|
+
unless f.empty?
|
124
|
+
@cover.pixbuf=pixbuf(File.join(dir, f[0]))
|
125
|
+
return true
|
126
|
+
end
|
127
|
+
@cover.pixbuf=pixbuf(@default)
|
128
|
+
false
|
129
|
+
end
|
130
|
+
|
131
|
+
def pixload(pixstr)
|
132
|
+
pixloader=Gdk::PixbufLoader.new
|
133
|
+
pixloader.signal_connect('size-prepared'){|pixload, width, height|
|
134
|
+
pixloader.set_size((width.to_f/height*124).round, 124)
|
135
|
+
}
|
136
|
+
pixloader.write(pixstr)
|
137
|
+
pixloader.close
|
138
|
+
pixloader.pixbuf
|
139
|
+
end
|
140
|
+
|
141
|
+
def pixbuf(file)
|
142
|
+
#return pixbuf from a file
|
143
|
+
format, width, height=Gdk::Pixbuf.get_file_info(file)
|
144
|
+
Gdk::Pixbuf.new(file, (width.to_f/height*124).round, 124)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
data/mod/hotkeys.rb
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
=begin
|
3
|
+
Copyright 2007-2011 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 Hotkeys
|
24
|
+
begin
|
25
|
+
Gdk::Keyval::GDK_KEY_VoidSymbol
|
26
|
+
rescue NameError
|
27
|
+
Gdk::Keyval::GDK_KEY_VoidSymbol=Gdk::Keyval::GDK_VoidSymbol
|
28
|
+
end
|
29
|
+
|
30
|
+
def Hotkeys.mod
|
31
|
+
@m||=Mod.new('hotkeys', "HotKeys", _("Set global hotkeys."),
|
32
|
+
'Vincent Carmona <vinc4mai@gmail.com>', 'GPL-2')
|
33
|
+
end
|
34
|
+
|
35
|
+
Hotkeys.mod
|
36
|
+
def @m.init(input)
|
37
|
+
@rghk=false
|
38
|
+
@dir=input[:mod_dir]
|
39
|
+
@zik=zik
|
40
|
+
require File.join(@dir, 'hotkeys', 'config')
|
41
|
+
@config=Configuration.new(input[:config_dir])
|
42
|
+
require File.join(@dir, 'hotkeys', 'configwidget')
|
43
|
+
end
|
44
|
+
|
45
|
+
def @m.load
|
46
|
+
unless @loaded
|
47
|
+
#Some deprecated code to be cleaned
|
48
|
+
#Since 0.2.0 rghk is required using the 'globalhotkeys' string
|
49
|
+
rghk='globalhotkeys'
|
50
|
+
begin
|
51
|
+
require rghk
|
52
|
+
@rghk=true
|
53
|
+
|
54
|
+
@kb_prev||=GlobalHotKeys::KeyBinder.new
|
55
|
+
@kb_stop||=GlobalHotKeys::KeyBinder.new
|
56
|
+
@kb_play||=GlobalHotKeys::KeyBinder.new
|
57
|
+
@kb_next||=GlobalHotKeys::KeyBinder.new
|
58
|
+
reload(true)
|
59
|
+
|
60
|
+
ModErrorInfo.new(self, "module loaded.")
|
61
|
+
@loaded=true
|
62
|
+
rescue LoadError
|
63
|
+
if rghk=='globalhotkeys'
|
64
|
+
rghk='rghk'
|
65
|
+
retry
|
66
|
+
else
|
67
|
+
ModErrorLoadError.new(self, _("Cannot find rghk. Please install it."))
|
68
|
+
@loaded=false
|
69
|
+
end
|
70
|
+
end
|
71
|
+
else
|
72
|
+
false
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def @m.unload
|
77
|
+
if @loaded
|
78
|
+
[@kb_prev, @kb_stop, @kb_play, @kb_next].each{|kb| kb.unbind}
|
79
|
+
|
80
|
+
ModErrorInfo.new(self, "module unloaded.")
|
81
|
+
@loaded=false
|
82
|
+
true
|
83
|
+
else
|
84
|
+
false
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def @m.configwidget
|
89
|
+
@rghk ? @wconfig=ConfigWidget.new(@config) : Gtk::Label.new(_("Module not loaded. Cannot display configuration."))
|
90
|
+
end
|
91
|
+
|
92
|
+
def @m.saveconfig
|
93
|
+
if @rghk
|
94
|
+
save_mask([@wconfig.bcprev, @wconfig.bsprev, @wconfig.baprev], :prev_mask)
|
95
|
+
save_key(@wconfig.eprev.text, :prev_key)
|
96
|
+
save_mask([@wconfig.bcstop, @wconfig.bsstop, @wconfig.bastop], :stop_mask)
|
97
|
+
save_key(@wconfig.estop.text, :stop_key)
|
98
|
+
save_mask([@wconfig.bcplay, @wconfig.bsplay, @wconfig.baplay], :play_mask)
|
99
|
+
save_key(@wconfig.eplay.text, :play_key)
|
100
|
+
save_mask([@wconfig.bcnext, @wconfig.bsnext, @wconfig.banext], :next_mask)
|
101
|
+
save_key(@wconfig.enext.text, :next_key)
|
102
|
+
reload
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def @m.quit
|
107
|
+
@config.save
|
108
|
+
end
|
109
|
+
|
110
|
+
private
|
111
|
+
|
112
|
+
def @m.reload(force=false)
|
113
|
+
if @loaded||force
|
114
|
+
[@kb_prev, @kb_stop, @kb_play, @kb_next].each{|kb| kb.unbind}
|
115
|
+
@kb_prev.bind(Gdk::Keyval.from_name(@config[:prev_key]), @config[:prev_mask]){@zik.previous_song}
|
116
|
+
@kb_stop.bind(Gdk::Keyval.from_name(@config[:stop_key]), @config[:stop_mask]){@zik.stop}
|
117
|
+
@kb_play.bind(Gdk::Keyval.from_name(@config[:play_key]), @config[:play_mask]){@zik.playpause}
|
118
|
+
@kb_next.bind(Gdk::Keyval.from_name(@config[:next_key]), @config[:next_mask]){@zik.next_song}
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def @m.save_mask(buttons, sym)
|
123
|
+
mask=0
|
124
|
+
mask|=GlobalHotKeys::Modifier::CONTROL_MASK if buttons[0].active?
|
125
|
+
mask|=GlobalHotKeys::Modifier::SHIFT_MASK if buttons[1].active?
|
126
|
+
mask|=GlobalHotKeys::Modifier::MOD1_MASK if buttons[2].active?
|
127
|
+
@config[sym]=mask
|
128
|
+
end
|
129
|
+
|
130
|
+
def @m.save_key(key, sym)
|
131
|
+
if Gdk::Keyval.from_name(key)==Gdk::Keyval::GDK_KEY_VoidSymbol
|
132
|
+
ModErrorError.new(self, "Cannot parse #{key}. Use previous value.")
|
133
|
+
else
|
134
|
+
@config[sym]=key
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
=begin
|
3
|
+
Copyright 2007-2011 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 Hotkeys
|
24
|
+
class Configuration < Hash
|
25
|
+
def initialize(dir)
|
26
|
+
@file=File.join(dir,'hotkeysrc')
|
27
|
+
default={:prev_mask=>0, :prev_key=>"F9", :stop_mask=>0, :stop_key=>"F10", :play_mask=>0, :play_key=>"F11",
|
28
|
+
:next_mask=>0, :next_key=>"F12"}
|
29
|
+
super
|
30
|
+
self.merge!(default)
|
31
|
+
if File.exist?(@file)
|
32
|
+
read
|
33
|
+
else
|
34
|
+
ModErrorError.new(Hotkeys.mod, "Configuration file not found. Use default configuration.")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def read
|
39
|
+
begin
|
40
|
+
f=File.open(@file,'r')
|
41
|
+
array=f.readlines
|
42
|
+
array.reject!{|a| a =~ /^#/}
|
43
|
+
array.reject!{|a| a =~ /^\n/}
|
44
|
+
array.each{|a| a.chomp!}
|
45
|
+
array.each{|a|
|
46
|
+
l=a.split('=', 2)
|
47
|
+
self[l[0].to_sym]=l[1]
|
48
|
+
}
|
49
|
+
str2val
|
50
|
+
ModErrorInfo.new(Hotkeys.mod, "configuration read.")
|
51
|
+
rescue
|
52
|
+
ModErrorError.new(Hotkeys.mod, "reading configuration file.")
|
53
|
+
ensure
|
54
|
+
f.close if f
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def save
|
59
|
+
if $write_config
|
60
|
+
begin
|
61
|
+
dir=File.dirname(@file)
|
62
|
+
Dir.mkdir(dir) unless File.exist?(dir)
|
63
|
+
f=File.open(@file,'w')
|
64
|
+
f.puts '##Configuration file for hotkeys module (ZiK audio player).'
|
65
|
+
self.each_pair{|key, value| f.puts "#{key}=#{value}"}
|
66
|
+
ModErrorInfo.new(Hotkeys.mod, "configuration saved")
|
67
|
+
rescue
|
68
|
+
ModErrorError.new(Hotkeys.mod, "writting configuration file.")
|
69
|
+
ensure
|
70
|
+
f.close if f
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def str2val
|
78
|
+
self[:prev_mask]=self[:prev_mask].to_i
|
79
|
+
self[:stop_mask]=self[:stop_mask].to_i
|
80
|
+
self[:play_mask]=self[:play_mask].to_i
|
81
|
+
self[:next_mask]=self[:next_mask].to_i
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|