]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blobdiff - webapp/backend/releases.py
netboot: Allow booting multiple architectures
[people/shoehn/ipfire.org.git] / webapp / backend / releases.py
index e9b984da925d1ca407641cd3a0df34edc453283c..48f7b5d25c7645a40a54dfb0037e67fb883c8b80 100644 (file)
@@ -51,6 +51,9 @@ class File(Object):
                        return "torrent"
 
                elif "xen" in filename:
+                       if "downloader" in filename:
+                               return "xen-downloader"
+
                        return "xen"
 
                elif "sources" in filename:
@@ -97,6 +100,7 @@ class File(Object):
                        "usbfdd"        : _("USB FDD Image"),
                        "usbhdd"        : _("USB HDD Image"),
                        "xen"           : _("Pregenerated Xen image"),
+                       "xen-downloader": _("Xen-Image Generator"),
                }
 
                try:
@@ -116,6 +120,7 @@ class File(Object):
                        "armv5tel"      : 40,
                        "armv5tel-scon" : 41,
                        "xen"           : 50,
+                       "xen-downloader": 51,
                }
                
                try:
@@ -137,6 +142,7 @@ class File(Object):
                        "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:
@@ -195,14 +201,14 @@ class File(Object):
                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):
@@ -359,20 +365,48 @@ 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):
@@ -388,6 +422,12 @@ 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)