diff options
Diffstat (limited to 'src/feature/syncsearch.nim')
-rw-r--r-- | src/feature/syncsearch.nim | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/feature/syncsearch.nim b/src/feature/syncsearch.nim new file mode 100644 index 0000000..7b2e77c --- /dev/null +++ b/src/feature/syncsearch.nim @@ -0,0 +1,53 @@ +import + algorithm, future, options, sequtils, strutils, + "../args", "../aur", "../config", "../common", "../format", "../package", + "../pacman", "../utils", + "../wrapper/alpm" + +proc handleSyncSearch*(args: seq[Argument], config: Config): int = + let (_, callArgs) = checkAndRefresh(config.color, args) + + let quiet = args.check((some("q"), "quiet")) + + let (aurPackages, aerrors) = findAurPackages(args.targets) + for e in aerrors: printError(config.color, e) + + type Package = tuple[rpcInfo: RpcPackageInfo, installedVersion: Option[string]] + + proc checkLocalPackages: seq[Package] = + if quiet: + aurPackages.map(pkg => (pkg, none(string))) + elif aurPackages.len > 0: + withAlpm(config.root, config.db, newSeq[string](), config.arch, handle, dbs, errors): + for e in errors: printError(config.color, e) + + aurPackages.map(proc (rpcInfo: RpcPackageInfo): Package = + let pkg = handle.local[rpcInfo.name] + if pkg != nil: + (rpcInfo, some($pkg.version)) + else: + (rpcInfo, none(string))) + else: + @[] + + let pkgs = checkLocalPackages() + .sorted((a, b) => cmp(a.rpcInfo.name, b.rpcInfo.name)) + + var code = min(aerrors.len, 1) + if pkgs.len == 0: + if code == 0: + pacmanExec(false, config.color, callArgs) + else: + discard pacmanRun(false, config.color, callArgs) + code + else: + discard pacmanRun(false, config.color, callArgs) + + for pkg in pkgs: + if quiet: + echo(pkg.rpcInfo.name) + else: + printPackageSearch(config.color, "aur", pkg.rpcInfo.name, + pkg.rpcInfo.version, pkg.installedVersion, pkg.rpcInfo.description, + some(formatPkgRating(pkg.rpcInfo.votes, pkg.rpcInfo.popularity))) + 0 |