mirror of
https://github.com/saphid/frame-control.git
synced 2026-10-06 05:02:50 +02:00
- F-Droid: percent-encode repo file names (a '#' in one screenshot name broke the whole main repo); a bad image name drops that image, not the app. - Search: sources still fetching report 'loading' (UI says so and refreshes quietly); indexes warm up at server start; page-only SideQuest is not searched and appears as a 'Browse SideQuest' link instead of an error. - Browse (empty query) ranks VR, artwork and recent updates first; the F-Droid archive is off by default (old versions only). - Throttled sources fall back to their last cached copy; per-host message. - Curated GitHub list gains Open Saber Plus (MIT) with icon and screenshots. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
40 lines
1.6 KiB
Python
40 lines
1.6 KiB
Python
"""SideQuest page links only: its terms do not authorise third-party scraping.
|
|
|
|
No API calls, cached listings or automated downloads. See docs/sidequest.md.
|
|
"""
|
|
from . import SourceError
|
|
|
|
KIND = 'sidequest'
|
|
URL = 'https://sidequestvr.com'
|
|
REASON = ('SideQuest is page-only: its terms restrict scraping and unauthorised '
|
|
'access. Browse and download with SideQuest, then import a developer-provided APK.')
|
|
|
|
|
|
def sources():
|
|
return [{'id': KIND, 'kind': KIND, 'name': 'SideQuest', 'url': URL,
|
|
'builtin': True, 'enabled': True, 'trust': 'community',
|
|
'page_only': True, 'reason': REASON}]
|
|
|
|
|
|
def search(source, query, limit=50):
|
|
# Do not invent catalogue results or interpret a query as a verified free app.
|
|
return []
|
|
|
|
|
|
def details(source, entry_id):
|
|
entry_id = str(entry_id)
|
|
if not entry_id.isascii() or not entry_id.isdecimal() or len(entry_id) > 12:
|
|
raise SourceError('SideQuest listing ids must be numeric')
|
|
return {'source': source['id'], 'id': entry_id, 'package': None,
|
|
'name': 'SideQuest listing ' + entry_id, 'summary': REASON,
|
|
'icon': None, 'page': URL + '/app/' + entry_id, 'version': None,
|
|
'version_code': None, 'min_sdk': None, 'abis': None, 'vr': None,
|
|
'size': None, 'free': None, 'license': None, 'updated': None,
|
|
'downloadable': False, 'versions': [], 'tags': [], 'headsets': [],
|
|
'images': {'icon': None, 'banner': None, 'screenshots': []}}
|
|
|
|
|
|
def download(source, entry_id, version_code=None):
|
|
entry = details(source, entry_id)
|
|
raise SourceError(REASON + ' ' + entry['page'])
|