mirror of
https://github.com/SmallJoker/minetest-u_skinsdb.git
synced 2025-02-22 19:50:29 +01:00
better file handling
Don't download again if the final saved file exists (the preview) Don't modify files in-place.
This commit is contained in:
parent
017e2e442b
commit
f9b139b9fb
@ -2,16 +2,36 @@
|
|||||||
from http.client import HTTPConnection
|
from http.client import HTTPConnection
|
||||||
import json
|
import json
|
||||||
import base64
|
import base64
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def die(message,code=23):
|
||||||
|
print(message,file=sys.stderr)
|
||||||
|
raise SystemExit(code)
|
||||||
|
|
||||||
server = "minetest.fensta.bplaced.net"
|
server = "minetest.fensta.bplaced.net"
|
||||||
skinsdir = "u_skins/textures/"
|
skinsdir = "u_skins/textures/"
|
||||||
metadir = "u_skins/meta/"
|
metadir = "u_skins/meta/"
|
||||||
i = 1
|
curskin = 0
|
||||||
pages = 1
|
pages = None
|
||||||
|
|
||||||
|
def replace(path,encoding=None):
|
||||||
|
mode = "wt" if encoding else "wb"
|
||||||
|
# an unpredictable temp name only needed for a+rwxt directories
|
||||||
|
tmp = '.'+path+'-tmp'
|
||||||
|
def deco(handle):
|
||||||
|
with open(tmp,mode,encoding=encoding) as out:
|
||||||
|
yield out
|
||||||
|
os.rename(tmp,path)
|
||||||
|
return deco
|
||||||
|
|
||||||
|
def maybeReplace(path,encoding=None):
|
||||||
|
def deco(handle):
|
||||||
|
if os.path.exists(path): return
|
||||||
|
return replace(path,encoding)(handle)
|
||||||
|
|
||||||
c = HTTPConnection(server)
|
c = HTTPConnection(server)
|
||||||
def addpage(page):
|
def addpage(page):
|
||||||
global i, pages
|
global curskin, pages
|
||||||
print("Page: " + str(page))
|
print("Page: " + str(page))
|
||||||
r = 0
|
r = 0
|
||||||
try:
|
try:
|
||||||
@ -20,42 +40,52 @@ def addpage(page):
|
|||||||
except Exception:
|
except Exception:
|
||||||
if r != 0:
|
if r != 0:
|
||||||
if r.status != 200:
|
if r.status != 200:
|
||||||
print("Error", r.status)
|
die("Error", r.status)
|
||||||
exit(r.status)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
data = r.read().decode()
|
data = r.read().decode()
|
||||||
l = json.loads(data)
|
l = json.loads(data)
|
||||||
if not l["success"]:
|
if not l["success"]:
|
||||||
print("Success != True")
|
die("Success != True")
|
||||||
exit(1)
|
|
||||||
r = 0
|
r = 0
|
||||||
pages = int(l["pages"])
|
pages = int(l["pages"])
|
||||||
|
foundOne = False
|
||||||
for s in l["skins"]:
|
for s in l["skins"]:
|
||||||
f = open(skinsdir + "character_" + str(i) + ".png", "wb")
|
# make sure to increment this, even if the preview exists!
|
||||||
f.write(base64.b64decode(bytes(s["img"], 'utf-8')))
|
curskin = curskin + 1
|
||||||
f.close()
|
preview = skinsdir + "character_" + str(curskin) + "_preview.png"
|
||||||
f = open(metadir + "character_" + str(i) + ".txt", "w")
|
if os.path.exists(preview): continue
|
||||||
f.write(str(s["name"]) + '\n')
|
foundOne = True
|
||||||
f.write(str(s["author"]) + '\n')
|
tmp = dest+'-tmp'
|
||||||
f.write(str(s["license"]))
|
@maybeReplace(skinsdir + "character_" + str(curskin) + ".png")
|
||||||
f.close()
|
def go(f):
|
||||||
|
f.write(base64.b64decode(bytes(s["img"], 'utf-8')))
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
@maybeReplace(metadir + "character_" + str(curskin) + ".txt",
|
||||||
|
encoding='utf-8')
|
||||||
|
def go(f):
|
||||||
|
f.write(str(s["name"]) + '\n')
|
||||||
|
f.write(str(s["author"]) + '\n')
|
||||||
|
f.write(str(s["license"]))
|
||||||
try:
|
try:
|
||||||
c.request("GET", "/skins/1/" + str(s["id"]) + ".png")
|
c.request("GET", "/skins/1/" + str(s["id"]) + ".png")
|
||||||
r = c.getresponse()
|
r = c.getresponse()
|
||||||
except Exception:
|
except HTTPException as e:
|
||||||
if r != 0:
|
print(type(e),dir(e))
|
||||||
if r.status != 200:
|
raise(e)
|
||||||
print("Error", r.status)
|
if r.status != 200:
|
||||||
|
print("Error", r.status)
|
||||||
continue
|
continue
|
||||||
|
@replace(preview)
|
||||||
data = r.read()
|
def go(f):
|
||||||
f = open(skinsdir + "character_" + str(i) + "_preview.png", "wb")
|
shutil.copyfileobj(r,f)
|
||||||
f.write(data)
|
if not foundOne:
|
||||||
f.close()
|
print("No skins updated on this page. Seems we're done?")
|
||||||
i = i + 1
|
raise SystemExit
|
||||||
addpage(1)
|
addpage(1)
|
||||||
if pages > 1:
|
curpage = 1
|
||||||
for p in range(pages-1):
|
while pages > curpage:
|
||||||
addpage(p+2)
|
curpage = curpage + 1
|
||||||
|
addpage(curpage)
|
||||||
print("Skins have been updated!")
|
print("Skins have been updated!")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user