pkgutil can show detailed info about a package.

This commit is contained in:
James Turner
2013-03-02 17:02:08 +00:00
parent 71e9548c20
commit f21b0985cc
3 changed files with 61 additions and 4 deletions
+5
View File
@@ -112,6 +112,11 @@ unsigned int Package::revision() const
return m_props->getIntValue("revision"); return m_props->getIntValue("revision");
} }
std::string Package::name() const
{
return m_props->getStringValue("name");
}
std::string Package::description() const std::string Package::description() const
{ {
return getLocalisedProp("decription"); return getLocalisedProp("decription");
+6
View File
@@ -51,6 +51,12 @@ public:
std::string id() const; 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 * syntactic sugar to get the localised description
*/ */
+50 -4
View File
@@ -46,7 +46,7 @@ public:
virtual void startInstall(pkg::Install* aInstall) virtual void startInstall(pkg::Install* aInstall)
{ {
_lastPercent = 999; _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) virtual void installProgress(pkg::Install* aInstall, unsigned int bytes, unsigned int total)
@@ -62,18 +62,56 @@ public:
virtual void finishInstall(pkg::Install* aInstall) 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) 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: private:
unsigned int _lastPercent; 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) int main(int argc, char** argv)
{ {
@@ -92,7 +130,7 @@ int main(int argc, char** argv)
std::string url(argv[2]); std::string url(argv[2]);
pkg::Catalog::createFromUrl(root, url); pkg::Catalog::createFromUrl(root, url);
} else if (!strcmp(argv[1], "refresh")) { } else if (!strcmp(argv[1], "refresh")) {
root->refresh(); root->refresh(true);
} else if (!strcmp(argv[1], "install")) { } else if (!strcmp(argv[1], "install")) {
pkg::Package* pkg = root->getPackageById(argv[2]); pkg::Package* pkg = root->getPackageById(argv[2]);
if (!pkg) { if (!pkg) {
@@ -139,6 +177,14 @@ int main(int argc, char** argv)
BOOST_FOREACH(pkg::Package* p, updates) { BOOST_FOREACH(pkg::Package* p, updates) {
cout << "\t" << p->id() << " " << p->getLocalisedProp("name") << endl; 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 { } else {
cerr << "unknown command:" << argv[1] << endl; cerr << "unknown command:" << argv[1] << endl;
return EXIT_FAILURE; return EXIT_FAILURE;