commit 85b3a3babb9df08f31d79c5539321e331b96fed4
parent 821ddf8f7db17e12f6d139a9617c3cc389729f2a
Author: cfillion <cfillion@users.noreply.github.com>
Date: Tue, 1 Dec 2015 23:10:30 -0500
fix package downloading
Diffstat:
7 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/src/database.cpp b/src/database.cpp
@@ -56,6 +56,6 @@ void Category::addPackage(PackagePtr pack)
else if(pack->versions().empty())
return;
- pack->setCategory(this);
+ pack->setCategory(shared_from_this());
m_packages.push_back(pack);
}
diff --git a/src/database.hpp b/src/database.hpp
@@ -32,7 +32,7 @@ private:
std::vector<PackagePtr> m_packages;
};
-class Category {
+class Category : public std::enable_shared_from_this<Category> {
public:
Category(const std::string &name);
diff --git a/src/package.cpp b/src/package.cpp
@@ -58,10 +58,10 @@ Path Package::scriptLocation() const
path.append("Scripts");
path.append("ReaScripts");
- if(m_category)
+ if(category())
path.append(category()->name());
- path.append(m_name);
+ path.append(name());
return path;
}
diff --git a/src/package.hpp b/src/package.hpp
@@ -8,6 +8,7 @@ class Package;
typedef std::shared_ptr<Package> PackagePtr;
class Category;
+typedef std::shared_ptr<Category> CategoryPtr;
class Package {
public:
@@ -20,8 +21,8 @@ public:
Package(const Type, const std::string &name);
- void setCategory(Category *cat) { m_category = cat; }
- Category *category() const { return m_category; }
+ void setCategory(CategoryPtr cat) { m_category = cat; }
+ CategoryPtr category() const { return m_category; }
Type type() const { return m_type; }
const std::string &name() const { return m_name; }
@@ -36,7 +37,7 @@ public:
private:
Path scriptLocation() const;
- Category *m_category;
+ CategoryPtr m_category;
Type m_type;
std::string m_name;
VersionSet m_versions;
diff --git a/src/reapack.cpp b/src/reapack.cpp
@@ -103,14 +103,14 @@ void ReaPack::synchronize(DatabasePtr database)
installPackage(pkg);
}
catch(const reapack_error &e) {
- ShowMessageBox(e.what(), "Package Error", 0);
+ ShowMessageBox(e.what(), pkg->name().c_str(), 0);
}
}
}
void ReaPack::installPackage(PackagePtr pkg)
{
- const char *url = pkg->lastVersion()->source(0)->url().c_str();
+ const std::string &url = pkg->lastVersion()->source(0)->url();
m_downloadQueue.push(url, [=](const int code, const string &data) {
if(code != 200) {
diff --git a/test/database.cpp b/test/database.cpp
@@ -93,14 +93,14 @@ TEST_CASE("add a package", M) {
PackagePtr pack = make_shared<Package>(Package::ScriptType, "name");
pack->addVersion(ver);
- Category cat("a");
- CHECK(cat.packages().size() == 0);
+ CategoryPtr cat = make_shared<Category>("a");
+ CHECK(cat->packages().size() == 0);
CHECK_FALSE(pack->category());
- cat.addPackage(pack);
+ cat->addPackage(pack);
- REQUIRE(cat.packages().size() == 1);
- REQUIRE(pack->category() == &cat);
+ REQUIRE(cat->packages().size() == 1);
+ REQUIRE(pack->category().get() == cat.get());
}
TEST_CASE("drop empty package", M) {
diff --git a/test/package.cpp b/test/package.cpp
@@ -65,10 +65,10 @@ TEST_CASE("unknown target location", M) {
}
TEST_CASE("script target location", M) {
- Category cat("Category Name");
+ CategoryPtr cat = make_shared<Category>("Category Name");
Package pack(Package::ScriptType, "file.name");
- pack.setCategory(&cat);
+ pack.setCategory(cat);
const Path path = pack.targetLocation();