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,56 @@
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 "cgi"
20
+
21
+ module PluginAdapter
22
+
23
+ # Hack to make module methods become class methods when the module gets included
24
+ def PluginAdapter.included( including )
25
+ if including.is_a?( Class )
26
+ including.extend( ClassMethods ) # adds class methods
27
+ else # if including.is_a?( Module )
28
+ including::ClassMethods.append_class_methods( self )
29
+ end
30
+ end
31
+
32
+ # Methods under this module will became class methods when the module gets included
33
+ # Note: don't use def self.<method name> but just <method name>
34
+ module ClassMethods
35
+ def ClassMethods.append_class_methods( mod )
36
+ include mod::ClassMethods
37
+ end
38
+
39
+ def plugin_name()
40
+ return site_name()
41
+ end
42
+
43
+ def notify( message )
44
+ puts plugin_name() + ": " + message.gsub( /\/?<[^>]+>/, "" )
45
+ end
46
+ end
47
+
48
+ def plugin_name()
49
+ return self.class.plugin_name()
50
+ end
51
+
52
+ def notify( message )
53
+ self.class.notify( message )
54
+ end
55
+
56
+ end
@@ -0,0 +1,79 @@
1
+ # Copyright (C) 2007 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__ ) + "/../mediawikilyrics" )
20
+ require File.expand_path( File.dirname( __FILE__ ) + "/pluginadapter" )
21
+ require File.expand_path( File.dirname( __FILE__ ) + "/wikipluginadapter" )
22
+
23
+ module Plugins
24
+
25
+ @@ALL = []
26
+ @@WIKI = []
27
+
28
+ def Plugins.find_plugins()
29
+ plugins = {}
30
+ Dir.new( File.expand_path( File.dirname( __FILE__ ) + "/.." ) ).each() do |filename|
31
+ filename = File.expand_path( File.dirname( __FILE__ ) + "/../" + filename )
32
+ if File.file?( filename ) && (md = /\/lyrics_([A-Za-z_0-9]*)\.rb$/.match( filename ))
33
+ plugins[md[1]] = filename
34
+ end
35
+ end
36
+ return plugins
37
+ end
38
+
39
+ def Plugins.load_plugins( plugins )
40
+ plugins.each() do |classname, filename|
41
+ require( filename ? filename : File.expand_path( File.dirname( __FILE__ ) + "/../lyrics_#{classname}.rb" ) )
42
+ classobj = eval( classname )
43
+ if classobj.ancestors().include?( MediaWikiLyrics )
44
+ eval( "class CLI#{classname} < #{classname}\ninclude WikiPluginAdapter\nend" )
45
+ plugin = eval( "CLI#{classname}.new()" )
46
+ @@WIKI << plugin
47
+ else
48
+ eval( "class CLI#{classname} < #{classname}\ninclude PluginAdapter\nend" )
49
+ plugin = eval( "CLI#{classname}.new()" )
50
+ end
51
+ @@ALL << plugin
52
+ end
53
+ end
54
+
55
+
56
+ def Plugins.all_plugins()
57
+ return @@ALL
58
+ end
59
+
60
+ def Plugins.all_names()
61
+ return @@ALL.collect(){ |plugin| plugin.plugin_name() }
62
+ end
63
+
64
+ def Plugins.wiki_plugins()
65
+ return @@WIKI
66
+ end
67
+
68
+ def Plugins.wiki_names()
69
+ return @@WIKI.collect(){ |plugin| plugin.plugin_name() }
70
+ end
71
+
72
+ def Plugins.plugin_by_name( name )
73
+ @@ALL.each() do |plugin|
74
+ return plugin if plugin.plugin_name() == name
75
+ end
76
+ return nil
77
+ end
78
+
79
+ end
@@ -0,0 +1,178 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright (C) 2006-2008 by Sergio Pistone
4
+ # sergio_pistone@yahoo.com.ar
5
+ #
6
+ # This program is free software; you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation; either version 2 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with this program; if not, write to the
18
+ # Free Software Foundation, Inc.,
19
+ # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20
+
21
+ require File.expand_path( File.dirname( __FILE__ ) + "/../i18n/i18n" )
22
+ require File.expand_path( File.dirname( __FILE__ ) + "/../utils/strings" )
23
+ require File.expand_path( File.dirname( __FILE__ ) + "/../utils/logger" )
24
+ require File.expand_path( File.dirname( __FILE__ ) + "/optionsparser" )
25
+ require File.expand_path( File.dirname( __FILE__ ) + "/plugins" )
26
+
27
+ class Application
28
+
29
+ def initialize( featuring_fix, cleanup_lyrics, submit, review=true,
30
+ prompt_autogen=false, prompt_no_lyrics=false, username=nil, password=nil )
31
+ @featuring_fix = featuring_fix
32
+ @submit_plugin = nil
33
+ @logger = Logger.new( "#{ENV["HOME"]}/.wikilyrics.log" )
34
+ Plugins.all_plugins().each() do |plugin|
35
+ plugin.cleanup_lyrics = cleanup_lyrics
36
+ plugin.logger = @logger
37
+ if plugin.plugin_name() == submit
38
+ @submit_plugin = plugin
39
+ @submit_plugin.set_submit_settings( username, password, review, prompt_autogen, prompt_no_lyrics )
40
+ end
41
+ end
42
+ end
43
+
44
+ def finalize()
45
+ @logger.finalize() if @logger
46
+ end
47
+
48
+ def Application.notify( message )
49
+ puts "Wiki-Lyrics: " + message.gsub( /\/?<[^>]+>/, "" )
50
+ end
51
+
52
+ def notify( message )
53
+ self.class.notify( message )
54
+ end
55
+
56
+ def restore_session( session_file )
57
+ @submit_plugin.restore_session( session_file ) if @submit_plugin
58
+ end
59
+
60
+ def save_session( session_file )
61
+ @submit_plugin.save_session( session_file ) if @submit_plugin
62
+ end
63
+
64
+ def fetch_lyrics( request )
65
+
66
+ used_plugins = Plugins.all_plugins()
67
+
68
+ response = nil
69
+ response_plugin = nil
70
+ shown_review_dialog = false
71
+ submit_plugin_searched = false
72
+
73
+ used_plugins.each() do |plugin|
74
+ begin
75
+ submit_plugin_searched = true if plugin == @submit_plugin
76
+ response = plugin.lyrics_full_search( request )
77
+ if response.lyrics
78
+ response_plugin = plugin
79
+ break
80
+ end
81
+ rescue TimeoutError
82
+ notify( I18n.get( "cli.application.plugintimeout", plugin.plugin_name(), plugin.site_host() ) )
83
+ end
84
+ end
85
+
86
+ if @submit_plugin
87
+ shown_review_dialog = @submit_plugin.wiki_process_response( response, response_plugin, submit_plugin_searched )
88
+ end
89
+
90
+ return response, response_plugin, shown_review_dialog
91
+
92
+ end
93
+
94
+ def process( artist, title, album, year )
95
+
96
+ if @featuring_fix
97
+ artist = Strings.cleanup_artist( artist, title )
98
+ title = Strings.cleanup_title( title )
99
+ end
100
+
101
+ notify( I18n.get( "cli.application.searchinglyrics", title, artist ) )
102
+
103
+ request = Lyrics::Request.new( artist, title, album, year )
104
+ response, response_plugin, shown_review_dialog = fetch_lyrics( request )
105
+
106
+ if response.lyrics
107
+ artist = response.artist ? response.artist : response.request.artist
108
+ title = response.title ? response.title : response.request.title
109
+ notify( I18n.get( "cli.application.lyricsfound", title, artist, response_plugin.site_name ) )
110
+ if ! shown_review_dialog
111
+ if GUI.get_current_toolkit()
112
+ GUI.show_lyrics_dialog( {
113
+ "artist" => artist,
114
+ "title" => title,
115
+ "lyrics" => response.lyrics,
116
+ "site_name" => response_plugin.site_name
117
+ } )
118
+ else
119
+ puts "\n#{response.lyrics}\n\n"
120
+ end
121
+ end
122
+ else
123
+ notify( I18n.get( "cli.application.nolyricsfound", request.title, request.artist ) )
124
+ end
125
+
126
+ end
127
+
128
+ end
129
+
130
+ if $0 == __FILE__
131
+
132
+ options = OptionsParser.parse( ARGV )
133
+
134
+ Plugins.load_plugins( options.sites )
135
+
136
+ HTTP.set_proxy_settings( options.proxy ) if options.proxy
137
+ GUI.set_toolkit_priority( options.toolkits ) if options.toolkits.size > 0
138
+
139
+ app = Application.new(
140
+ options.feat_fix,
141
+ options.cleanup,
142
+ options.submit,
143
+ options.review,
144
+ options.prompt_autogen,
145
+ options.prompt_no_lyrics,
146
+ options.username,
147
+ options.password
148
+ )
149
+
150
+ begin
151
+
152
+ app.restore_session( options.session_file ) if options.session_file
153
+
154
+ if options.batch_file
155
+ app.notify( I18n.get( "cli.application.batchmode" ) )
156
+ file = File.new( options.batch_file, "r" )
157
+ count = 0
158
+ while ( line = file.gets )
159
+ params = line.split( ";" )
160
+ next if params.length < 2
161
+ app.process( params[0], params[1], params[2], params[3] )
162
+ count += 1
163
+ end
164
+ notify( I18n.get( "cli.application.processedcount", count ) )
165
+ file.close()
166
+ else
167
+ app.process( options.artist, options.title, options.album, options.year )
168
+ end
169
+
170
+ app.save_session( options.session_file ) if options.session_file
171
+
172
+ ensure
173
+
174
+ app.finalize()
175
+
176
+ end
177
+
178
+ end
@@ -0,0 +1,140 @@
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/strings" )
20
+ require File.expand_path( File.dirname( __FILE__ ) + "/../i18n/i18n" )
21
+ require File.expand_path( File.dirname( __FILE__ ) + "/../gui/gui" )
22
+ require File.expand_path( File.dirname( __FILE__ ) + "/pluginadapter" )
23
+ require File.expand_path( File.dirname( __FILE__ ) + "/plugins" )
24
+
25
+ require "md5"
26
+ require "uri"
27
+
28
+ module WikiPluginAdapter
29
+
30
+ # Hack to make module methods become class methods when the module gets included
31
+ def WikiPluginAdapter.included( including )
32
+ if including.is_a?( Class )
33
+ including.extend( ClassMethods ) # adds class methods
34
+ else # including.is_a?( Module )
35
+ including::ClassMethods.append_class_methods( self )
36
+ end
37
+ end
38
+
39
+ # Methods under this module will became class methods when the module gets included
40
+ # Note: don't use def self.<method name> but just <method name>
41
+ module ClassMethods
42
+ def ClassMethods.append_class_methods( mod )
43
+ include mod::ClassMethods
44
+ end
45
+ end
46
+
47
+ include PluginAdapter
48
+
49
+ def submit?()
50
+ return @wpa_submit
51
+ end
52
+
53
+ def check_submit_conditions()
54
+ if @wpa_submit
55
+ login( @wpa_username, @wpa_password, false )
56
+ else
57
+ logout()
58
+ end
59
+
60
+ if ! logged_in?
61
+ @wpa_submit = false
62
+ end
63
+
64
+ if ! @wpa_submit || ! @wpa_review
65
+ @wpa_prompt_no_lyrics = false
66
+ @wpa_prompt_autogen = false
67
+ end
68
+ end
69
+
70
+ def set_submit_settings( username, password, review, prompt_autogen, prompt_no_lyrics )
71
+ @wpa_submit = true
72
+ @wpa_review = review
73
+ @wpa_prompt_autogen = prompt_autogen
74
+ @wpa_prompt_no_lyrics = prompt_no_lyrics
75
+ @wpa_username = username
76
+ @wpa_password = password
77
+ if ! @wpa_submit || ! @wpa_review
78
+ @wpa_prompt_no_lyrics = false
79
+ @wpa_prompt_autogen = false
80
+ end
81
+ end
82
+
83
+ # returns true if the review contents page is shown to the user (which can only happen when there was something to submit)
84
+ def wiki_process_response( response, response_plugin, wiki_searched )
85
+
86
+ return false if ! submit?() || ! authorized?
87
+
88
+ lyrics_found_on_site = response.lyrics && response_plugin == self
89
+ lyrics_autogenerated = lyrics_found_on_site && ! response.custom_data["reviewed"]
90
+
91
+ return false if lyrics_found_on_site && ! lyrics_autogenerated # we have nothing to do
92
+ return false if (! @wpa_prompt_autogen && lyrics_autogenerated) || (! @wpa_prompt_no_lyrics && ! response.lyrics)
93
+
94
+ begin
95
+
96
+ check_submit_conditions()
97
+
98
+ song_data = MediaWikiLyrics::SongData.new(
99
+ response.artist ? response.artist : response.request.artist,
100
+ response.title ? response.title : response.request.title,
101
+ response.lyrics,
102
+ response.album ? response.album : response.request.album,
103
+ response.year ? response.year : response.request.year,
104
+ response.custom_data["credits"],
105
+ response.custom_data["lyricist"]
106
+ )
107
+
108
+ submitted_url, submitted_data = submit_song_page(
109
+ song_data,
110
+ lyrics_autogenerated ? response.url : nil, # are we editing an existing page or creating a new one?
111
+ song_data.artist == response.request.artist && song_data.title == response.request.title &&
112
+ wiki_searched && ! lyrics_found_on_site, # do we KNOW FOR SURE the page doesn't exists?
113
+ @wpa_review || lyrics_autogenerated, # should we show the review contents dialog?
114
+ lyrics_autogenerated # should user be forced to review contents? (true causes the operation to abort otherwise)
115
+ )
116
+
117
+ # transfer summited data to response
118
+ if submitted_data
119
+ response.artist = submitted_data["artist"] if ! Strings.empty?( submitted_data["artist"] )
120
+ response.title = submitted_data["title"] if ! Strings.empty?( submitted_data["title"] )
121
+ response.album = submitted_data["album"] if ! Strings.empty?( submitted_data["album"] )
122
+ response.year = submitted_data["year"] if ! Strings.empty?( submitted_data["year"] )
123
+ response.lyrics = submitted_data["lyrics"] if ! Strings.empty?( submitted_data["lyrics"] )
124
+ custom_data = {}
125
+ custom_data.merge( response.custom_data )
126
+ custom_data["credits"] = submitted_data["credits"] if ! Strings.empty?( submitted_data["credits"] )
127
+ custom_data["lyricst"] = submitted_data["lyricst"] if ! Strings.empty?( submitted_data["lyricst"] )
128
+ response.custom_data = custom_data
129
+ end
130
+
131
+ return (@wpa_review || lyrics_autogenerated) && submitted_data
132
+
133
+ rescue TimeoutError
134
+ notify( I18n.get( "cli.application.plugintimeout", plugin_name(), site_host() ) )
135
+ return false
136
+ end
137
+
138
+ end
139
+
140
+ end