h
This commit is contained in:
@@ -618,7 +618,7 @@
|
|||||||
"(upload42\\.com/[0-9a-zA-Z]{12})"
|
"(upload42\\.com/[0-9a-zA-Z]{12})"
|
||||||
],
|
],
|
||||||
"regexp": "(upload42\\.com/[0-9a-zA-Z]{12})",
|
"regexp": "(upload42\\.com/[0-9a-zA-Z]{12})",
|
||||||
"status": false
|
"status": true
|
||||||
},
|
},
|
||||||
"uploadbank": {
|
"uploadbank": {
|
||||||
"name": "uploadbank",
|
"name": "uploadbank",
|
||||||
|
|||||||
182
MPV/LUA/main.lua
182
MPV/LUA/main.lua
@@ -4,7 +4,7 @@ local msg = require 'mp.msg'
|
|||||||
|
|
||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
local MEDEIA_LUA_VERSION = '2026-03-19.2'
|
local MEDEIA_LUA_VERSION = '2026-03-20.1'
|
||||||
|
|
||||||
-- Expose a tiny breadcrumb for debugging which script version is loaded.
|
-- Expose a tiny breadcrumb for debugging which script version is loaded.
|
||||||
pcall(mp.set_property, 'user-data/medeia-lua-version', MEDEIA_LUA_VERSION)
|
pcall(mp.set_property, 'user-data/medeia-lua-version', MEDEIA_LUA_VERSION)
|
||||||
@@ -598,7 +598,6 @@ local _refresh_store_cache
|
|||||||
local _uosc_open_list_picker
|
local _uosc_open_list_picker
|
||||||
local _run_pipeline_detached
|
local _run_pipeline_detached
|
||||||
local _run_pipeline_background_job
|
local _run_pipeline_background_job
|
||||||
local _run_pipeline_cli_async
|
|
||||||
|
|
||||||
local _cached_store_names = {}
|
local _cached_store_names = {}
|
||||||
local _store_cache_loaded = false
|
local _store_cache_loaded = false
|
||||||
@@ -1699,24 +1698,22 @@ local function _start_screenshot_store_save(store, out_path, tags)
|
|||||||
cmd = cmd .. ' | add-tag ' .. quote_pipeline_arg(tag_string)
|
cmd = cmd .. ' | add-tag ' .. quote_pipeline_arg(tag_string)
|
||||||
end
|
end
|
||||||
|
|
||||||
_lua_log('screenshot-save: async pipeline cmd=' .. cmd)
|
_lua_log('screenshot-save: queueing repl pipeline cmd=' .. cmd)
|
||||||
|
|
||||||
local started, start_err = _run_pipeline_cli_async(cmd, nil, function(success, _result, detail)
|
return _queue_pipeline_in_repl(
|
||||||
if success then
|
cmd,
|
||||||
mp.osd_message('Screenshot saved to store: ' .. store .. tag_suffix, 3)
|
'Queued in REPL: screenshot -> ' .. store .. tag_suffix,
|
||||||
return
|
'Screenshot queue failed',
|
||||||
end
|
'screenshot-save',
|
||||||
mp.osd_message('Screenshot upload failed: ' .. tostring(detail or 'unknown'), 5)
|
{
|
||||||
end)
|
kind = 'mpv-screenshot',
|
||||||
|
mpv_notify = {
|
||||||
if started then
|
success_text = 'Screenshot saved to store: ' .. store .. tag_suffix,
|
||||||
mp.osd_message('Screenshot upload started to store: ' .. store .. tag_suffix, 3)
|
failure_text = 'Screenshot upload failed',
|
||||||
return true
|
duration_ms = 3500,
|
||||||
end
|
},
|
||||||
|
}
|
||||||
mp.osd_message('Screenshot upload failed to start: ' .. tostring(start_err or 'unknown'), 5)
|
)
|
||||||
|
|
||||||
return false
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local function _commit_pending_screenshot(tags)
|
local function _commit_pending_screenshot(tags)
|
||||||
@@ -3579,49 +3576,6 @@ local function _build_pipeline_cli_args(pipeline_cmd, seeds)
|
|||||||
return args, nil
|
return args, nil
|
||||||
end
|
end
|
||||||
|
|
||||||
_run_pipeline_cli_async = function(pipeline_cmd, seeds, cb)
|
|
||||||
local args, build_err = _build_pipeline_cli_args(pipeline_cmd, seeds)
|
|
||||||
if type(args) ~= 'table' then
|
|
||||||
if type(cb) == 'function' then
|
|
||||||
cb(false, nil, tostring(build_err or 'invalid pipeline args'))
|
|
||||||
end
|
|
||||||
return false, tostring(build_err or 'invalid pipeline args')
|
|
||||||
end
|
|
||||||
|
|
||||||
mp.command_native_async(
|
|
||||||
{
|
|
||||||
name = 'subprocess',
|
|
||||||
args = args,
|
|
||||||
capture_stdout = true,
|
|
||||||
capture_stderr = true,
|
|
||||||
playback_only = false,
|
|
||||||
},
|
|
||||||
function(success, result, err)
|
|
||||||
if not success then
|
|
||||||
if type(cb) == 'function' then
|
|
||||||
cb(false, result, tostring(err or 'subprocess failed'))
|
|
||||||
end
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local ok = false
|
|
||||||
local detail = 'invalid subprocess result'
|
|
||||||
if type(result) == 'table' then
|
|
||||||
local err_text = trim(tostring(result.error or ''))
|
|
||||||
local status = tonumber(result.status)
|
|
||||||
ok = (err_text == '' or err_text == 'success') and (status == nil or status == 0)
|
|
||||||
detail = _describe_subprocess_result(result)
|
|
||||||
end
|
|
||||||
|
|
||||||
if type(cb) == 'function' then
|
|
||||||
cb(ok, result, detail)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
)
|
|
||||||
|
|
||||||
return true, nil
|
|
||||||
end
|
|
||||||
|
|
||||||
local function _run_pipeline_cli_detached(pipeline_cmd, seeds)
|
local function _run_pipeline_cli_detached(pipeline_cmd, seeds)
|
||||||
local args, build_err = _build_pipeline_cli_args(pipeline_cmd, seeds)
|
local args, build_err = _build_pipeline_cli_args(pipeline_cmd, seeds)
|
||||||
if type(args) ~= 'table' then
|
if type(args) ~= 'table' then
|
||||||
@@ -3765,12 +3719,15 @@ local function _open_save_location_picker_for_pending_download()
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local clip_range = trim(tostring(_pending_download.clip_range or ''))
|
||||||
|
local title = clip_range ~= '' and ('Save clip ' .. clip_range) or 'Save location'
|
||||||
|
|
||||||
local function build_items()
|
local function build_items()
|
||||||
local selected = _get_selected_store()
|
local selected = _get_selected_store()
|
||||||
local items = {
|
local items = {
|
||||||
{
|
{
|
||||||
title = 'Pick folder…',
|
title = 'Pick folder…',
|
||||||
hint = 'Save to a local folder',
|
hint = clip_range ~= '' and ('Save clip ' .. clip_range .. ' to a local folder') or 'Save to a local folder',
|
||||||
value = { 'script-message-to', mp.get_script_name(), 'medios-download-pick-path', '{}' },
|
value = { 'script-message-to', mp.get_script_name(), 'medios-download-pick-path', '{}' },
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -3797,7 +3754,7 @@ local function _open_save_location_picker_for_pending_download()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Always open immediately with whatever store cache we have.
|
-- Always open immediately with whatever store cache we have.
|
||||||
_uosc_open_list_picker(DOWNLOAD_STORE_MENU_TYPE, 'Save location', build_items())
|
_uosc_open_list_picker(DOWNLOAD_STORE_MENU_TYPE, title, build_items())
|
||||||
|
|
||||||
-- Best-effort refresh; if it succeeds, reopen menu with stores.
|
-- Best-effort refresh; if it succeeds, reopen menu with stores.
|
||||||
mp.add_timeout(0.05, function()
|
mp.add_timeout(0.05, function()
|
||||||
@@ -3806,7 +3763,7 @@ local function _open_save_location_picker_for_pending_download()
|
|||||||
end
|
end
|
||||||
_refresh_store_cache(1.5, function(success, changed)
|
_refresh_store_cache(1.5, function(success, changed)
|
||||||
if success and changed then
|
if success and changed then
|
||||||
_uosc_open_list_picker(DOWNLOAD_STORE_MENU_TYPE, 'Save location', build_items())
|
_uosc_open_list_picker(DOWNLOAD_STORE_MENU_TYPE, title, build_items())
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
@@ -3911,7 +3868,54 @@ local function _start_download_flow_for_current()
|
|||||||
end
|
end
|
||||||
|
|
||||||
_lua_log('download: using current format=' .. tostring(fmt))
|
_lua_log('download: using current format=' .. tostring(fmt))
|
||||||
_pending_download = { url = url, format = fmt }
|
local clip_range = _get_trim_range_from_clip_markers()
|
||||||
|
_pending_download = {
|
||||||
|
url = url,
|
||||||
|
format = fmt,
|
||||||
|
clip_range = clip_range,
|
||||||
|
}
|
||||||
|
|
||||||
|
if clip_range and clip_range ~= '' then
|
||||||
|
_lua_log('download: using clip_range=' .. tostring(clip_range))
|
||||||
|
else
|
||||||
|
local clip_marker_count = 0
|
||||||
|
local marker_label = nil
|
||||||
|
for idx = 1, CLIP_MARKER_SLOT_COUNT do
|
||||||
|
local marker_time = clip_markers[idx]
|
||||||
|
if type(marker_time) == 'number' then
|
||||||
|
clip_marker_count = clip_marker_count + 1
|
||||||
|
if not marker_label then
|
||||||
|
marker_label = _format_clip_marker_label(marker_time)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if clip_marker_count == 1 then
|
||||||
|
_lua_log('download: single clip marker detected; asking whether to continue with full download')
|
||||||
|
if not ensure_uosc_loaded() then
|
||||||
|
mp.osd_message('Only one clip marker is set. Set the second marker or clear markers before downloading.', 4)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
_uosc_open_list_picker('medios_download_clip_decision', marker_label and ('One clip marker set: ' .. marker_label) or 'One clip marker set', {
|
||||||
|
{
|
||||||
|
title = 'Download full item',
|
||||||
|
hint = 'Ignore the single marker and continue',
|
||||||
|
value = { 'script-message-to', mp.get_script_name(), 'medios-download-proceed-full', '{}' },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title = 'Clear clip markers and download full item',
|
||||||
|
hint = 'Reset markers, then continue with a full download',
|
||||||
|
value = { 'script-message-to', mp.get_script_name(), 'medios-download-clear-markers-and-proceed', '{}' },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title = 'Go back and edit clip markers',
|
||||||
|
hint = 'Set the second marker or replace the existing one',
|
||||||
|
value = { 'script-message-to', mp.get_script_name(), 'medios-download-edit-markers', '{}' },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
_open_save_location_picker_for_pending_download()
|
_open_save_location_picker_for_pending_download()
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -4087,9 +4091,15 @@ mp.register_script_message('medios-download-pick-store', function(json)
|
|||||||
|
|
||||||
local url = tostring(_pending_download.url)
|
local url = tostring(_pending_download.url)
|
||||||
local fmt = tostring(_pending_download.format)
|
local fmt = tostring(_pending_download.format)
|
||||||
|
local clip_range = trim(tostring(_pending_download.clip_range or ''))
|
||||||
|
local query = 'format:' .. fmt
|
||||||
|
if clip_range ~= '' then
|
||||||
|
query = query .. ',clip:' .. clip_range
|
||||||
|
end
|
||||||
|
local clip_suffix = clip_range ~= '' and (' [' .. clip_range .. ']') or ''
|
||||||
|
|
||||||
local pipeline_cmd = 'download-file -url ' .. quote_pipeline_arg(url)
|
local pipeline_cmd = 'download-file -url ' .. quote_pipeline_arg(url)
|
||||||
.. ' -query ' .. quote_pipeline_arg('format:' .. fmt)
|
.. ' -query ' .. quote_pipeline_arg(query)
|
||||||
.. ' | add-file -store ' .. quote_pipeline_arg(store)
|
.. ' | add-file -store ' .. quote_pipeline_arg(store)
|
||||||
|
|
||||||
_set_selected_store(store)
|
_set_selected_store(store)
|
||||||
@@ -4100,8 +4110,8 @@ mp.register_script_message('medios-download-pick-store', function(json)
|
|||||||
'download-store-save',
|
'download-store-save',
|
||||||
{
|
{
|
||||||
mpv_notify = {
|
mpv_notify = {
|
||||||
success_text = 'Download completed: store ' .. store .. ' [' .. fmt .. ']',
|
success_text = 'Download completed: store ' .. store .. ' [' .. fmt .. ']' .. clip_suffix,
|
||||||
failure_text = 'Download failed: store ' .. store .. ' [' .. fmt .. ']',
|
failure_text = 'Download failed: store ' .. store .. ' [' .. fmt .. ']' .. clip_suffix,
|
||||||
duration_ms = 3500,
|
duration_ms = 3500,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -4109,6 +4119,28 @@ mp.register_script_message('medios-download-pick-store', function(json)
|
|||||||
_pending_download = nil
|
_pending_download = nil
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
mp.register_script_message('medios-download-proceed-full', function()
|
||||||
|
if type(_pending_download) ~= 'table' or not _pending_download.url or not _pending_download.format then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
_pending_download.clip_range = nil
|
||||||
|
_open_save_location_picker_for_pending_download()
|
||||||
|
end)
|
||||||
|
|
||||||
|
mp.register_script_message('medios-download-clear-markers-and-proceed', function()
|
||||||
|
if type(_pending_download) ~= 'table' or not _pending_download.url or not _pending_download.format then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
_reset_clip_markers()
|
||||||
|
_pending_download.clip_range = nil
|
||||||
|
_open_save_location_picker_for_pending_download()
|
||||||
|
end)
|
||||||
|
|
||||||
|
mp.register_script_message('medios-download-edit-markers', function()
|
||||||
|
_pending_download = nil
|
||||||
|
mp.osd_message('Edit clip markers, then run Download again', 4)
|
||||||
|
end)
|
||||||
|
|
||||||
mp.register_script_message('medios-download-pick-path', function()
|
mp.register_script_message('medios-download-pick-path', function()
|
||||||
if type(_pending_download) ~= 'table' or not _pending_download.url or not _pending_download.format then
|
if type(_pending_download) ~= 'table' or not _pending_download.url or not _pending_download.format then
|
||||||
return
|
return
|
||||||
@@ -4125,9 +4157,15 @@ mp.register_script_message('medios-download-pick-path', function()
|
|||||||
|
|
||||||
local url = tostring(_pending_download.url)
|
local url = tostring(_pending_download.url)
|
||||||
local fmt = tostring(_pending_download.format)
|
local fmt = tostring(_pending_download.format)
|
||||||
|
local clip_range = trim(tostring(_pending_download.clip_range or ''))
|
||||||
|
local query = 'format:' .. fmt
|
||||||
|
if clip_range ~= '' then
|
||||||
|
query = query .. ',clip:' .. clip_range
|
||||||
|
end
|
||||||
|
local clip_suffix = clip_range ~= '' and (' [' .. clip_range .. ']') or ''
|
||||||
|
|
||||||
local pipeline_cmd = 'download-file -url ' .. quote_pipeline_arg(url)
|
local pipeline_cmd = 'download-file -url ' .. quote_pipeline_arg(url)
|
||||||
.. ' -query ' .. quote_pipeline_arg('format:' .. fmt)
|
.. ' -query ' .. quote_pipeline_arg(query)
|
||||||
.. ' | add-file -path ' .. quote_pipeline_arg(folder)
|
.. ' | add-file -path ' .. quote_pipeline_arg(folder)
|
||||||
|
|
||||||
_queue_pipeline_in_repl(
|
_queue_pipeline_in_repl(
|
||||||
@@ -4137,8 +4175,8 @@ mp.register_script_message('medios-download-pick-path', function()
|
|||||||
'download-folder-save',
|
'download-folder-save',
|
||||||
{
|
{
|
||||||
mpv_notify = {
|
mpv_notify = {
|
||||||
success_text = 'Download completed: folder [' .. fmt .. ']',
|
success_text = 'Download completed: folder [' .. fmt .. ']' .. clip_suffix,
|
||||||
failure_text = 'Download failed: folder [' .. fmt .. ']',
|
failure_text = 'Download failed: folder [' .. fmt .. ']' .. clip_suffix,
|
||||||
duration_ms = 3500,
|
duration_ms = 3500,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user