return "torrent"
elif "xen" in filename:
+ if "downloader" in filename:
+ return "xen-downloader"
+
return "xen"
elif "sources" in filename:
"iso" : _("Installable CD image"),
"torrent" : _("Torrent file"),
"flash" : _("Flash image"),
- "alix" : _("Alix image"),
+ "alix" : _("Flash image for devices with serial console"),
"usbfdd" : _("USB FDD Image"),
"usbhdd" : _("USB HDD Image"),
"xen" : _("Pregenerated Xen image"),
+ "xen-downloader": _("Xen-Image Generator"),
}
try:
"armv5tel" : 40,
"armv5tel-scon" : 41,
"xen" : 50,
+ "xen-downloader": 51,
}
try:
"usbfdd" : _("Install IPFire from a floppy-formated USB key."),
"usbhdd" : _("If the floppy image doesn't work, use this image instead."),
"xen" : _("A ready-to-run image for Xen."),
+ "xen-downloader": _("Generator for creating a Xen image."),
}
try:
if not self.torrent_hash:
return
- return self.tracker.get_seeds(self.torrent_hash)
+ return self.backend.tracker.complete(self.torrent_hash)
@property
def peers(self):
if not self.torrent_hash:
return
- return self.tracker.get_peers(self.torrent_hash)
+ return self.backend.tracker.incomplete(self.torrent_hash)
class Release(Object):
if f:
f.close()
+ def supports_arch(self, arch):
+ # Currently there is nothing else than i586 supported
+ if arch == "i586":
+ return True
+
+ return False
+
+ def supports_platform(self, platform):
+ # Currently there is nothing else than pcbios supported
+ if platform == "pcbios":
+ return True
+
+ return False
+
def is_netboot_capable(self):
return self.path and "ipfire-2.x" in self.path
- @property
- def netboot_kernel(self):
+ def netboot_kernel_url(self, arch, platform):
+ assert self.supports_arch(arch)
+ assert self.supports_platform(platform)
+
return "http://downloads.ipfire.org/%s/images/vmlinuz" % self.path
- @property
- def netboot_initrd(self):
+ def netboot_initrd_url(self, arch, platform):
+ assert self.supports_arch(arch)
+ assert self.supports_platform(platform)
+
return "http://downloads.ipfire.org/%s/images/instroot" % self.path
+ def netboot_args(self, arch, platform):
+ return ""
+
+ @property
+ def news_id(self):
+ return self.__data.news_id
+
@property
- def netboot_append(self):
- return "ro"
+ def news(self):
+ if not hasattr(self, "_news"):
+ self._news = self.backend.news.get(self.news_id)
+
+ return self._news
class Releases(Object):
if ret:
return Release(self.backend, ret.id, data=ret)
+ def get_by_news_id(self, news_id):
+ ret = self.db.get("SELECT * FROM releases WHERE news_id = %s", news_id)
+
+ if ret:
+ return Release(self.backend, ret.id, data=ret)
+
def get_latest(self, stable=True):
ret = self.db.get("SELECT * FROM releases WHERE published IS NOT NULL AND published <= NOW() \
AND stable = %s ORDER BY published DESC LIMIT 1", stable)
if ret:
return Release(self.backend, ret.id, data=ret)
+ def get_latest_unstable(self):
+ ret = self.db.get("SELECT * FROM releases r1 \
+ WHERE r1.published IS NOT NULL AND r1.published <= NOW() \
+ AND stable = %s AND NOT EXISTS ( \
+ SELECT * FROM releases r2 WHERE r2.stable = %s AND \
+ r2.published IS NOT NULL AND r2.published >= r1.published \
+ ) ORDER BY r1.published DESC LIMIT 1", False, True)
+
+ if ret:
+ return Release(self.backend, ret.id, data=ret)
+
def get_stable(self):
query = self.db.query("SELECT * FROM releases \
WHERE published IS NOT NULL AND published <= NOW() AND stable = TRUE \
return releases
+ def _get_all(self):
+ query = self.db.query("SELECT * FROM releases ORDER BY published DESC")
+
+ releases = []
+ for row in query:
+ release = Release(self.backend, row.id, data=row)
+ releases.append(release)
+
+ return releases
+
def get_file_for_torrent_hash(self, torrent_hash):
file = self.db.get("SELECT id, releases FROM files WHERE torrent_hash = %s LIMIT 1",
torrent_hash)
if not file:
return
- release = Release(file.releases)
- file = File(release, file.id)
+ release = Release(self.backend, file.releases)
+ file = File(self.backend, release, file.id)
return file