irecorder 0.0.4-linux
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/MIT-LICENSE +19 -0
- data/README +37 -0
- data/Rakefile +67 -0
- data/bin/irecorder +9 -0
- data/bin/irecorder.rb +994 -0
- data/lib/bbcnet.rb +244 -0
- data/lib/download.rb +325 -0
- data/lib/logwin.rb +119 -0
- data/lib/mylibs.rb +279 -0
- data/lib/settings.rb +386 -0
- data/lib/taskwin.rb +354 -0
- data/resources/bbcstyle.qss +424 -0
- metadata +105 -0
data/lib/logwin.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
#
|
2
|
+
# Log Window
|
3
|
+
#
|
4
|
+
class LogWindow < Qt::Widget
|
5
|
+
|
6
|
+
def initialize()
|
7
|
+
super
|
8
|
+
|
9
|
+
# create widgets
|
10
|
+
@textWidget = KDE::TextEdit.new
|
11
|
+
@textWidget.setReadOnly(true)
|
12
|
+
clearBtn = KDE::PushButton.new( KDE::Icon.new('edit-clear'), i18n("C&lear") )
|
13
|
+
connect(clearBtn, SIGNAL(:clicked)) do
|
14
|
+
@textWidget.clear
|
15
|
+
end
|
16
|
+
|
17
|
+
# layout
|
18
|
+
layout = Qt::VBoxLayout.new
|
19
|
+
layout.addWidget(@textWidget)
|
20
|
+
layout.addWidgetAtLeft(clearBtn)
|
21
|
+
setLayout(layout)
|
22
|
+
end
|
23
|
+
|
24
|
+
public
|
25
|
+
def write(text)
|
26
|
+
puts text
|
27
|
+
@textWidget.append(text)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
class MyLogger
|
33
|
+
MISC = 0
|
34
|
+
CODE = 1
|
35
|
+
DEBUG = 2
|
36
|
+
INFO = 3
|
37
|
+
WARN = 4
|
38
|
+
ERROR = 5
|
39
|
+
FATAL = 6
|
40
|
+
UNKNOWN = 7
|
41
|
+
|
42
|
+
attr_accessor :level
|
43
|
+
|
44
|
+
def initialize(logDevice)
|
45
|
+
@logdev = logDevice
|
46
|
+
@level = 0
|
47
|
+
end
|
48
|
+
|
49
|
+
public
|
50
|
+
def misc(msg = nil, &block)
|
51
|
+
add(MISC, msg, &block)
|
52
|
+
end
|
53
|
+
|
54
|
+
def code(msg = nil, &block)
|
55
|
+
add(CODE, msg, &block)
|
56
|
+
end
|
57
|
+
|
58
|
+
def debug(msg = nil, &block)
|
59
|
+
add(DEBUG, msg, &block)
|
60
|
+
end
|
61
|
+
|
62
|
+
def info(msg = nil, &block)
|
63
|
+
add(INFO, msg, &block)
|
64
|
+
end
|
65
|
+
|
66
|
+
def warn(msg = nil, &block)
|
67
|
+
add(WARN, msg, &block)
|
68
|
+
end
|
69
|
+
|
70
|
+
def error(msg = nil, &block)
|
71
|
+
add(ERROR, msg, &block)
|
72
|
+
end
|
73
|
+
|
74
|
+
def fatal(msg = nil, &block)
|
75
|
+
add(FATAL, msg, &block)
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
protected
|
80
|
+
def add(lvl, msg, &block)
|
81
|
+
return if lvl < @level
|
82
|
+
if msg.nil? then
|
83
|
+
if block_given? then
|
84
|
+
msg = yield
|
85
|
+
return if msg.nil?
|
86
|
+
else
|
87
|
+
return
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
msgs = formatMessages(lvl, msg)
|
92
|
+
msgs.each do |m|
|
93
|
+
@logdev.write(m.chomp)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
alias log add
|
97
|
+
|
98
|
+
|
99
|
+
def formatMessages(lvl, msg)
|
100
|
+
a = msg2a(msg)
|
101
|
+
a.map do |m|
|
102
|
+
"%-5s:%s" % [%w(MISC CODE DEBUG INFO WARN ERROR FATAL ANY)[lvl], m]
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def msg2a(msg)
|
107
|
+
case msg
|
108
|
+
when ::String
|
109
|
+
[ msg ]
|
110
|
+
when ::Array
|
111
|
+
msg
|
112
|
+
when ::Exception
|
113
|
+
[ msg.class.to_s + ': ' + msg.message ] + [ msg ] +
|
114
|
+
(msg.backtrace || []).map do |m| ' from ' + m end
|
115
|
+
else
|
116
|
+
[ msg.inspect ]
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
data/lib/mylibs.rb
ADDED
@@ -0,0 +1,279 @@
|
|
1
|
+
#
|
2
|
+
# My library
|
3
|
+
#
|
4
|
+
# Qt & other miscs
|
5
|
+
|
6
|
+
require 'singleton'
|
7
|
+
require 'korundum4'
|
8
|
+
|
9
|
+
#
|
10
|
+
class Qt::HBoxLayout
|
11
|
+
def addWidgets(*w)
|
12
|
+
w.each do |i|
|
13
|
+
if i then
|
14
|
+
e = i.kind_of?(String) ? Qt::Label.new(i) : i
|
15
|
+
addWidget(e)
|
16
|
+
else
|
17
|
+
addStretch
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class Qt::VBoxLayout
|
24
|
+
def addWidgetWithNilStretch(*w)
|
25
|
+
addLayout(
|
26
|
+
Qt::HBoxLayout.new do |l|
|
27
|
+
l.addWidgets(*w)
|
28
|
+
end
|
29
|
+
)
|
30
|
+
end
|
31
|
+
alias :addWidgets :addWidgetWithNilStretch
|
32
|
+
|
33
|
+
def addWidgetAtCenter(*w)
|
34
|
+
w.unshift(nil)
|
35
|
+
addWidgetWithNilStretch(*w)
|
36
|
+
end
|
37
|
+
|
38
|
+
def addWidgetAtRight(*w)
|
39
|
+
w.unshift(nil)
|
40
|
+
addWidgetWithNilStretch(*w)
|
41
|
+
end
|
42
|
+
|
43
|
+
def addWidgetAtLeft(*w)
|
44
|
+
w.push(nil)
|
45
|
+
addWidgetWithNilStretch(*w)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
#
|
51
|
+
class VBoxLayoutWidget < Qt::Widget
|
52
|
+
def initialize(parent=nil)
|
53
|
+
@layout = Qt::VBoxLayout.new
|
54
|
+
super(parent)
|
55
|
+
setLayout(@layout)
|
56
|
+
end
|
57
|
+
|
58
|
+
def addLayout(l)
|
59
|
+
@layout.addLayout(l)
|
60
|
+
end
|
61
|
+
|
62
|
+
def addWidget(w)
|
63
|
+
@layout.addWidget(w)
|
64
|
+
end
|
65
|
+
|
66
|
+
def addWidgetWithNilStretch(*w)
|
67
|
+
@layout.addWidgetWithNilStretch(*w)
|
68
|
+
end
|
69
|
+
alias :addWidgets :addWidgetWithNilStretch
|
70
|
+
|
71
|
+
def addWidgetAtRight(*w)
|
72
|
+
@layout.addWidgetAtRight(*w)
|
73
|
+
end
|
74
|
+
|
75
|
+
def addWidgetAtCenter(*w)
|
76
|
+
@layout.addWidgetAtCenter(*w)
|
77
|
+
end
|
78
|
+
|
79
|
+
def layout
|
80
|
+
@layout
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
class HBoxLayoutWidget < Qt::Widget
|
85
|
+
def initialize(parent=nil)
|
86
|
+
@layout = Qt::HBoxLayout.new
|
87
|
+
super(parent)
|
88
|
+
setLayout(@layout)
|
89
|
+
end
|
90
|
+
|
91
|
+
def addLayout(l)
|
92
|
+
@layout.addLayout(l)
|
93
|
+
end
|
94
|
+
|
95
|
+
def addWidget(w)
|
96
|
+
@layout.addWidget(w)
|
97
|
+
end
|
98
|
+
|
99
|
+
def addWidgets(*w)
|
100
|
+
@layout.addWidgets(*w)
|
101
|
+
end
|
102
|
+
|
103
|
+
def layout
|
104
|
+
@layout
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
#--------------------------------------------------------------------------
|
109
|
+
#
|
110
|
+
#
|
111
|
+
class SettingsBase < KDE::ConfigSkeleton
|
112
|
+
include Singleton
|
113
|
+
|
114
|
+
public
|
115
|
+
# @sym : instance symbol to be added.
|
116
|
+
def addBoolItem(sym, default=true)
|
117
|
+
name = sym.to_s
|
118
|
+
defineItem(sym, 'value', ItemBool, default)
|
119
|
+
end
|
120
|
+
|
121
|
+
def addStringItem(sym, default="")
|
122
|
+
defineItem(sym, 'toString', ItemString, default)
|
123
|
+
end
|
124
|
+
|
125
|
+
def addUrlItem(sym, default=KDE::Url.new)
|
126
|
+
if default.kind_of? String then
|
127
|
+
default = KDE::Url.new(default)
|
128
|
+
end
|
129
|
+
defineItem(sym, 'value', ItemUrl, default)
|
130
|
+
end
|
131
|
+
|
132
|
+
def addStringListItem(sym, default="")
|
133
|
+
defineItem(sym, 'value', ItemStringList, default)
|
134
|
+
end
|
135
|
+
|
136
|
+
def addChoiceItem(name, list, default=0)
|
137
|
+
choices = makeChoices(list)
|
138
|
+
defineItemProperty(name, 'value')
|
139
|
+
item = ItemEnum.new(currentGroup, name.to_s, default, choices, default)
|
140
|
+
addItem(item)
|
141
|
+
end
|
142
|
+
|
143
|
+
def [](name)
|
144
|
+
findItem(name)
|
145
|
+
end
|
146
|
+
|
147
|
+
protected
|
148
|
+
def makeChoices(list)
|
149
|
+
choices = []
|
150
|
+
list.each do |i|
|
151
|
+
c = ItemEnum::Choice.new
|
152
|
+
c.name = i
|
153
|
+
choices << c
|
154
|
+
end
|
155
|
+
choices
|
156
|
+
end
|
157
|
+
|
158
|
+
def defineItem(name, valueMethod, itemClass, default)
|
159
|
+
defineItemProperty(name, valueMethod)
|
160
|
+
item = itemClass.new(currentGroup, name.to_s, default, default)
|
161
|
+
addItem(item)
|
162
|
+
end
|
163
|
+
|
164
|
+
def defineItemProperty(name, valueMethod)
|
165
|
+
self.class.class_eval %Q{
|
166
|
+
def #{name}
|
167
|
+
findItem('#{name}').property.#{valueMethod}
|
168
|
+
end
|
169
|
+
|
170
|
+
def self.#{name}
|
171
|
+
s = self.instance
|
172
|
+
s.#{name}
|
173
|
+
end
|
174
|
+
|
175
|
+
def set#{name}(v)
|
176
|
+
item = findItem('#{name}')
|
177
|
+
unless item.immutable?
|
178
|
+
item.property = @#{name} = Qt::Variant.fromValue(v)
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
def self.set#{name}(v)
|
183
|
+
s = self.instance
|
184
|
+
s.set#{name}(v)
|
185
|
+
end
|
186
|
+
|
187
|
+
def #{name}=(v)
|
188
|
+
set#{name}(v)
|
189
|
+
end
|
190
|
+
|
191
|
+
def self.#{name}=(v)
|
192
|
+
self.set#{name}(v)
|
193
|
+
end
|
194
|
+
}
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
|
199
|
+
|
200
|
+
#--------------------------------------------------------------------------
|
201
|
+
#
|
202
|
+
#
|
203
|
+
|
204
|
+
module Enumerable
|
205
|
+
class Proxy
|
206
|
+
instance_methods.each { |m| undef_method(m) unless m.match(/^__/) }
|
207
|
+
def initialize(enum, method=:map)
|
208
|
+
@enum, @method = enum, method
|
209
|
+
end
|
210
|
+
def method_missing(method, *args, &block)
|
211
|
+
@enum.__send__(@method) {|o| o.__send__(method, *args, &block) }
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
def every
|
216
|
+
Proxy.new(self)
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
#
|
221
|
+
class Hash
|
222
|
+
alias old_blaket []
|
223
|
+
def [](key)
|
224
|
+
unless key.kind_of?(Regexp)
|
225
|
+
return old_blaket(key)
|
226
|
+
end
|
227
|
+
|
228
|
+
retk, retv = self.find { |k,v| k =~ key }
|
229
|
+
retv
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
class Qt::Action
|
234
|
+
def setVData(data)
|
235
|
+
setData(Qt::Variant.new(data))
|
236
|
+
end
|
237
|
+
|
238
|
+
def vData
|
239
|
+
self.data.toString
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
module Mime
|
244
|
+
def self.services(url)
|
245
|
+
mimeType = KDE::MimeType.findByUrl(KDE::Url.new(url))
|
246
|
+
mime = mimeType.name
|
247
|
+
services = KDE::MimeTypeTrader.self.query(mime)
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
#
|
252
|
+
#
|
253
|
+
#
|
254
|
+
class String
|
255
|
+
def double_quote
|
256
|
+
'"' + self + '"'
|
257
|
+
end
|
258
|
+
alias :dquote :double_quote
|
259
|
+
|
260
|
+
def single_quote
|
261
|
+
"'" + self + "'"
|
262
|
+
end
|
263
|
+
alias :squote :single_quote
|
264
|
+
|
265
|
+
def _chomp_null
|
266
|
+
gsub(/\0.*/, '')
|
267
|
+
end
|
268
|
+
|
269
|
+
def sql_quote
|
270
|
+
str = _chomp_null
|
271
|
+
return 'NULL' if str.empty?
|
272
|
+
"'#{str.sql_escape}'"
|
273
|
+
end
|
274
|
+
|
275
|
+
def sql_escape
|
276
|
+
str = _chomp_null
|
277
|
+
str.gsub(/\\/, '\&\&').gsub(/'/, "''") #'
|
278
|
+
end
|
279
|
+
end
|
data/lib/settings.rb
ADDED
@@ -0,0 +1,386 @@
|
|
1
|
+
#
|
2
|
+
# 2007 by ruby.twiddler@gmail.com
|
3
|
+
#
|
4
|
+
require 'kio'
|
5
|
+
require "mylibs.rb"
|
6
|
+
|
7
|
+
|
8
|
+
#--------------------------------------------------------------------------
|
9
|
+
#
|
10
|
+
# select from traders, system menu, arbitarary file.
|
11
|
+
#
|
12
|
+
class KDE::ListWidget
|
13
|
+
end
|
14
|
+
|
15
|
+
class SelectServiceDlg < KDE::Dialog
|
16
|
+
def initialize(parent, defaultName=nil)
|
17
|
+
super(parent)
|
18
|
+
@message = i18n('Select Application')
|
19
|
+
userInitialize
|
20
|
+
self.windowTitle = @message
|
21
|
+
@selectedName = @services[0].name
|
22
|
+
createWidget
|
23
|
+
setSelected(defaultName)
|
24
|
+
end
|
25
|
+
|
26
|
+
def userInitialize
|
27
|
+
@message = i18n('Select Application for .html file.')
|
28
|
+
@services = Mime.services('.html')
|
29
|
+
end
|
30
|
+
|
31
|
+
def name
|
32
|
+
@selectedName
|
33
|
+
end
|
34
|
+
|
35
|
+
def iconName
|
36
|
+
SelectServiceDlg.exeName2IconName(serviceFromName(name).exec)
|
37
|
+
end
|
38
|
+
|
39
|
+
def accept
|
40
|
+
@selectedName = @serviceList.selectedItems.first.text
|
41
|
+
super
|
42
|
+
end
|
43
|
+
|
44
|
+
def commandFromName(name)
|
45
|
+
i = serviceFromName(name)
|
46
|
+
i && i.exec
|
47
|
+
end
|
48
|
+
|
49
|
+
def serviceFromName(name)
|
50
|
+
name.gsub!(/&/, '')
|
51
|
+
return nil if @services.size == 0
|
52
|
+
service = @services.find(@services[0]) do |s| s.name == name end
|
53
|
+
end
|
54
|
+
|
55
|
+
def setSelected(name)
|
56
|
+
return unless name
|
57
|
+
name.gsub!(/&/, '')
|
58
|
+
return if @services.size == 0
|
59
|
+
unless name then
|
60
|
+
@serviceList.takeItem(0).setSelected(true)
|
61
|
+
else
|
62
|
+
items = @serviceList.findItems(name, Qt::MatchExactly)
|
63
|
+
if items.size > 0 then
|
64
|
+
items[0].setSelected(true)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.exeName2IconName(exeName)
|
70
|
+
iconName = exeName.gsub(%r{[^ ]*/}, '')[/([-_\w\d])+/] .
|
71
|
+
gsub(/(dragon)/, '\1player').gsub(/kfmclient/, 'konqueror')
|
72
|
+
end
|
73
|
+
|
74
|
+
protected
|
75
|
+
def createWidget
|
76
|
+
mainWidget = VBoxLayoutWidget.new
|
77
|
+
mainWidget.addWidget(Qt::Label.new(@message))
|
78
|
+
@serviceList = KDE::ListWidget.new
|
79
|
+
@services.each do |s|
|
80
|
+
iconName = SelectServiceDlg.exeName2IconName(s.exec)
|
81
|
+
@serviceList.addItem( Qt::ListWidgetItem.new(KDE::Icon.new(iconName), s.name) )
|
82
|
+
end
|
83
|
+
@selectFromMenu = KDE::PushButton.new(i18n('Select Other from Menu'))
|
84
|
+
mainWidget.addWidget(@serviceList)
|
85
|
+
# mainWidget.addWidget(@selectFromMenu)
|
86
|
+
|
87
|
+
setMainWidget(mainWidget)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
class SelectWebPlayerDlg < SelectServiceDlg
|
93
|
+
def userInitialize
|
94
|
+
@message = i18n('Select Web Player for iPlayer page.')
|
95
|
+
@services = Mime.services('.html').select do |s|
|
96
|
+
s.name !~ /office/i and
|
97
|
+
s.serviceTypes.find do |st|
|
98
|
+
st =~ /application\//
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
class SelectDirectPlayerDlg < SelectServiceDlg
|
105
|
+
def userInitialize
|
106
|
+
@message = i18n('Select Direct Stream Player.')
|
107
|
+
@services = Mime.services('.wma')
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
|
114
|
+
#--------------------------------------------------------------------------
|
115
|
+
#
|
116
|
+
# IRecorder Settings
|
117
|
+
#
|
118
|
+
class IRecSettings < SettingsBase
|
119
|
+
def initialize
|
120
|
+
super()
|
121
|
+
|
122
|
+
setCurrentGroup("Preferences")
|
123
|
+
|
124
|
+
# meta programed version.
|
125
|
+
addUrlItem(:rawDownloadDir, Qt::Dir::tempPath + '/RadioRaw')
|
126
|
+
addUrlItem(:downloadDir, KDE::GlobalSettings.musicPath)
|
127
|
+
addBoolItem(:dirAddMediaName, true)
|
128
|
+
addBoolItem(:dirAddChannelName, false)
|
129
|
+
addBoolItem(:dirAddGenreName, true)
|
130
|
+
addStringItem(:fileAddHeadStr, 'BBC ')
|
131
|
+
addBoolItem(:fileAddMediaName, true)
|
132
|
+
addBoolItem(:fileAddChannelName, false)
|
133
|
+
addBoolItem(:fileAddGenreName, true)
|
134
|
+
addBoolItem(:leaveRawFile, false)
|
135
|
+
|
136
|
+
addBoolItem(:playerTypeSmall, false)
|
137
|
+
addBoolItem(:playerTypeBeta, true)
|
138
|
+
|
139
|
+
addBoolItem(:useInnerPlayer, true)
|
140
|
+
addBoolItem(:useWebPlayer, false)
|
141
|
+
addStringItem(:webPlayerName, 'Konqueror')
|
142
|
+
addBoolItem(:useDirectPlayer, false)
|
143
|
+
addStringItem(:directPlayerName, 'KMPlayer')
|
144
|
+
end
|
145
|
+
|
146
|
+
def webPlayerCommand
|
147
|
+
@webPlayerCnv.commandFromName(self.webPlayerName)
|
148
|
+
end
|
149
|
+
|
150
|
+
def self.webPlayerCommand
|
151
|
+
self.instance.webPlayerCommand
|
152
|
+
end
|
153
|
+
|
154
|
+
def directPlayerCommand
|
155
|
+
@directPlayerCnv.commandFromName(self.directPlayerName)
|
156
|
+
end
|
157
|
+
|
158
|
+
def self.directPlayerCommand
|
159
|
+
self.instance.directPlayerCommand
|
160
|
+
end
|
161
|
+
|
162
|
+
def regConverter(webPlayerCnv, directPlayerCnv)
|
163
|
+
@webPlayerCnv = webPlayerCnv
|
164
|
+
@directPlayerCnv = directPlayerCnv
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
|
169
|
+
#--------------------------------------------------------------------------
|
170
|
+
#
|
171
|
+
#
|
172
|
+
class SettingsDlg < KDE::ConfigDialog
|
173
|
+
def initialize(parent)
|
174
|
+
super(parent, "Settings", IRecSettings.instance)
|
175
|
+
addPage(FolderSettingsPage.new, i18n("Folder"), 'folder', i18n('Folder and File Name'))
|
176
|
+
addPage(PlayerSettingsPage.new, i18n("Player"), 'internet-web-browser', i18n('Player and web Browser'))
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
|
181
|
+
#--------------------------------------------------------------------------
|
182
|
+
#
|
183
|
+
#
|
184
|
+
class FolderSettingsPage < Qt::Widget
|
185
|
+
def initialize(parent=nil)
|
186
|
+
super(parent)
|
187
|
+
createWidget
|
188
|
+
end
|
189
|
+
|
190
|
+
protected
|
191
|
+
|
192
|
+
def createWidget
|
193
|
+
@rawFileDirLine = KDE::UrlRequester.new(KDE::Url.new(KDE::GlobalSettings.downloadPath))
|
194
|
+
@rawFileDirLine.mode = KDE::File::Directory | KDE::File::LocalOnly
|
195
|
+
|
196
|
+
@downloadDirLine = KDE::UrlRequester.new(KDE::Url.new(KDE::GlobalSettings.downloadPath))
|
197
|
+
@downloadDirLine.mode = KDE::File::Directory | KDE::File::LocalOnly
|
198
|
+
|
199
|
+
@dirSampleLabel = Qt::Label.new('Example) ')
|
200
|
+
@dirAddMediaName = Qt::CheckBox.new(i18n('Add media directory'))
|
201
|
+
@dirAddChannelName = Qt::CheckBox.new(i18n('Add channel directory'))
|
202
|
+
@dirAddGenreName = Qt::CheckBox.new(i18n('Add genre directory'))
|
203
|
+
[ @dirAddMediaName, @dirAddChannelName, @dirAddGenreName ].each do |w|
|
204
|
+
w.connect(SIGNAL('stateChanged(int)')) do |s| updateSampleDirName end
|
205
|
+
end
|
206
|
+
|
207
|
+
@fileSampleLabel = Qt::Label.new('Example) ')
|
208
|
+
@fileAddHeadStr = KDE::LineEdit.new do |w|
|
209
|
+
w.connect(SIGNAL('textChanged(const QString&)')) do |t| updateSampleFileName end
|
210
|
+
end
|
211
|
+
@fileAddMediaName = Qt::CheckBox.new(i18n('Add media name'))
|
212
|
+
@fileAddChannelName = Qt::CheckBox.new(i18n('Add channel name'))
|
213
|
+
@fileAddGenreName = Qt::CheckBox.new(i18n('Add genre name'))
|
214
|
+
|
215
|
+
[ @fileAddMediaName, @fileAddChannelName, @fileAddGenreName ].each do |w|
|
216
|
+
w.connect(SIGNAL('stateChanged(int)')) do |s| updateSampleFileName end
|
217
|
+
end
|
218
|
+
@leaveRawFile = Qt::CheckBox.new(i18n('Leave raw file.(don\'t delete it)'))
|
219
|
+
|
220
|
+
# set objectNames
|
221
|
+
# 'kcfg_' + class Settings's instance name.
|
222
|
+
@rawFileDirLine.objectName = 'kcfg_rawDownloadDir'
|
223
|
+
@downloadDirLine.objectName = 'kcfg_downloadDir'
|
224
|
+
@dirAddMediaName.objectName = 'kcfg_dirAddMediaName'
|
225
|
+
@dirAddChannelName.objectName = 'kcfg_dirAddChannelName'
|
226
|
+
@dirAddGenreName.objectName = 'kcfg_dirAddGenreName'
|
227
|
+
@fileAddHeadStr.objectName = 'kcfg_fileAddHeadStr'
|
228
|
+
@fileAddMediaName.objectName = 'kcfg_fileAddMediaName'
|
229
|
+
@fileAddChannelName.objectName = 'kcfg_fileAddChannelName'
|
230
|
+
@fileAddGenreName.objectName = 'kcfg_fileAddGenreName'
|
231
|
+
@leaveRawFile.objectName = 'kcfg_leaveRawFile'
|
232
|
+
|
233
|
+
|
234
|
+
# layout
|
235
|
+
lo = Qt::VBoxLayout.new do |l|
|
236
|
+
l.addWidget(Qt::Label.new(i18n('Download Directory')))
|
237
|
+
l.addWidgets(' ', @downloadDirLine)
|
238
|
+
l.addWidget(Qt::Label.new(i18n('Temporary Raw File Download Directory')))
|
239
|
+
l.addWidgets(' ', @rawFileDirLine)
|
240
|
+
l.addWidget(Qt::GroupBox.new(i18n('Generating directory')) do |g|
|
241
|
+
vbx = Qt::VBoxLayout.new do |vb|
|
242
|
+
vb.addWidget(@dirSampleLabel)
|
243
|
+
vb.addWidget(@dirAddMediaName)
|
244
|
+
# vb.addWidget(@dirAddChannelName)
|
245
|
+
vb.addWidget(@dirAddGenreName)
|
246
|
+
end
|
247
|
+
g.setLayout(vbx)
|
248
|
+
end
|
249
|
+
)
|
250
|
+
l.addWidget(Qt::GroupBox.new(i18n('Generating file name')) do |g|
|
251
|
+
vbx = Qt::VBoxLayout.new do |vb|
|
252
|
+
vb.addWidget(@fileSampleLabel)
|
253
|
+
vb.addWidgets(i18n('Head Text'), @fileAddHeadStr)
|
254
|
+
vb.addWidget(@fileAddMediaName)
|
255
|
+
# vb.addWidget(@fileAddChannelName)
|
256
|
+
vb.addWidget(@fileAddGenreName)
|
257
|
+
end
|
258
|
+
g.setLayout(vbx)
|
259
|
+
end
|
260
|
+
)
|
261
|
+
l.addWidget(@leaveRawFile)
|
262
|
+
l.addStretch
|
263
|
+
end
|
264
|
+
|
265
|
+
setLayout(lo)
|
266
|
+
end
|
267
|
+
|
268
|
+
def updateSampleFileName
|
269
|
+
@fileSampleLabel.text = 'Example) ' + getSampleFileName
|
270
|
+
end
|
271
|
+
|
272
|
+
def checkState(checkBox)
|
273
|
+
checkBox.checkState== Qt::Checked
|
274
|
+
end
|
275
|
+
|
276
|
+
def getSampleFileName
|
277
|
+
head = @fileAddHeadStr.text
|
278
|
+
head += 'Radio ' if checkState(@fileAddMediaName)
|
279
|
+
head += 'Radio 7 ' if checkState(@fileAddChannelName)
|
280
|
+
head += 'Drama ' if checkState(@fileAddGenreName)
|
281
|
+
head += "- " unless head.empty?
|
282
|
+
baseName = head + 'Space Hacks Lost in Space Ship.mp3'
|
283
|
+
baseName.gsub(%r{[\/]}, '-')
|
284
|
+
end
|
285
|
+
|
286
|
+
|
287
|
+
def updateSampleDirName
|
288
|
+
@dirSampleLabel.text = 'Example) ... /' + getSampleDirName
|
289
|
+
end
|
290
|
+
|
291
|
+
def getSampleDirName
|
292
|
+
dir = []
|
293
|
+
dir << 'Radio' if checkState(@dirAddMediaName)
|
294
|
+
dir << 'Radio 7' if checkState(@dirAddChannelName)
|
295
|
+
dir << 'Drama' if checkState(@dirAddGenreName)
|
296
|
+
File.join(dir.compact)
|
297
|
+
end
|
298
|
+
|
299
|
+
end
|
300
|
+
|
301
|
+
#--------------------------------------------------------------------------
|
302
|
+
#
|
303
|
+
#
|
304
|
+
class PlayerSettingsPage < Qt::Widget
|
305
|
+
def initialize(parent=nil)
|
306
|
+
super(parent)
|
307
|
+
createWidget
|
308
|
+
end
|
309
|
+
|
310
|
+
protected
|
311
|
+
|
312
|
+
def createWidget
|
313
|
+
@SelectWebPlayerDlg = SelectWebPlayerDlg.new(self, IRecSettings.webPlayerName)
|
314
|
+
@SelectDirectPlayerDlg = SelectDirectPlayerDlg.new(self, IRecSettings.directPlayerName)
|
315
|
+
IRecSettings.instance.regConverter(@SelectWebPlayerDlg, @SelectDirectPlayerDlg)
|
316
|
+
puts "web player:" + IRecSettings.webPlayerCommand.to_s
|
317
|
+
puts "direct player:" + IRecSettings.directPlayerCommand.to_s
|
318
|
+
|
319
|
+
|
320
|
+
@playerTypeSmall = Qt::RadioButton.new(i18n('small iplayer'))
|
321
|
+
@playerTypeBeta = Qt::RadioButton.new(i18n('beta iplayer'))
|
322
|
+
|
323
|
+
@innerPlayer = Qt::RadioButton.new(i18n('inner Player'))
|
324
|
+
@webPlayer = Qt::RadioButton.new(i18n('Web Player'))
|
325
|
+
@directPlayer = Qt::RadioButton.new(i18n('Direnct Stream Player'))
|
326
|
+
|
327
|
+
@webPlayerName = KDE::PushButton.new('Konqueror')
|
328
|
+
@webPlayerName.connect(SIGNAL(:pressed)) do
|
329
|
+
@SelectWebPlayerDlg.setSelected(@webPlayerName.text)
|
330
|
+
if @SelectWebPlayerDlg.exec == Qt::Dialog::Accepted then
|
331
|
+
@webPlayerName.text = @SelectWebPlayerDlg.name
|
332
|
+
# @webPlayerName.setIcon(KDE::Icon.new(@SelectWebPlayerDlg.iconName))
|
333
|
+
@webPlayer.checked = true
|
334
|
+
end
|
335
|
+
end
|
336
|
+
@webPlayerName.setProperty("kcfg_property", Qt::Variant.new("text"))
|
337
|
+
|
338
|
+
@directPlayerName = KDE::PushButton.new('KMPlayer')
|
339
|
+
@directPlayerName.connect(SIGNAL(:pressed)) do
|
340
|
+
@SelectDirectPlayerDlg.setSelected(@directPlayerName.text)
|
341
|
+
if @SelectDirectPlayerDlg.exec == Qt::Dialog::Accepted then
|
342
|
+
@directPlayerName.text = @SelectDirectPlayerDlg.name
|
343
|
+
# @directPlayerName.setIcon(KDE::Icon.new(@SelectDirectPlayerDlg.iconName))
|
344
|
+
@directPlayer.checked = true
|
345
|
+
end
|
346
|
+
end
|
347
|
+
@directPlayerName.setProperty("kcfg_property", Qt::Variant.new("text"))
|
348
|
+
|
349
|
+
# set objectNames
|
350
|
+
# 'kcfg_' + class Settings's instance name.
|
351
|
+
@playerTypeSmall.objectName = 'kcfg_playerTypeSmall'
|
352
|
+
@playerTypeBeta.objectName = 'kcfg_playerTypeBeta'
|
353
|
+
@innerPlayer.objectName = 'kcfg_useInnerPlayer'
|
354
|
+
@webPlayer.objectName = 'kcfg_useWebPlayer'
|
355
|
+
@directPlayer.objectName = 'kcfg_useDirectPlayer'
|
356
|
+
@webPlayerName.objectName = 'kcfg_webPlayerName'
|
357
|
+
@directPlayerName.objectName = 'kcfg_directPlayerName'
|
358
|
+
|
359
|
+
|
360
|
+
# layout
|
361
|
+
lo = Qt::VBoxLayout.new do |l|
|
362
|
+
l.addWidget(Qt::GroupBox.new(i18n('iPlayer Type')) do |g|
|
363
|
+
vbx = Qt::VBoxLayout.new do |vb|
|
364
|
+
vb.addWidget(@playerTypeSmall)
|
365
|
+
vb.addWidget(@playerTypeBeta)
|
366
|
+
end
|
367
|
+
g.setLayout(vbx)
|
368
|
+
end
|
369
|
+
)
|
370
|
+
l.addWidget(Qt::GroupBox.new(i18n('Player')) do |g|
|
371
|
+
vbx = Qt::VBoxLayout.new do |vb|
|
372
|
+
vb.addWidget(@innerPlayer)
|
373
|
+
vb.addWidget(@webPlayer)
|
374
|
+
vb.addWidgets(' ', @webPlayerName, nil)
|
375
|
+
vb.addWidget(@directPlayer)
|
376
|
+
vb.addWidgets(' ', @directPlayerName, nil)
|
377
|
+
end
|
378
|
+
g.setLayout(vbx)
|
379
|
+
end
|
380
|
+
)
|
381
|
+
l.addStretch
|
382
|
+
end
|
383
|
+
|
384
|
+
setLayout(lo)
|
385
|
+
end
|
386
|
+
end
|