Skip to content

Commit 639fa55

Browse files
committed
Change downloadURL to parser property, force Version comparison usage
1 parent f2f51b3 commit 639fa55

2 files changed

Lines changed: 32 additions & 23 deletions

File tree

src/altparse/core.py

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -164,26 +164,29 @@ def update(self, **kwargs):
164164
app = self.src.apps[existingAppIDs.index(id)]
165165

166166
# try to use absoluteVersion if the App contains it
167-
if version.parse(app.versions[0].absoluteVersion if app.versions[0].absoluteVersion else app.versions[0].version) < version.parse(parser.version) or (parser.prefer_date and parse_github_datetime(app.versions[0].date) < parse_github_datetime(parser.versionDate)):
167+
new_ver = {
168+
"absoluteVersion": parser.version,
169+
"version": parser.version,
170+
"date": parser.versionDate,
171+
"size": 0,
172+
"downloadURL": parser.downloadURL
173+
}
174+
175+
new_ver = AltSource.App.Version(new_ver)
176+
177+
if app.latest_version() < new_ver or (parser.prefer_date and parse_github_datetime(app.latest_version(True).date) < parse_github_datetime(new_ver.date)):
168178
metadata = parser.get_asset_metadata()
169179

170-
new_ver = {
171-
"absoluteVersion": parser.version,
172-
"date": parser.versionDate,
173-
"localizedDescription": parser.versionDescription,
174-
"size": metadata.get("size"),
175-
"sha256": metadata.get("sha256"),
176-
"version": metadata.get("version") or parser.version,
177-
"buildVersion": metadata.get("buildVersion"),
178-
"downloadURL": metadata.get("downloadURL")
179-
}
180-
181-
new_ver = AltSource.App.Version(new_ver)
180+
new_ver.version = metadata.get("version") or parser.version
181+
new_ver.buildVersion = metadata.get("buildVersion")
182+
new_ver.size = metadata.get("size")
183+
new_ver.sha256 = metadata.get("sha256")
184+
new_ver.localizedDescription = parser.versionDescription
182185

183186
if not metadata.get("bundleIdentifier"):
184187
logging.error("No bundleIdentifier found in IPA.")
185188
elif metadata["bundleIdentifier"] != app.bundleIdentifier:
186-
logging.warning(app.name + " BundleID has changed to " + metadata["bundleIdentifier"])
189+
logging.warning(app.name + " BundleID changed. This may cause issues with automatic updates.")
187190
app.bundleIdentifier = metadata["bundleIdentifier"]
188191
new_ver.localizedDescription += "\n\nNOTE: BundleIdentifier changed in this version and automatic updates have been disabled until manual install occurs."
189192

src/altparse/parsers.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,10 @@ def __init__(self, url: str = "https://unc0ver.dev/releases.json", ver_parse: Ca
140140
else:
141141
self.data = sorted(releases, key=lambda x: version.parse(x["tag_name"]))[-1] # only grab the release with the highest version
142142

143+
@property
144+
def downloadURL(self) -> str:
145+
return "https://unc0ver.dev" + self.data["browser_download_url"]
146+
143147
@property
144148
def version(self) -> str:
145149
return self.data["tag_name"]
@@ -155,11 +159,9 @@ def versionDescription(self) -> str:
155159
def get_asset_metadata(self) -> dict[str]:
156160
"""Returns a dictionary containing the downloadURL, size, bundleID, version
157161
"""
158-
download_url = "https://unc0ver.dev" + self.data["browser_download_url"]
159-
ipa_path = download_tempfile(download_url)
162+
ipa_path = download_tempfile(self.downloadURL)
160163
if ipa_path is not None:
161164
metadata = extract_altstore_metadata(ipa_path)
162-
metadata["downloadURL"] = download_url
163165
return metadata
164166

165167
class GithubParser:
@@ -244,6 +246,13 @@ def alter_tag_names(releases: list):
244246
alter_tag_names(releases)
245247
self.data = sorted(releases, key=lambda x: version.parse(x["tag_name"]))[-1] # only grab the release with the highest version
246248

249+
@property
250+
def downloadURL(self) -> str:
251+
return self.data["asset"]["browser_download_url"]
252+
@downloadURL.setter
253+
def downloadURL(self, value: str):
254+
self.data["asset"]["browser_download_url"] = value
255+
247256
@property
248257
def version(self) -> str:
249258
return self.data["tag_name"]
@@ -262,9 +271,7 @@ def get_asset_metadata(self) -> dict[str]:
262271
Returns:
263272
dict: A dictionary containing the downloadURL, size, bundleID, version, and more.
264273
"""
265-
download_url = self.data["asset"]["browser_download_url"]
266-
267-
ipa_path = download_tempfile(download_url)
274+
ipa_path = download_tempfile(self.downloadURL)
268275
if ipa_path is not None:
269276
payload_path = extract_ipa(ipa_path, self.extract_twice)
270277
if self.extract_twice:
@@ -274,9 +281,8 @@ def get_asset_metadata(self) -> dict[str]:
274281

275282
# Uploads the ipa to a separate GitHub repository after its been processed
276283
if self.upload_ipa_repo is not None:
277-
download_url = upload_ipa_github(ipa_path, self.upload_ipa_repo, name=metadata["bundleIdentifier"], ver=metadata["version"])
278-
279-
metadata["downloadURL"] = download_url
284+
self.downloadURL = upload_ipa_github(ipa_path, self.upload_ipa_repo, name=metadata["bundleIdentifier"], ver=metadata["version"])
285+
280286
return metadata
281287

282288
class Parser(Enum):

0 commit comments

Comments
 (0)