lyrics-ebook 0.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.
Files changed (106) hide show
  1. data/LICENSE +340 -0
  2. data/README +46 -0
  3. data/bin/lyrics-ebook +47 -0
  4. data/lib/eeepub/LICENSE +20 -0
  5. data/lib/eeepub/README.md +77 -0
  6. data/lib/eeepub/Rakefile +49 -0
  7. data/lib/eeepub/VERSION +1 -0
  8. data/lib/eeepub/examples/files/bar.html +42 -0
  9. data/lib/eeepub/examples/files/foo.html +42 -0
  10. data/lib/eeepub/examples/simple_epub.rb +25 -0
  11. data/lib/eeepub/lib/eeepub.rb +17 -0
  12. data/lib/eeepub/lib/eeepub/container_item.rb +108 -0
  13. data/lib/eeepub/lib/eeepub/easy.rb +100 -0
  14. data/lib/eeepub/lib/eeepub/maker.rb +127 -0
  15. data/lib/eeepub/lib/eeepub/ncx.rb +68 -0
  16. data/lib/eeepub/lib/eeepub/ocf.rb +112 -0
  17. data/lib/eeepub/lib/eeepub/opf.rb +148 -0
  18. data/lib/eeepub/spec/eeepub/easy_spec.rb +66 -0
  19. data/lib/eeepub/spec/eeepub/maker_spec.rb +124 -0
  20. data/lib/eeepub/spec/eeepub/ncx_spec.rb +80 -0
  21. data/lib/eeepub/spec/eeepub/ocf_spec.rb +43 -0
  22. data/lib/eeepub/spec/eeepub/opf_spec.rb +262 -0
  23. data/lib/eeepub/spec/eeepub_spec.rb +4 -0
  24. data/lib/eeepub/spec/spec_helper.rb +12 -0
  25. data/lib/lyrics_ebook.rb +71 -0
  26. data/lib/lyrics_ebook/cache2html.rb +33 -0
  27. data/lib/lyrics_ebook/cache_manager.rb +77 -0
  28. data/lib/lyrics_ebook/lyric.rb +32 -0
  29. data/lib/lyrics_ebook/lyric_download.rb +50 -0
  30. data/lib/lyrics_ebook/lyrics2html.rb +106 -0
  31. data/lib/lyrics_ebook/mini_lyrics_parser.rb +26 -0
  32. data/lib/lyrics_ebook/mp3_parser.rb +37 -0
  33. data/lib/wiki_lyrics/amarok/COPYING +340 -0
  34. data/lib/wiki_lyrics/amarok/README +51 -0
  35. data/lib/wiki_lyrics/amarok/amarok.rb +355 -0
  36. data/lib/wiki_lyrics/amarok/pluginadapter.rb +113 -0
  37. data/lib/wiki_lyrics/amarok/plugins.rb +95 -0
  38. data/lib/wiki_lyrics/amarok/wikilyrics.rb +578 -0
  39. data/lib/wiki_lyrics/amarok/wikilyrics.spec +4 -0
  40. data/lib/wiki_lyrics/amarok/wikipluginadapter.rb +392 -0
  41. data/lib/wiki_lyrics/cli/optionsparser.rb +228 -0
  42. data/lib/wiki_lyrics/cli/pluginadapter.rb +56 -0
  43. data/lib/wiki_lyrics/cli/plugins.rb +79 -0
  44. data/lib/wiki_lyrics/cli/wikilyrics.rb +178 -0
  45. data/lib/wiki_lyrics/cli/wikipluginadapter.rb +140 -0
  46. data/lib/wiki_lyrics/docs/COPYING +340 -0
  47. data/lib/wiki_lyrics/docs/ChangeLog +293 -0
  48. data/lib/wiki_lyrics/docs/HOWTO.pdf +0 -0
  49. data/lib/wiki_lyrics/docs/HOWTO.tex +151 -0
  50. data/lib/wiki_lyrics/docs/HOWTO.txt +139 -0
  51. data/lib/wiki_lyrics/docs/README +45 -0
  52. data/lib/wiki_lyrics/docs/TODO +12 -0
  53. data/lib/wiki_lyrics/gui/gui-gtk.rb +945 -0
  54. data/lib/wiki_lyrics/gui/gui-qt3.rb +785 -0
  55. data/lib/wiki_lyrics/gui/gui-qt4.rb +845 -0
  56. data/lib/wiki_lyrics/gui/gui-tk.rb +1104 -0
  57. data/lib/wiki_lyrics/gui/gui.rb +268 -0
  58. data/lib/wiki_lyrics/gui/test.rb +74 -0
  59. data/lib/wiki_lyrics/i18n/README +1 -0
  60. data/lib/wiki_lyrics/i18n/en.rb +181 -0
  61. data/lib/wiki_lyrics/i18n/es.rb +181 -0
  62. data/lib/wiki_lyrics/i18n/i18n.rb +126 -0
  63. data/lib/wiki_lyrics/i18n/sk.rb +174 -0
  64. data/lib/wiki_lyrics/itrans/COPYRIGHT +31 -0
  65. data/lib/wiki_lyrics/itrans/itrans +0 -0
  66. data/lib/wiki_lyrics/itrans/itrans.txt +8 -0
  67. data/lib/wiki_lyrics/itrans/lyric.txt +23 -0
  68. data/lib/wiki_lyrics/itrans/udvng.ifm +206 -0
  69. data/lib/wiki_lyrics/lyrics.rb +567 -0
  70. data/lib/wiki_lyrics/lyrics_AZLyrics.rb +113 -0
  71. data/lib/wiki_lyrics/lyrics_DarkLyrics.rb +124 -0
  72. data/lib/wiki_lyrics/lyrics_Giitaayan.rb +124 -0
  73. data/lib/wiki_lyrics/lyrics_Jamendo.rb +166 -0
  74. data/lib/wiki_lyrics/lyrics_LeosLyrics.rb +142 -0
  75. data/lib/wiki_lyrics/lyrics_LoudSongs.rb +135 -0
  76. data/lib/wiki_lyrics/lyrics_LyricWiki.rb +329 -0
  77. data/lib/wiki_lyrics/lyrics_LyricsDownload.rb +118 -0
  78. data/lib/wiki_lyrics/lyrics_LyricsMania.rb +141 -0
  79. data/lib/wiki_lyrics/lyrics_Lyriki.rb +287 -0
  80. data/lib/wiki_lyrics/lyrics_SeekLyrics.rb +108 -0
  81. data/lib/wiki_lyrics/lyrics_Sing365.rb +103 -0
  82. data/lib/wiki_lyrics/lyrics_TerraLetras.rb +126 -0
  83. data/lib/wiki_lyrics/mediawikilyrics.rb +1464 -0
  84. data/lib/wiki_lyrics/tests/plugin_tests.rb +161 -0
  85. data/lib/wiki_lyrics/tests/tests.rb +74 -0
  86. data/lib/wiki_lyrics/utils/formdata.rb +56 -0
  87. data/lib/wiki_lyrics/utils/htmlentities.rb +291 -0
  88. data/lib/wiki_lyrics/utils/http.rb +198 -0
  89. data/lib/wiki_lyrics/utils/itrans.rb +160 -0
  90. data/lib/wiki_lyrics/utils/kde.rb +88 -0
  91. data/lib/wiki_lyrics/utils/logger.rb +123 -0
  92. data/lib/wiki_lyrics/utils/strings.rb +378 -0
  93. data/lib/wiki_lyrics/utils/xmlhash.rb +111 -0
  94. data/lib/wiki_lyrics/wikilyrics.kdevelop +152 -0
  95. data/lib/wiki_lyrics/wikilyrics.kdevses +18 -0
  96. data/lib/wiki_lyrics/win/gtk_fix.bat +3 -0
  97. data/lib/wiki_lyrics/win/tk_fix.bat +3 -0
  98. data/lib/wiki_lyrics/win/wikilyrics.bat +4 -0
  99. data/lib/wiki_lyrics/win/win_fix.rb +52 -0
  100. data/templates/art_.erb.xhtml +29 -0
  101. data/templates/artists.erb.xhtml +19 -0
  102. data/templates/cover.erb.xhtml +22 -0
  103. data/test/cache_manager_test.rb +73 -0
  104. data/test/data/artist name/title name.lyric +6 -0
  105. data/test/lyric_test.rb +41 -0
  106. metadata +194 -0
