diff --git a/simgear/package/Package.cxx b/simgear/package/Package.cxx index a5c8d341..323334b1 100644 --- a/simgear/package/Package.cxx +++ b/simgear/package/Package.cxx @@ -131,12 +131,25 @@ InstallRef Package::install() // start a new install ins = new Install(this, pathOnDisk()); m_catalog->root()->scheduleToUpdate(ins); + + _install_cb(this, ins); + return ins; } -InstallRef Package::existingInstall() const +InstallRef Package::existingInstall(const InstallCallback& cb) const { - return m_catalog->installForPackage(const_cast(this)); + InstallRef install = m_catalog->installForPackage(const_cast(this)); + + if( cb ) + { + _install_cb.push_back(cb); + + if( install ) + cb(const_cast(this), install); + } + + return install; } std::string Package::id() const diff --git a/simgear/package/Package.hxx b/simgear/package/Package.hxx index 2c2ce556..50783063 100644 --- a/simgear/package/Package.hxx +++ b/simgear/package/Package.hxx @@ -24,6 +24,7 @@ #include #include +#include #include #include @@ -49,12 +50,16 @@ typedef std::vector PackageList; class Package : public SGReferenced { public: + + typedef boost::function InstallCallback; + /** * get or create an install for the package */ InstallRef install(); - InstallRef existingInstall() const; + InstallRef + existingInstall(const InstallCallback& cb = InstallCallback()) const; bool isInstalled() const; @@ -138,6 +143,8 @@ private: std::string m_id; string_set m_tags; CatalogRef m_catalog; + + mutable function_list _install_cb; };