diff options
-rw-r--r-- | libbible.h | 8 | ||||
-rw-r--r-- | mods.cc | 24 | ||||
-rw-r--r-- | testLibbible.cc | 18 |
3 files changed, 37 insertions, 13 deletions
@@ -45,14 +45,18 @@ namespace libbible { class Status { public: - void update(unsigned long totalBytes, unsigned long completedBytes, std::string message); + virtual void update(unsigned long totalBytes, unsigned long completedBytes, std::string message) {} }; /** * @param status Status update method is called asynchronously as download progresses + */ + void setStatusReporter(Status& status); + + /** * @return A mapping from language to bible version names */ - std::map<std::string, std::vector<std::string>> downloadModsAvailable(Status *status = nullptr); + std::map<std::string, std::vector<std::string>> downloadModsAvailable(); /** * Cancel an in-progress download @@ -10,9 +10,9 @@ using namespace std; class myStatusReporter : public sword::StatusReporter { public: myStatusReporter(libbible::Status *status); - virtual ~myStatusReporter(); - virtual void preStatus(long totalBytes, long completedBytes, const char *message); - virtual void update(unsigned long totalBytes, unsigned long completedBytes); + ~myStatusReporter(); + void preStatus(long totalBytes, long completedBytes, const char *message); + void update(unsigned long totalBytes, unsigned long completedBytes); protected: libbible::Status *status; string message; @@ -24,31 +24,33 @@ myStatusReporter::myStatusReporter(libbible::Status *s) { myStatusReporter::~myStatusReporter() {}; -void libbible::Status::update(unsigned long totalBytes, unsigned long completedBytes, string message) {} +//virtual void libbible::Status::update(unsigned long totalBytes, unsigned long completedBytes, string message) {} void myStatusReporter::preStatus(long totalBytes, long completedBytes, const char *msg) { message = string(msg); status->update((unsigned long) totalBytes, (unsigned long) completedBytes, message); + //printf("Got a status update: %ld / %ld, \"%s\"\n", completedBytes, totalBytes, message.c_str()); } void myStatusReporter::update(unsigned long totalBytes, unsigned long completedBytes) { status->update(totalBytes, completedBytes, message); + //printf("Got a status update: %ld / %ld, \"%s\"\n", completedBytes, totalBytes, message.c_str()); } string basedir = (getenv("HOME")) + string("/.sword/"); sword::InstallMgr *installMgr = new sword::InstallMgr((basedir + std::string("InstallMgr")).c_str(), nullptr); map<string, vector<pair<string, sword::InstallSource *>>> installSources; -map<string, vector<string>> libbible::downloadModsAvailable(libbible::Status *status) { +void libbible::setStatusReporter(libbible::Status& status) { + myStatusReporter *msr = new myStatusReporter(&status); + free(installMgr); + installMgr = new sword::InstallMgr((basedir + std::string("InstallMgr")).c_str(), msr); +} + +map<string, vector<string>> libbible::downloadModsAvailable() { installSources.clear(); mkdir((basedir + std::string("mods.d/")).c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); mkdir((basedir + std::string("modules/")).c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); - myStatusReporter *msr = nullptr; - if(status) { - msr = new myStatusReporter(status); - } - free(installMgr); - installMgr = new sword::InstallMgr((basedir + std::string("InstallMgr")).c_str(), msr); installMgr->setUserDisclaimerConfirmed(true); string confpath = basedir + string("InstallMgr/InstallMgr.conf"); if(! sword::FileMgr::existsFile(confpath.c_str())) { diff --git a/testLibbible.cc b/testLibbible.cc index 3850aa0..8a7f468 100644 --- a/testLibbible.cc +++ b/testLibbible.cc @@ -47,6 +47,19 @@ class TestLibbible : public CppUnit::TestFixture //----------------------------------------------------------------------------- +class StatusTester : public libbible::Status +{ + public: + virtual void update(unsigned long totalBytes, unsigned long completedBytes, string message); + bool hasBeenUpdated = false; +}; + +void StatusTester::update(unsigned long totalBytes, unsigned long completedBytes, string message) { + hasBeenUpdated = true; +} + +//----------------------------------------------------------------------------- + void TestLibbible::testGetModules(void) { map<string, vector<string>> mods = libbible::getModules(); for(auto pair : mods) { @@ -175,7 +188,11 @@ void TestLibbible::testSettings(void) { } void TestLibbible::testDownload(void) { + StatusTester status; + libbible::setStatusReporter(status); map<string, vector<string>> modsAvailable = libbible::downloadModsAvailable(); + //CPPUNIT_ASSERT(status.hasBeenUpdated); + status.hasBeenUpdated = false; // We try installing the first available one string language; string name; @@ -192,6 +209,7 @@ void TestLibbible::testDownload(void) { libbible::installModFromInternet(language, name); mods = libbible::getModules(); CPPUNIT_ASSERT(mods.find(name) != mods.end()); + CPPUNIT_ASSERT(status.hasBeenUpdated); } //----------------------------------------------------------------------------- |