Exemple #1
0
    def resolve_local_requirement(self, req, ignore_game_ver=False):
        spec = req.specifier
        game_ver = self.config.game_version_major

        res = [mod for mod in self.find_mods(req.name)
               if mod.version in spec and
               (ignore_game_ver or match_game_version(mod.game_version, game_ver))]
        res.sort(key=lambda m: m.version, reverse=True)
        return res
Exemple #2
0
    def get_releases(self, mod_name, game_version):
        try:
            mod = getattr(self.db.mods, mod_name)
        except AttributeError:
            raise ModNotFoundError(mod_name)

        if match_game_version(mod.latest_release, game_version):
            latest = mod.latest_release
            yield latest

        mod = self.api.get_mod(mod_name)
        res = [release
               for release in mod.releases
               if match_game_version(release, game_version)
               and release.version != latest.version]

        res.sort(key=lambda r: Version(r.version), reverse=True)
        yield from res
Exemple #3
0
    def run(self, args):
        sort = args.sort

        if args.sync is None:
            self.db.maybe_update()
        elif args.sync:
            self.db.update()

        # null queries just list all mods in alphabetical order by default
        if not args.query and not sort:
            sort = 'name'

        hidden = 0

        for result in self.db.search(
                query=' '.join(args.query),
                sortedby=sort,
                limit=args.limit):

            tags = []
            if not match_game_version(result.latest_release,
                                      self.config.game_version_major):
                tags.insert(0, 'incompatible')
                if not args.ignore_game_ver:
                    hidden += 1
                    continue

            if args.format:
                print(args.format.format(result, result=result))
            else:
                print(result.title)
                print("    Name: %s" % result.name)

                if tags:
                    print("    Tags: %s" % (", ".join(tags)))

                print()
                print("\n".join(
                    fill(
                        line,
                        width=get_terminal_size()[0] - 4,
                        tabsize=4,
                        subsequent_indent="    ",
                        initial_indent="    ",
                    )
                    for line in result.summary.splitlines()
                ))
                print()
        if hidden:
            print("Note: %d mods were hidden because they have no "
                  "compatible game versions. Use -i to show them." % hidden,
                  file=sys.stderr)
Exemple #4
0
    def run(self, args):
        installed = self.manager.find_mods()
        updates = []

        if args.ignore_game_ver:
            game_ver = None
        else:
            game_ver = self.config.game_version_major

        self.db.update()

        for local_mod in installed:
            print("Checking: %s %s" % (local_mod.name, local_mod.version))

            found_update = False
            local_ver = local_mod.version
            latest_ver = local_ver
            latest_release = None

            try:
                releases = self.manager.get_releases(local_mod.name, game_ver)
            except StopIteration:
                print("Cannot get_releases for mod %s with game version %s" %
                      (local_mod.name, game_ver))
                continue

            for release in releases:
                if not args.ignore_game_ver and not match_game_version(
                        release, game_ver):
                    continue

                release_ver = Version(release.version)

                if release_ver > latest_ver:
                    found_update = True
                    latest_ver = release_ver
                    latest_release = release

            update_mod = True
            if found_update:
                print("Found update: %s %s" % (local_mod.name, latest_ver))

                if not args.unpacked and not local_mod.packed:
                    print("%s is unpacked. "
                          "Use -U to update it anyway." % (local_mod.name))
                    update_mod = False

                if not args.held and local_mod.name in self.config.hold:
                    print("%s is held. "
                          "Use -H to update it anyway." % local_mod.name)
                    update_mod = False

                if update_mod:
                    updates.append((local_mod, latest_release))

        if not updates:
            print("No updates were found")
            return

        print("Found %d update%s:" % (
            len(updates),
            "s" if len(updates) != 1 else "",
        ))

        for local_mod, release in updates:
            print("    %s %s -> %s" %
                  (local_mod.name, local_mod.version, release.version))

        if not args.show:
            if not args.yes and prompt("Continue?", "Y/n") != "y":
                return

            for local_mod, release in updates:
                self.manager.install_mod(local_mod.name, release)