diff --git a/utils/appstream.py b/utils/appstream.py index 972ca3f..511aaa8 100644 --- a/utils/appstream.py +++ b/utils/appstream.py @@ -1,4 +1,5 @@ import gi +import PIL import requests import os import sys @@ -54,6 +55,19 @@ session=db.session licenses = { x.name : x for x in License.query.all() } tags = { x.name : x for x in Tag.query.all() } admin_user = User.query.filter_by(username="appstream").first() + + +for ss in PackageScreenshot.query.all(): + if ss.package.cover_image == ss: + ss.package.cover_image = None + session.commit() + session.delete(ss) + session.commit() + +for game in Package.query.all(): + session.delete(game) + session.commit() + if not admin_user: admin_user = User("appstream") admin_user.is_active = True @@ -71,10 +85,16 @@ for app in apps: print("APPLICATION: ",app.get_name()) game1 = Package() game1.state = PackageState.APPROVED - game1.name = app.get_id().replace('.','_') + game1.name = app.get_id().replace('.','_').replace('-','_') game1.title = app.get_name() game1.type = PackageType.GAME - game1.license = licenses["MIT"] + license = "Uknown" if app.get_project_license() is None else app.get_project_license().split("AND")[0].split("and")[0] + if license not in licenses: + row = License(license) + licenses[row.name] = row + session.add(row) + session.commit() + game1.license = licenses[license] #game1.license = licenses[app.get_project_license()] game1.media_license = licenses["MIT"] game1.author = admin_user @@ -92,25 +112,42 @@ for app in apps: game1.desc = app.get_description() session.add(game1) - for i,screenshot in enumerate(screenshots): - ss = PackageScreenshot() - ss.package = game1 - ss.title = "Untitled" + for screenshot in screenshots: + counter = 1 url = screenshot.get_url() - r = requests.get(url) - filename = randomString(10) + "." + "png" - filepath = os.path.join("/var/cdb/uploads", filename) - with open(filepath,"wb") as f: - f.write(r.content) + try: + r = requests.get(url,timeout=10) + r.raise_for_status() + filename = randomString(10) + "." + "png" + filepath = os.path.join("/var/cdb/uploads", filename) + print("Screenshot url: ", url) + with open(filepath,"wb") as f: + f.write(r.content) - ss.url = "uploads/" + filename - ss.approved = True - ss.order = i - ss.width, ss.height = get_image_size(filepath) - session.add(ss) - session.commit() - game1.cover_image = ss - session.commit() + width, height = get_image_size(filepath) + + if (width is not None) and (height is not None): + ss = PackageScreenshot() + ss.package = game1 + ss.title = "Untitled" + ss.url = "/uploads/" + filename + ss.width = width + ss.height = height + ss.approved = True + ss.order = counter + session.add(ss) + session.commit() + game1.cover_image = ss + session.commit() + counter += 1 + except requests.exceptions.HTTPError as err: + print("HTTP error downloading the screenshot ", err) + except requests.exceptions.ConnectionError as err: + print("HTTP error downloading the screenshot ", err) + except requests.exceptions.ReadTimeout as err: + print("Screenshot timeout ", err) + except PIL.UnidentifiedImageError as err: + print("Corrupt image ", err) session.commit()