@@ -0,0 +1,268 @@
1
+ # Copyright (C) 2006-2008 by Sergio Pistone
2
+ # sergio_pistone@yahoo.com.ar
3
+ #
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the
16
+ # Free Software Foundation, Inc.,
17
+ # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
+
19
+ require File.expand_path( File.dirname( __FILE__ ) + "/../utils/xmlhash" )
20
+ require "tempfile"
21
+
22
+ module GUI
23
+
24
+ @@toolkits = []
25
+ @@run_out_of_process = false
26
+ @@running_out_of_process = false
27
+
28
+ def GUI.run_out_of_process?()
29
+ return @@run_out_of_process
30
+ end
31
+
32
+ def GUI.set_run_out_of_process( value )
33
+ @@run_out_of_process = value
34
+ end
35
+
36
+ def GUI.set_running_out_of_process( value )
37
+ @@running_out_of_process = value
38
+ end
39
+
40
+ def GUI.set_toolkit_priority( toolkits )
41
+ toolkits.each() do |toolkit|
42
+ if @@toolkits.include?( toolkit )
43
+ # check if the toolkit is already loaded (and change it's priority)
44
+ @@toolkits.delete( toolkit )
45
+ @@toolkits.insert( 0, toolkit )
46
+ return toolkit
47
+ elsif GUI.load_toolkit( toolkit ) # try to load the toolkit
48
+ @@toolkits.insert( 0, toolkit )
49
+ return toolkit
50
+ end
51
+ end
52
+ return GUI.get_current_toolkit()
53
+ end
54
+
55
+ def GUI.load_toolkit( toolkit )
56
+ toolkit = toolkit.downcase()
57
+ if toolkit == "qt" || toolkit == "qt4"
58
+ begin
59
+ return require( File.expand_path( File.dirname( __FILE__ ) + "/gui-qt4" ) )
60
+ rescue LoadError => e
61
+ $stderr << "Error loading Qt4 GUI backend: #{e}\n"
62
+ end
63
+ elsif toolkit == "qt3"
64
+ begin
65
+ return require( File.expand_path( File.dirname( __FILE__ ) + "/gui-qt3" ) )
66
+ rescue LoadError => e
67
+ $stderr << "Error loading Qt3 GUI backend: #{e}\n"
68
+ end
69
+ elsif toolkit == "gtk"
70
+ begin
71
+ return require( File.expand_path( File.dirname( __FILE__ ) + "/gui-gtk" ) )
72
+ rescue LoadError => e
73
+ $stderr << "Error loading GTK GUI backend: #{e}\n"
74
+ end
75
+ elsif toolkit == "tk"
76
+ begin
77
+ return require( File.expand_path( File.dirname( __FILE__ ) + "/gui-tk" ) )
78
+ rescue LoadError => e
79
+ $stderr << "Error loading Tk GUI backend: #{e}\n"
80
+ end
81
+ end
82
+ return false
83
+ end
84
+
85
+ def GUI.get_current_toolkit()
86
+ return @@toolkits.length > 0 ? @@toolkits[0].downcase() : nil
87
+ end
88
+
89
+ def GUI.create_exchange_file()
90
+ base_filename = Dir.tmpdir() + "/wikilyrics.gui." + $$.to_s()
91
+ filename = nil
92
+ loop do
93
+ filename = base_filename + "." + rand( 65536 ).to_s()
94
+ break unless File.exists?( filename )
95
+ end
96
+ return File.new( filename, "w+" )
97
+ end
98
+
99
+ def GUI.show_dialog( dialog_name, values )
100
+
101
+ if @@run_out_of_process && ! @@running_out_of_process
102
+ file = GUI.create_exchange_file()
103
+ begin
104
+ XMLHash.write( file, values )
105
+ if ( (ret = system( "ruby", __FILE__, dialog_name, file.path, @@toolkits.join( "," ) )) )
106
+ values = {}
107
+ file.rewind()
108
+ XMLHash.read( file.path, values, false )
109
+ end
110
+ return ret ? values : nil
111
+ ensure
112
+ file.close()
113
+ File.delete( file.path )
114
+ end
115
+ end
116
+
117
+ current_toolkit = GUI.get_current_toolkit()
118
+
119
+ if current_toolkit == "qt" || current_toolkit == "qt4"
120
+ app = Qt::Application.new( ARGV )
121
+ # FIXME: there's currently a weird bug when using Oxygen style:
122
+ # the first time it's used, it renders and works properly but,
123
+ # when used again, renders badly and generally also crashes.
124
+ if ( ! @@running_out_of_process )
125
+ ["plastique", "cleanlooks", "windows", "cde", "motif"].each() do |style|
126
+ break if app.setStyle( style )
127
+ end
128
+ end
129
+ dialog = eval( "QT4::" + dialog_name + ".new( values )" )
130
+ dialog.show()
131
+ app.exec()
132
+ elsif current_toolkit == "qt3"
133
+ app = Qt::Application.new( ARGV )
134
+ dialog = eval( "QT3::" + dialog_name + ".new( values )" )
135
+ app.setMainWidget( dialog )
136
+ app.mainWidget.show()
137
+ app.exec()
138
+ elsif current_toolkit == "gtk"
139
+ dialog = eval( "GTK::" + dialog_name + ".new( values )" )
140
+ dialog.exec()
141
+ Gtk.main()
142
+ elsif current_toolkit == "tk"
143
+ dialog = eval( "TK::" + dialog_name + ".new( values )" )
144
+ dialog.exec()
145
+ else
146
+ return nil
147
+ end
148
+
149
+ if dialog.accepted()
150
+ return dialog.values()
151
+ else
152
+ return nil
153
+ end
154
+
155
+ end
156
+
157
+ def GUI.show_plugins_manager_dialog( values )
158
+ values["script_name"] = "Wiki-Lyrics" if ! values.include?( "script_name" )
159
+ ret = GUI.show_dialog( "PluginsManagerDialog", values )
160
+ values.update( ret ) if ret
161
+ return ret != nil
162
+ end
163
+
164
+
165
+ def GUI.show_plugins_manager_dialog( values )
166
+ values["script_name"] = "Wiki-Lyrics" if ! values.include?( "script_name" )
167
+ ret = GUI.show_dialog( "PluginsManagerDialog", values )
168
+ values.update( ret ) if ret
169
+ return ret != nil
170
+ end
171
+
172
+ def GUI.show_wiki_plugin_dialog( values )
173
+ values["site_name"] = "Wiki-Lyrics" if ! values.include?( "site_name" )
174
+ ret = GUI.show_dialog( "WikiPluginDialog", values )
175
+ values.update( ret ) if ret
176
+ values["submit"] = values["submit"].to_s() == "true"
177
+ values["review"] = values["review"].to_s() == "true"
178
+ values["prompt_autogen"] = values["prompt_autogen"].to_s() == "true"
179
+ values["prompt_no_lyrics"] = values["prompt_no_lyrics"].to_s() == "true"
180
+ return ret != nil
181
+ end
182
+
183
+ def GUI.show_submit_song_dialog( values )
184
+ values["year"] = values["year"].to_i()
185
+ values["site_name"] = "Wiki-Lyrics" if ! values.include?( "site_name" )
186
+ ret = GUI.show_dialog( "SubmitSongDialog", values )
187
+ values.update( ret ) if ret
188
+ if values["instrumental"]
189
+ values["lyrics"] = nil
190
+ else
191
+ values["lyrics"] = values["lyrics"].to_s().strip()
192
+ end
193
+ values["reviewed"] = values["reviewed"].to_s() == "true"
194
+ values["instrumental"] = values["instrumental"].to_s() == "true"
195
+ return ret != nil
196
+ end
197
+
198
+ def GUI.show_submit_album_dialog( values )
199
+ values["released"] = values["released"].to_s()
200
+ values["site_name"] = "Wiki-Lyrics" if ! values.include?( "site_name" )
201
+ ret = GUI.show_dialog( "SubmitAlbumDialog", values )
202
+ values.update( ret ) if ret
203
+ values["reviewed"] = values["reviewed"].to_s() == "true"
204
+ return ret != nil
205
+ end
206
+
207
+ def GUI.show_upload_cover_dialog( values )
208
+ values["site_name"] = "Wiki-Lyrics" if ! values.include?( "site_name" )
209
+ values["year"] = values["year"].to_i()
210
+ ret = GUI.show_dialog( "UploadCoverDialog", values )
211
+ values.update( ret ) if ret
212
+ return ret != nil
213
+ end
214
+
215
+ def GUI.show_wiki_fix_pages_dialog( values )
216
+ values["title"] = "Pages fixer" if ! values.include?( "title" )
217
+ GUI.show_dialog( "FixPagesDialog", values )
218
+ end
219
+
220
+ def GUI.show_search_lyrics_dialog( values )
221
+ values["year"] = values["year"].to_i()
222
+ ret = GUI.show_dialog( "SearchLyricsDialog", values )
223
+ values.update( ret ) if ret
224
+ return ret != nil
225
+ end
226
+
227
+ def GUI.show_lyrics_dialog( values )
228
+ GUI.show_dialog( "ShowLyricsDialog", values )
229
+ end
230
+
231
+ def GUI.show_message_dialog( message, title=nil )
232
+ if title
233
+ system( "kdialog", "--icon", "amarok", "--title", title, "--msgbox","<qt>" + message.gsub( "\n", "<br/>" ) + "</qt>" )
234
+ else
235
+ system( "kdialog", "--icon", "amarok", "--msgbox", "<qt>" + message.gsub( "\n", "<br/>" ) + "</qt>" )
236
+ end
237
+ end
238
+
239
+ def GUI.show_confirmation_dialog( message, title=nil )
240
+ if title
241
+ system( "kdialog", "--icon", "amarok", "--title", title, "--yesno", "<qt>" + message.gsub( "\n", "<br/>" ) + "</qt>" )
242
+ else
243
+ system( "kdialog", "--icon", "amarok", "--yesno", "<qt>" + message.gsub( "\n", "<br/>" ) + "</qt>" )
244
+ end
245
+ return $? == 0
246
+ end
247
+
248
+ end
249
+
250
+ if $0 == __FILE__
251
+
252
+ dialog_name = ARGV[0]
253
+ values_file_path = ARGV[1]
254
+ toolkit_priority = ARGV[2].split( "," )
255
+
256
+ GUI.set_running_out_of_process( true ) # would cause infinite recursion if not set
257
+ GUI.set_toolkit_priority( toolkit_priority )
258
+
259
+ values = {}
260
+ XMLHash.read( values_file_path, values, false )
261
+
262
+ ret = GUI.show_dialog( dialog_name, values )
263
+
264
+ XMLHash.write( values_file_path, ret ) if ret
265
+
266
+ exit( ret ? 0 : 1 )
267
+
268
+ end
@@ -0,0 +1,74 @@
1
+ # Copyright (C) 2006-2008 by Sergio Pistone
2
+ # sergio_pistone@yahoo.com.ar
3
+ #
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the
16
+ # Free Software Foundation, Inc.,
17
+ # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
+
19
+ require File.expand_path( File.dirname( __FILE__ ) + "/gui.rb" )
20
+
21
+ if $0 == __FILE__
22
+
23
+ GUI.set_run_out_of_process( true )
24
+
25
+ # NOTE: qt4 can't be loaded along with qt3 or gtk (no idea why...)
26
+ ["qt4"].each() do |toolkit|
27
+ # ["qt4", "tk", "gtk"].each() do |toolkit|
28
+
29
+ GUI.set_toolkit_priority( [toolkit] )
30
+
31
+ values = { "script_name"=>"script_name", "used_plugins"=>["used1", "used2", "used3", "used4"], "unused_plugins"=>["unused1", "unused2"], "cleanup_lyrics"=>"true", "threaded"=>"false", "write_log"=>"true" }
32
+ GUI.show_plugins_manager_dialog( values )
33
+ values.each() { |key, value| puts "#{key}: #{value}" }
34
+
35
+ values = { "artist"=>"artist", "title"=>"title", "lyrics"=>"lyrícs1\nlyrícs2", "site"=>"site" }
36
+ GUI.show_lyrics_dialog( values )
37
+ values.each() { |key, value| puts "#{key}: #{value}" }
38
+
39
+ values = { "artist"=>"artist", "title"=>"title", "album"=>"album", "year"=>"1969" }
40
+ GUI.show_search_lyrics_dialog( values )
41
+ values.each() { |key, value| puts "#{key}: #{value}" }
42
+
43
+ values = { "site_name"=>"site_name", "submit"=>"true", "review"=>"true", "prompt_autogen"=>"false", "prompt_no_lyrics"=>"false", "username"=>"username", "password"=>"password" }
44
+ GUI.show_wiki_plugin_dialog( values )
45
+ values.each() { |key, value| puts "#{key}: #{value}" }
46
+
47
+ values = { "site_name"=>"site_name", "url"=>"url", "artist"=>"artist", "year"=>"1999", "album"=>"album", "title"=>"title", "lyrics"=>"lyrícs1\nlyrícs2", "lyricist"=>"lyricist", "credits"=>"credits", "reviewed"=>"false" }
48
+ GUI.show_submit_song_dialog( values )
49
+ values.each() { |key, value| puts "#{key}: #{value}" }
50
+
51
+ values = { "site_name"=>"site_name", "artist"=>"artist", "year"=>"1999", "month"=>"10", "day"=>"14","album"=>"album", "reviewed"=>"false", "image_path"=>"image_path", "tracks"=>"tracks <small>fffff</small>\ntracks <small>fffff</small>" }
52
+ GUI.show_submit_album_dialog( values )
53
+ values.each() { |key, value| puts "#{key}: #{value}" }
54
+
55
+ values = { "site_name"=>"site_name", "artist"=>"artist", "year"=>"1999", "month"=>"10", "day"=>"14","album"=>"album", "reviewed"=>"false", "tracks"=>"tracks <small>fffff</small>\ntracks <small>fffff</small>" }
56
+ GUI.show_submit_album_dialog( values )
57
+ values.each() { |key, value| puts "#{key}: #{value}" }
58
+
59
+ GUI.show_wiki_fix_pages_dialog( {
60
+ "site_name" => "site_name",
61
+ "title" => "Pages fixer",
62
+ "fetch_func" => "proc { `kdialog --msgbox 'fetch_func'` }",
63
+ "fix_func" => "proc { `kdialog --msgbox 'fix_func'` }",
64
+ "submit_func" => "proc { `kdialog --msgbox 'submit_func'` }"
65
+ } )
66
+ values.each() { |key, value| puts "#{key}: #{value}" }
67
+
68
+ values = { "site_name"=>"site_name", "artist"=>"artist", "album"=>"album", "year"=>"year", "image_path" => "image_path" }
69
+ GUI.show_upload_cover_dialog( values )
70
+ values.each() { |key, value| puts "#{key}: #{value}" }
71
+
72
+ end
73
+
74
+ end
@@ -0,0 +1 @@
1
+ IMPORTANT: save all language files with UTF-8 encoding
@@ -0,0 +1,181 @@
1
+ cli.usage = Usage: %1 [OPTIONS]
2
+ cli.description = Fetch lyrics from various sites and/or submit lyrics to Lyriki and LyricWiki.
3
+ cli.values.true = true
4
+ cli.values.false = false
5
+ cli.options = Options:
6
+ cli.options.artist = Song artist (mandatory unless %1 specified).
7
+ cli.options.title = Song title (mandatory unless %1 specified).
8
+ cli.options.album = Song album.
9
+ cli.options.year = Song album year.
10
+ cli.options.featfix = Fix artist/title when the later has "feat. ARTIST" (%1 by default).
11
+ cli.options.batchfile = Batch process file (expects artist;title;album;year entries in each line).
12
+ cli.options.cleanup = Cleanup fetched lyrics (%1 by default).
13
+ cli.options.sites = Sites to search lyrics for, order included (%1 by default; see %2).
14
+ cli.options.sites.list = List available sites.
15
+ cli.options.sites.list.available = Available sites:
16
+ cli.options.submit = Wiki site to submit content to (needs %1 and %2).
17
+ cli.options.username = Username to login with (mandatory when %1 specified).
18
+ cli.options.password = Password to login with (mandatory when %1 specified).
19
+ cli.options.persist = Restore/save session from/to file (needs %1 and %2).
20
+ cli.options.prompt.review = Prompt for review before submitting content (%1 by default, needs %2).
21
+ cli.options.prompt.autogen = Prompt for review of autogenerated pages (%1 by default, needs %2).
22
+ cli.options.prompt.nolyrics = Prompt for submission even when no lyrics to submit where found (%1 by default, needs %2).
23
+ cli.options.proxy = Proxy server URL.
24
+ cli.options.toolkits = GUI toolkits priority. Loading falls back to the next toolkit when one fails; an empty list will cause no dialog to be shown and lyrics to be dumped to stdout (defaults to %1).
25
+ cli.options.help = Show this message and exit.
26
+ cli.options.version = Show version and exit.
27
+ cli.error.missingoption = missing %1
28
+ cli.error.missingdependency = %1 requires %1
29
+ cli.error.incompatibleoptions = %1 is incompatible with %2
30
+ cli.error.invalidoptionvalue = invalid %1 value: %2
31
+ cli.error.nosite = must provide at least one site
32
+ cli.error.notoolkit = must provide at least one toolkit to use review mode
33
+
34
+ cli.application.searchinglyrics = searching lyrics for %1 by %2...
35
+ cli.application.lyricsfound = lyrics for %1 by %2 found at %3
36
+ cli.application.nolyricsfound = no lyrics found for %1 by %2
37
+ cli.application.plugintimeout = %1 request has timed out, site %2 is probably down
38
+ cli.application.batchmode = operating in batch mode
39
+ cli.application.processedcount = %1 files processed
40
+
41
+ amarok.application.error.connectionrefused = Can't connect to the Internet (check your proxy settings)
42
+ amarok.application.error.connectiondown = The connection is down, exiting
43
+ amarok.application.error.notoolkit = Sorry...\nYou need one of QtRuby, RubyGTK or TkRuby to run this program
44
+ amarok.application.error.nopluginsselected = No sites to search lyrics for specified
45
+ amarok.application.search.current = Search current song lyrics
46
+ amarok.application.search.current.nosongplaying = no song currently playing
47
+ amarok.application.search.selected = Search selected song lyrics
48
+ amarok.application.search.noinfofound = no song info found in Amarok database
49
+ amarok.application.search.nolyricsfound = no lyrics found for <b>%1</b> by <b>%2</b>
50
+ amarok.application.search.plugintimeout = %1 request has timed out! Site %2 is probably down
51
+ amarok.application.clearlyricscache = Clear lyrics cache
52
+ amarok.application.clearlyricscache.confirm = Are you sure you want to clear the lyrics cache?
53
+ amarok.application.clearlyricscache.done = lyrics cache cleared
54
+
55
+ amarok.wikiplugin.checksong = Check/Submit song page
56
+ amarok.wikiplugin.checksong.noinfofound = no song info found in Amarok database
57
+ amarok.wikiplugin.checkalbum = Check/Submit album page
58
+ amarok.wikiplugin.checkalbum.noinfofound = no album info found in Amarok database
59
+ amarok.wikiplugin.uploadcover = Upload album cover
60
+ amarok.wikiplugin.uploadcover.invalidalbumparams = invalid album params received
61
+ amarok.wikiplugin.uploadcover.noimagepath = no cover image received
62
+ amarok.wikiplugin.uploadcover.searching = searching album cover for <b>%1</b> by <b>%2</b>...
63
+ amarok.wikiplugin.uploadcover.found = album cover found (no need to upload)
64
+ amarok.wikiplugin.submitcontent = Submit contents
65
+
66
+ gui.common.cut = Cut
67
+ gui.common.copy = Copy
68
+ gui.common.paste = Paste
69
+ gui.common.delete = Delete
70
+ gui.common.selectall = Select All
71
+ gui.common.undo = Undo
72
+ gui.common.redo = Redo
73
+
74
+ gui.common.accept = Accept
75
+ gui.common.cancel = Cancel
76
+ gui.common.submit = Submit
77
+ gui.common.load = Load
78
+ gui.common.fix = Fix
79
+ gui.common.url = URL
80
+ gui.common.artist = Artist
81
+ gui.common.song = Song
82
+ gui.common.album = Album
83
+ gui.common.year = Year
84
+ gui.common.month = Month
85
+ gui.common.day = Day
86
+ gui.common.released = Released
87
+ gui.common.credits = Credits
88
+ gui.common.lyricist = Lyricist
89
+ gui.common.image = Image
90
+ gui.common.reviewed = I have reviewed the contents of this form
91
+
92
+ gui.searchlyrics.title = Search lyrics
93
+ gui.searchlyrics.search = Search Settings
94
+
95
+ gui.lyrics.title = Lyrics to %1 by %2
96
+
97
+ gui.pluginsmanager.title = %1 script configuration
98
+ gui.pluginsmanager.sites = Sites
99
+ gui.pluginsmanager.sites.inuse = Currently used
100
+ gui.pluginsmanager.sites.available = Available
101
+ gui.pluginsmanager.sites.moveup = Move Up
102
+ gui.pluginsmanager.sites.movedown = Move Down
103
+ gui.pluginsmanager.sites.add = << Add
104
+ gui.pluginsmanager.sites.remove = >> Remove
105
+ gui.pluginsmanager.misc = Miscellaneous
106
+ gui.pluginsmanager.misc.cleanup = Clean up retrieved lyrics
107
+ gui.pluginsmanager.misc.singlethreaded = Avoid using multiple threads to save battery (needs restart)
108
+ gui.pluginsmanager.misc.writelog = Write log to %1
109
+
110
+ gui.wikiplugin.title = Configure %1 settings
111
+ gui.wikiplugin.general = General Settings
112
+ gui.wikiplugin.general.submit = Submit contents to %1
113
+ gui.wikiplugin.general.review = Prompt for review before submitting contents
114
+ gui.wikiplugin.general.autogen = Review song pages marked as auto-generated
115
+ gui.wikiplugin.general.nolyrics = Show submit dialog even if no lyrics were found
116
+ gui.wikiplugin.login = Login Settings
117
+ gui.wikiplugin.login.username = Username
118
+ gui.wikiplugin.login.password = Password
119
+
120
+ gui.submitsong.title.submit = %1 - Submit song page
121
+ gui.submitsong.title.edit = %1 - Review song page
122
+ gui.submitsong.instrumental = Song is instrumental
123
+
124
+ gui.submitalbum.title = %1 - Submit album page
125
+ gui.submitalbum.coverfound = (cover found, no need to upload)
126
+
127
+ gui.uploadcover.title = %1 - Upload album cover
128
+ gui.uploadcover.imagepath = Path
129
+ gui.uploadcover.browseimage.title = Select album cover image path
130
+ gui.uploadcover.browseimage.images = Images
131
+ gui.uploadcover.browseimage.allfiles = All Files
132
+
133
+ gui.fixpages.success = Submitted page %1
134
+ gui.fixpages.error = Error submitting page %1
135
+
136
+ wiki.control.versionblocked = <b>Version %1 has been blocked</b> from submitting content. Please, update to the last version.
137
+ wiki.control.userblocked = <b>User %1 has been blocked</b> from submitting content. Please, check your user page.
138
+ wiki.control.updated = A new version of the script has been released. <b>Please, update to version %1</b>.
139
+
140
+ wiki.login.attempt = starting session for user <b>%1</b>...
141
+ wiki.login.success = session started successfully for user <b>%1</b>
142
+ wiki.login.error = error starting session for user <b>%1</b>
143
+ wiki.logout = session finished for user <b>%1</b>
144
+
145
+ wiki.session.save.success = session saved for user <b>%1</b>
146
+ wiki.session.save.error.notloggedin = can't save session before logging in
147
+ wiki.session.save.error = there was an error saving the session for user <b>%1</b>
148
+ wiki.session.restore.success = session restored for user <b>%1</b>
149
+ wiki.session.restore.error = there was an error restoring the session for user <b>%1</b>
150
+ wiki.session.restore.notfound = no saved session found
151
+
152
+ wiki.submitsong.searchingpage = searching song page for <b>%1</b> by <b>%2</b>...
153
+ wiki.submitsong.pagefound = song page found for <b>%1</b> by <b>%2</b>
154
+ wiki.submitsong.pagefound.autogenerated = auto-generated song page found for <b>%1</b> by <b>%2</b>
155
+ wiki.submitsong.nopagefound = no song page found for <b>%1</b> by <b>%2</b>
156
+ wiki.submitsong.cancelled = song page submission cancelled by user
157
+ wiki.submitsong.mustreviewcontent = contents were not reviewed, submission cancelled
158
+ wiki.submitsong.success = successfully submitted song page for <b>%1</b> by <b>%2</b>
159
+ wiki.submitsong.error.invalidsong = invalid song title received
160
+ wiki.submitsong.error.invalidartist = invalid album artist received
161
+ wiki.submitsong.error.nolyrics = no lyrics to submit received
162
+ wiki.submitsong.error = there was an error submitting the song page for <b>%1</b> by <b>%2</b>
163
+
164
+ wiki.submitalbum.searchingpage = searching album page for <b>%1</b> by <b>%2</b>...
165
+ wiki.submitalbum.pagefound = found album page for <b>%1</b> by <b>%2</b>
166
+ wiki.submitalbum.nopagefound = no album page found for <b>%1</b> by <b>%2</b>
167
+ wiki.submitalbum.cancelled = album page submission cancelled by user
168
+ wiki.submitalbum.mustreviewcontent = contents were not reviewed, submission cancelled
169
+ wiki.submitalbum.success = successfully submitted album page for <b>%1</b> by <b>%2</b>
170
+ wiki.submitalbum.error.invalidyear = invalid album year received
171
+ wiki.submitalbum.error.invalidalbum = invalid album name received
172
+ wiki.submitalbum.error.invalidartist = invalid album artist received
173
+ wiki.submitalbum.error = there was an error submitting the album page for <b>%1</b> by <b>%2</b>
174
+
175
+ wiki.submitredirect.success = submitted redirect page to %1
176
+ wiki.submitredirect.error = there was an error submitting the redirect page to %1
177
+
178
+ wiki.uploadcover.uploading = uploading album cover for <b>%1</b> by <b>%2</b>
179
+ wiki.uploadcover.success = successfully uploaded album cover for <b>%1</b> by <b>%2</b>
180
+ wiki.uploadcover.error.convert = there was an error converting the album cover to JPEG format
181
+ wiki.uploadcover.error = there was an error uploading the album cover for <b>%1</b> by <b>%2</b>