From: James Turner Date: Sat, 2 Mar 2013 17:02:08 +0000 (+0000) Subject: pkgutil can show detailed info about a package. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=f21b0985ccdced053a0ee4cf68bd6f78b232cbb0;p=simgear.git pkgutil can show detailed info about a package. --- diff --git a/simgear/package/Package.cxx b/simgear/package/Package.cxx index cc118e70..7e0b1853 100644 --- a/simgear/package/Package.cxx +++ b/simgear/package/Package.cxx @@ -112,6 +112,11 @@ unsigned int Package::revision() const return m_props->getIntValue("revision"); } +std::string Package::name() const +{ + return m_props->getStringValue("name"); +} + std::string Package::description() const { return getLocalisedProp("decription"); diff --git a/simgear/package/Package.hxx b/simgear/package/Package.hxx index fe0894e1..19a69434 100644 --- a/simgear/package/Package.hxx +++ b/simgear/package/Package.hxx @@ -51,6 +51,12 @@ public: std::string id() const; + /** + * human-readable name - note this is probably not localised, + * although this is not ruled out for the future. + */ + std::string name() const; + /** * syntactic sugar to get the localised description */ diff --git a/simgear/package/pkgutil.cxx b/simgear/package/pkgutil.cxx index f0f19d76..837f0d71 100644 --- a/simgear/package/pkgutil.cxx +++ b/simgear/package/pkgutil.cxx @@ -46,7 +46,7 @@ public: virtual void startInstall(pkg::Install* aInstall) { _lastPercent = 999; - cout << "starting install of " << aInstall->package()->description() << endl; + cout << "starting install of " << aInstall->package()->name() << endl; } virtual void installProgress(pkg::Install* aInstall, unsigned int bytes, unsigned int total) @@ -62,18 +62,56 @@ public: virtual void finishInstall(pkg::Install* aInstall) { - cout << "done install of " << aInstall->package()->description() << endl; + cout << "done install of " << aInstall->package()->name() << endl; } virtual void failedInstall(pkg::Install* aInstall, FailureCode aReason) { - cerr << "failed install of " << aInstall->package()->description() << endl; + cerr << "failed install of " << aInstall->package()->name() << endl; } private: unsigned int _lastPercent; }; +void printRating(pkg::Package* pkg, const std::string& aRating, const std::string& aLabel) +{ + SGPropertyNode* ratings = pkg->properties()->getChild("rating"); + cout << "\t" << aLabel << ":" << ratings->getIntValue(aRating) << endl; +} + +void printPackageInfo(pkg::Package* pkg) +{ + cout << "Package:" << pkg->catalog()->id() << "." << pkg->id() << endl; + cout << "Revision:" << pkg->revision() << endl; + cout << "Name:" << pkg->name() << endl; + cout << "Description:" << pkg->description() << endl; + cout << "Long description:\n" << pkg->getLocalisedProp("long-description") << endl << endl; + + if (pkg->properties()->hasChild("author")) { + cout << "Authors:" << endl; + BOOST_FOREACH(SGPropertyNode* author, pkg->properties()->getChildren("author")) { + if (author->hasChild("name")) { + cout << "\t" << author->getStringValue("name") << endl; + + } else { + // simple author structure + cout << "\t" << author->getStringValue() << endl; + } + + + } + + cout << endl; + } + + cout << "Ratings:" << endl; + printRating(pkg, "fdm", "Flight-model "); + printRating(pkg, "cockpit", "Cockpit "); + printRating(pkg, "model", "3D model "); + printRating(pkg, "systems", "Aircraft systems"); +} + int main(int argc, char** argv) { @@ -92,7 +130,7 @@ int main(int argc, char** argv) std::string url(argv[2]); pkg::Catalog::createFromUrl(root, url); } else if (!strcmp(argv[1], "refresh")) { - root->refresh(); + root->refresh(true); } else if (!strcmp(argv[1], "install")) { pkg::Package* pkg = root->getPackageById(argv[2]); if (!pkg) { @@ -139,6 +177,14 @@ int main(int argc, char** argv) BOOST_FOREACH(pkg::Package* p, updates) { cout << "\t" << p->id() << " " << p->getLocalisedProp("name") << endl; } + } else if (!strcmp(argv[1], "info")) { + pkg::Package* pkg = root->getPackageById(argv[2]); + if (!pkg) { + cerr << "unknown package:" << argv[2] << endl; + return EXIT_FAILURE; + } + + printPackageInfo(pkg); } else { cerr << "unknown command:" << argv[1] << endl; return EXIT_FAILURE;