"type": self.type.toName(),
}
- def getAsDictionaryShort(self, base_url, version=None, protonum=None):
+ def getAsDictionaryShort(self, base_url, version=None):
tnurl = self.getThumbnailURL(1)
- release = self.getDownloadRelease(version=version, protonum=protonum)
+ release = self.getDownloadRelease(version=version)
return {
"name": self.name,
"title": self.title,
"thumbnail": (base_url + tnurl) if tnurl is not None else None
}
- def getAsDictionary(self, base_url, version=None, protonum=None):
+ def getAsDictionary(self, base_url, version=None):
tnurl = self.getThumbnailURL(1)
- release = self.getDownloadRelease(version=version, protonum=protonum)
+ release = self.getDownloadRelease(version=version)
return {
"author": self.author.username,
"name": self.name,
return url_for("packages.download",
author=self.author.username, name=self.name)
- def getDownloadRelease(self, version=None, protonum=None):
- if version is None and protonum is not None:
- version = MinetestRelease.query.filter(MinetestRelease.protocol >= int(protonum)).first()
- if version is not None:
- version = version.id
- else:
- version = 10000000
-
-
+ def getDownloadRelease(self, version=None):
for rel in self.releases:
if rel.approved and (version is None or
- ((rel.min_rel is None or rel.min_rel_id <= version) and \
- (rel.max_rel is None or rel.max_rel_id >= version))):
+ ((rel.min_rel is None or rel.min_rel_id <= version.id) and \
+ (rel.max_rel is None or rel.max_rel_id >= version.id))):
return rel
return None
def getActual(self):
return None if self.name == "None" else self
+ @classmethod
+ def get(cls, version, protocol_num):
+ import sys
+
+ if version:
+ parts = version.split(".")
+ if len(parts) >= 2:
+ major_minor = parts[0] + "." + parts[1]
+ query = MinetestRelease.query.filter(MinetestRelease.name.like("%{}%".format(major_minor)))
+ if protocol_num:
+ query = query.filter_by(protocol=protocol_num)
+
+ release = query.one_or_none()
+ if release:
+ return release
+
+ if protocol_num:
+ release = MinetestRelease.query.filter_by(protocol=protocol_num).one_or_none()
+ return release
+
+ return None
+
class PackageRelease(db.Model):
id = db.Column(db.Integer, primary_key=True)
# Filters
self.search = args.get("q")
- self.protocol_version = args.get("protocol_version")
+ self.minetest_version = args.get("engine_version")
+ self.protocol_version = get_int_or_abort(args.get("protocol_version"))
self.author = args.get("author")
self.show_discarded = isYes(args.get("show_discarded"))
self.order_by = name
def getMinetestVersion(self):
- if not self.protocol_version:
+ if not self.protocol_version and not self.minetest_version:
return None
- self.protocol_version = get_int_or_abort(self.protocol_version)
- version = MinetestRelease.query.filter(MinetestRelease.protocol>=self.protocol_version).first()
- if version is not None:
- return version.id
- else:
- return 10000000
+ return MinetestRelease.get(self.minetest_version, self.protocol_version)
def buildPackageQuery(self):
query = Package.query.filter_by(soft_deleted=False, approved=True)
query = query.filter(Package.license.has(License.is_foss == True))
query = query.filter(Package.media_license.has(License.is_foss == True))
- if self.protocol_version:
+ if self.protocol_version or self.minetest_version:
version = self.getMinetestVersion()
- query = query.join(Package.releases) \
- .filter(PackageRelease.approved==True) \
- .filter(or_(PackageRelease.min_rel_id==None, PackageRelease.min_rel_id<=version)) \
- .filter(or_(PackageRelease.max_rel_id==None, PackageRelease.max_rel_id>=version))
+ if version:
+ query = query.join(Package.releases) \
+ .filter(PackageRelease.approved==True) \
+ .filter(or_(PackageRelease.min_rel_id==None, PackageRelease.min_rel_id<=version.id)) \
+ .filter(or_(PackageRelease.max_rel_id==None, PackageRelease.max_rel_id>=version.id))
if self.limit:
query = query.limit(self.limit)