mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-06-11 09:19:22 -04:00
Frontend plugins should not require being placed in the frontend directory to be built successfully. Indeed they should only depend on libobs and the obs-frontend-api and thus their source tree should be able to exist anywhere (even standalone) and the plugin should still compile successfully (just like any 3rd party plugin). Thus moving those plugins into the main plugin directory ensures that they don't require on any "special sauce" within the source tree to compile.
78 lines
2.2 KiB
Python
78 lines
2.2 KiB
Python
import obspython as obs
|
|
import urllib.request
|
|
import urllib.error
|
|
|
|
url = ""
|
|
interval = 30
|
|
source_name = ""
|
|
|
|
# ------------------------------------------------------------
|
|
|
|
def update_text():
|
|
global url
|
|
global interval
|
|
global source_name
|
|
|
|
source = obs.obs_get_source_by_name(source_name)
|
|
if source is not None:
|
|
try:
|
|
with urllib.request.urlopen(url) as response:
|
|
data = response.read()
|
|
text = data.decode('utf-8')
|
|
|
|
settings = obs.obs_data_create()
|
|
obs.obs_data_set_string(settings, "text", text)
|
|
obs.obs_source_update(source, settings)
|
|
obs.obs_data_release(settings)
|
|
|
|
except urllib.error.URLError as err:
|
|
obs.script_log(obs.LOG_WARNING, "Error opening URL '" + url + "': " + err.reason)
|
|
obs.remove_current_callback()
|
|
|
|
obs.obs_source_release(source)
|
|
|
|
def refresh_pressed(props, prop):
|
|
update_text()
|
|
|
|
# ------------------------------------------------------------
|
|
|
|
def script_description():
|
|
return "Updates a text source to the text retrieved from a URL at every specified interval.\n\nBy Lain"
|
|
|
|
def script_update(settings):
|
|
global url
|
|
global interval
|
|
global source_name
|
|
|
|
url = obs.obs_data_get_string(settings, "url")
|
|
interval = obs.obs_data_get_int(settings, "interval")
|
|
source_name = obs.obs_data_get_string(settings, "source")
|
|
|
|
obs.timer_remove(update_text)
|
|
|
|
if url != "" and source_name != "":
|
|
obs.timer_add(update_text, interval * 1000)
|
|
|
|
def script_defaults(settings):
|
|
obs.obs_data_set_default_int(settings, "interval", 30)
|
|
|
|
def script_properties():
|
|
props = obs.obs_properties_create()
|
|
|
|
obs.obs_properties_add_text(props, "url", "URL", obs.OBS_TEXT_DEFAULT)
|
|
obs.obs_properties_add_int(props, "interval", "Update Interval (seconds)", 5, 3600, 1)
|
|
|
|
p = obs.obs_properties_add_list(props, "source", "Text Source", obs.OBS_COMBO_TYPE_EDITABLE, obs.OBS_COMBO_FORMAT_STRING)
|
|
sources = obs.obs_enum_sources()
|
|
if sources is not None:
|
|
for source in sources:
|
|
source_id = obs.obs_source_get_unversioned_id(source)
|
|
if source_id == "text_gdiplus" or source_id == "text_ft2_source":
|
|
name = obs.obs_source_get_name(source)
|
|
obs.obs_property_list_add_string(p, name, name)
|
|
|
|
obs.source_list_release(sources)
|
|
|
|
obs.obs_properties_add_button(props, "button", "Refresh", refresh_pressed)
|
|
return props
|