Commit: ec8e5d848cdf4f6e5686c7a4db78e5eddb1dbc11
Parent: c8a8e735c85326b02bae4bd6eb866629f5623cd8
Author: Randy Palamar
Date:   Wed, 25 May 2022 08:55:02 -0600
remove support for fetching from forvo
this had limited use since it could only fetch the first pronunciation
which is usually not the best one.
Diffstat:
| M | subs2srs.lua | | | 152 | ------------------------------------------------------------------------------- | 
1 file changed, 0 insertions(+), 152 deletions(-)
diff --git a/subs2srs.lua b/subs2srs.lua
@@ -17,7 +17,6 @@ along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 Requirements:
 * mpv >= 0.32.0
-* curl (for forvo)
 * xclip (when running X11)
 * wl-copy (when running Wayland)
 
@@ -59,11 +58,6 @@ local config = {
     sentence_field = "SentKanji",
     audio_field = "SentAudio",
     create_image = true,
-
-    -- Forvo support
-    use_forvo = "yes", -- 'yes', 'no', 'always'
-    vocab_field = "VocabKanji", -- target word field
-    vocab_audio_field = "VocabAudio", -- target word audio
 }
 
 -- Defines config profiles
@@ -86,10 +80,8 @@ local Menu = require('menu')
 -- namespaces
 local subs
 local clip_autocopy
-local ankiconnect
 local menu
 local platform
-local append_forvo_pronunciation
 
 -- classes
 local Subtitle
@@ -602,156 +594,12 @@ local function init_platform_nix()
         handle:close()
     end
 
-    self.curl_request = function(request_json, completion_fn)
-        local args = { 'curl', '-s', 'localhost:8765', '-X', 'POST', '-d', request_json }
-        return subprocess(args, completion_fn)
-    end
-
     return self
 end
 
 platform = init_platform_nix()
 
 ------------------------------------------------------------
--- utils for downloading pronunciations from Forvo
-
-do
-    local base64d -- http://lua-users.org/wiki/BaseSixtyFour
-    do
-        local b = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
-        base64d = function(data)
-            data = string.gsub(data, '[^' .. b .. '=]', '')
-            return (data:gsub('.', function(x)
-                if (x == '=') then return '' end
-                local r, f = '', (b:find(x) - 1)
-                for i = 6, 1, -1 do r = r .. (f % 2 ^ i - f % 2 ^ (i - 1) > 0 and '1' or '0') end
-                return r;
-            end)        :gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x)
-                if (#x ~= 8) then return '' end
-                local c = 0
-                for i = 1, 8 do c = c + (x:sub(i, i) == '1' and 2 ^ (8 - i) or 0) end
-                return string.char(c)
-            end))
-        end
-    end
-
-    local function url_encode(url)
-        -- https://gist.github.com/liukun/f9ce7d6d14fa45fe9b924a3eed5c3d99
-        local char_to_hex = function(c)
-            return string.format("%%%02X", string.byte(c))
-        end
-        if url == nil then
-            return
-        end
-        url = url:gsub("\n", "\r\n")
-        url = url:gsub("([^%w _%%%-%.~])", char_to_hex)
-        url = url:gsub(" ", "+")
-        return url
-    end
-
-    local function reencode(source_path, dest_path)
-        local args = {
-            'mpv',
-            source_path,
-            '--loop-file=no',
-            '--video=no',
-            '--no-ocopy-metadata',
-            '--no-sub',
-            '--audio-channels=mono',
-            '--oacopts-add=vbr=on',
-            '--oacopts-add=application=voip',
-            '--oacopts-add=compression_level=10',
-            '--af-append=silenceremove=1:0:-50dB',
-            table.concat { '--oac=', config.audio_codec },
-            table.concat { '--oacopts-add=b=', config.audio_bitrate },
-            table.concat { '-o=', dest_path }
-        }
-        return subprocess(args)
-    end
-
-    local function reencode_and_store(source_path, filename)
-        local reencoded_path = utils.join_path(platform.tmp_dir(), 'reencoded_' .. filename)
-        reencode(source_path, reencoded_path)
-        helpers.notify(string.format("Reencoded: '%s'", reencoded_path))
-        return result
-    end
-
-    local function curl_save(source_url, save_location)
-        local curl_args = { 'curl', source_url, '-s', '-L', '-o', save_location }
-        return subprocess(curl_args).status == 0
-    end
-
-    local function get_pronunciation_url(word)
-        local file_format = config.audio_extension:sub(2)
-        local forvo_page = subprocess { 'curl', '-s', string.format('https://forvo.com/search/%s/ja', url_encode(word)) }.stdout
-        local play_params = string.match(forvo_page, "Play%((.-)%);")
-
-        if play_params then
-            local iter = string.gmatch(play_params, "'(.-)'")
-            local formats = { mp3 = iter(), ogg = iter() }
-            return string.format('https://audio00.forvo.com/%s/%s', file_format, base64d(formats[file_format]))
-        end
-    end
-
-    local function make_forvo_filename(word)
-        return string.format('forvo_%s%s', platform.windows and os.time() or word, config.audio_extension)
-    end
-
-    local function get_forvo_pronunciation(word)
-        local audio_url = get_pronunciation_url(word)
-
-        if helpers.is_empty(audio_url) then
-            msg.warn(string.format("Seems like Forvo doesn't have audio for word %s.", word))
-            return
-        end
-
-        local filename = make_forvo_filename(word)
-        local tmp_filepath = utils.join_path(platform.tmp_dir(), filename)
-
-        local result
-        if curl_save(audio_url, tmp_filepath) and reencode_and_store(tmp_filepath, filename) then
-            result = string.format('[sound:%s]', filename)
-        else
-            msg.warn(string.format("Couldn't download audio for word %s from Forvo.", word))
-        end
-
-        os.remove(tmp_filepath)
-        return result
-    end
-
-    append_forvo_pronunciation = function(new_data, stored_data)
-        if config.use_forvo == 'no' then
-            -- forvo functionality was disabled in the config file
-            return new_data
-        end
-
-        if type(stored_data[config.vocab_audio_field]) ~= 'string' then
-            -- there is no field configured to store forvo pronunciation
-            return new_data
-        end
-
-        if helpers.is_empty(stored_data[config.vocab_field]) then
-            -- target word field is empty. can't continue.
-            return new_data
-        end
-
-        if config.use_forvo == 'always' or helpers.is_empty(stored_data[config.vocab_audio_field]) then
-            local forvo_pronunciation = get_forvo_pronunciation(stored_data[config.vocab_field])
-            if not helpers.is_empty(forvo_pronunciation) then
-                if config.vocab_audio_field == config.audio_field then
-                    -- improperly configured fields. don't lose sentence audio
-                    new_data[config.audio_field] = forvo_pronunciation .. new_data[config.audio_field]
-                else
-                    new_data[config.vocab_audio_field] = forvo_pronunciation
-                end
-            end
-        end
-
-        return new_data
-    end
-end
-
-------------------------------------------------------------
 -- subtitles and timings
 
 subs = {