FastLBRY-GTK-master/flbry/fetch.py
auser e2cdd0e5fc Add commit 6a34355fda files minus lbrynet binary
Add files from 6a34355fda commit of FastLBRY-GTK notabug.org repo
by jyamihud without the flbry/lbrynet binary
2026-09-29 20:07:22 +00:00

118 lines
4.5 KiB
Python

#####################################################################
# #
# THIS IS A SOURCE CODE FILE FROM A PROGRAM TO INTERACT WITH THE #
# LBRY PROTOCOL ( lbry.com ). IT WILL USE THE LBRY SDK ( lbrynet ) #
# FROM THEIR REPOSITORY ( https://github.com/lbryio/lbry-sdk ) #
# WHICH I GONNA PRESENT TO YOU AS A BINARY. SINCE I DID NOT DEVELOP #
# IT AND I'M LAZY TO INTEGRATE IN A MORE SMART WAY. THE SOURCE CODE #
# OF THE SDK IS AVAILABLE IN THE REPOSITORY MENTIONED ABOVE. #
# #
# ALL THE CODE IN THIS REPOSITORY INCLUDING THIS FILE IS #
# (C) J.Y.Amihud and Other Contributors 2021. EXCEPT THE LBRY SDK. #
# YOU CAN USE THIS FILE AND ANY OTHER FILE IN THIS REPOSITORY UNDER #
# THE TERMS OF GNU GENERAL PUBLIC LICENSE VERSION 3 OR ANY LATER #
# VERSION. TO FIND THE FULL TEXT OF THE LICENSE GO TO THE GNU.ORG #
# WEBSITE AT ( https://www.gnu.org/licenses/gpl-3.0.html ). #
# #
# THE LBRY SDK IS UNFORTUNATELY UNDER THE MIT LICENSE. IF YOU ARE #
# NOT INTENDING TO USE MY CODE AND JUST THE SDK. YOU CAN FIND IT ON #
# THEIR OFFICIAL REPOSITORY ABOVE. THEIR LICENSE CHOICE DOES NOT #
# SPREAD ONTO THIS PROJECT. DON'T GET A FALSE ASSUMPTION THAT SINCE #
# THEY USE A PUSH-OVER LICENSE, I GONNA DO THE SAME. I'M NOT. #
# #
# THE LICENSE CHOSEN FOR THIS PROJECT WILL PROTECT THE 4 ESSENTIAL #
# FREEDOMS OF THE USER FURTHER, BY NOT ALLOWING ANY WHO TO CHANGE #
# THE LICENSE AT WILL. SO NO PROPRIETARY SOFTWARE DEVELOPER COULD #
# TAKE THIS CODE AND MAKE THEIR USER-SUBJUGATING SOFTWARE FROM IT. #
# #
#####################################################################
# This file is responsible for fetching / connecting to the LBRY SDK
# it will take a more complex approach than simply talking to the SDK
# binary directly.
import os
import json
from subprocess import *
from urllib import request, parse
# EXAMPLE USAGE CODE
# Get:
# out = fetch.lbrynet("get", {"uri":url} )
# Resolve:
# out = fetch.lbrynet("resolve", {"urls":[url]} )
def lbrynet(method="", params={}):
# First we will make an attempt to use the request module
try:
# To test the SDK subprocess thing I have this little switch
# 1/0 # Division by zero will trigger and error in this 'try'
# and will skip it, to test the other method.
data = {"method":method,
"params":params}
# The port of the LBRY SDK could be different for each user
# so here I'm trying to solve this issue
sdk_url = "http://localhost:5279"
try:
settings = open(os.path.expanduser('~/.local/share/lbry/lbrynet/daemon_settings.yml'))
for line in settings:
if line.startswith("api:"):
sdk_url = "http://"+line[5:]
except:
pass
data = str(json.dumps(data))
data = data.encode('utf-8')
req = request.Request(sdk_url, data=data)
resp = json.loads(request.urlopen(req).read())
try:
resp = resp["result"]
except:
pass
return resp
except:
print("USING SDK VIA TERMINAL")
# Attempt number 2: Fetch it regularly using the lbrynet via subprocess
method = method.replace("_", " ")
# TODO: make dynamic lbrynet executable
sdk = "flbry/lbrynet"
c = [sdk, method]
# TODO: This is a mess. Things like 'resolve' or 'get' do not want to
# act nicely. And there needs to be logic to translate them into a
# proper ways. I added only 'resolve' and 'get' thus far. We need to
# work with everything.
for i in params:
if type(params[i]) == list:
for b in params[i]:
if method == "resolve" and i == "urls":
c.append(str(b))
else:
c.append("--"+i+"="+str(b))
elif method == "get" and i == "uri":
c.append(str(params[i]))
else:
c.append("--"+i+"="+str(params[i]))
print(c)
out = check_output(c)
try:
out = json.loads(out)
except Exception as e:
out = {}
return out