end
local function get_screenshot(package)
- if #package.screenshots == 0 then
+ if not package.thumbnail then
return defaulttexturedir .. "no_screenshot.png"
- elseif screenshot_downloading[package.screenshots[1]] then
+ elseif screenshot_downloading[package.thumbnail] then
return defaulttexturedir .. "loading_screenshot.png"
end
end
-- Show error if we've failed to download before
- if screenshot_downloaded[package.screenshots[1]] then
+ if screenshot_downloaded[package.thumbnail] then
return defaulttexturedir .. "error_screenshot.png"
end
return core.download_file(params.url, params.dest)
end
local function callback(success)
- screenshot_downloading[package.screenshots[1]] = nil
- screenshot_downloaded[package.screenshots[1]] = true
+ screenshot_downloading[package.thumbnail] = nil
+ screenshot_downloaded[package.thumbnail] = true
if not success then
core.log("warning", "Screenshot download failed for some reason")
end
end
end
if core.handle_async(download_screenshot,
- { dest = filepath, url = package.screenshots[1] }, callback) then
- screenshot_downloading[package.screenshots[1]] = true
+ { dest = filepath, url = package.thumbnail }, callback) then
+ screenshot_downloading[package.thumbnail] = true
else
core.log("error", "ERROR: async event failed")
return defaulttexturedir .. "error_screenshot.png"
for (unsigned int i = 0; i < json.size(); ++i) {
Package package;
+ package.author = json[i]["author"].asString();
package.name = json[i]["name"].asString();
package.title = json[i]["title"].asString();
- package.author = json[i]["author"].asString();
package.type = json[i]["type"].asString();
package.shortDesc = json[i]["shortDesc"].asString();
- package.url = json[i]["url"].asString();
package.release = json[i]["release"].asInt();
+ if (json[i].isMember("thumbnail"))
+ package.thumbnail = json[i]["thumbnail"].asString();
- Json::Value jScreenshots = json[i]["screenshots"];
- for (unsigned int j = 0; j < jScreenshots.size(); ++j) {
- package.screenshots.push_back(jScreenshots[j].asString());
- }
-
- if (package.valid()) {
+ if (package.valid())
packages.push_back(package);
- } else {
+ else
errorstream << "Invalid package at " << i << std::endl;
- }
}
return packages;
struct Package
{
+ std::string author;
std::string name; // Technical name
std::string title;
- std::string author;
std::string type; // One of "mod", "game", or "txp"
std::string shortDesc;
- std::string url; // download URL
u32 release;
- std::vector<std::string> screenshots;
+ std::string thumbnail;
+
+ bool valid() const
+ {
+ return !(author.empty() || name.empty() || title.empty() ||
+ type.empty() || release <= 0);
+ }
- bool valid()
+ std::string getDownloadURL(const std::string &baseURL) const
{
- return !(name.empty() || title.empty() || author.empty() ||
- type.empty() || url.empty() || release <= 0);
+ return baseURL + "/packages/" + author + "/" + name + "/download/";
}
};
int ModApiMainMenu::l_get_package_list(lua_State *L)
{
std::string url = g_settings->get("contentdb_url");
- std::vector<Package> packages = getPackagesFromURL(url + "/packages/");
+ std::vector<Package> packages = getPackagesFromURL(url + "/api/packages/");
// Make table
lua_newtable(L);
int top_lvl2 = lua_gettop(L);
+ lua_pushstring(L, "author");
+ lua_pushstring(L, package.author.c_str());
+ lua_settable (L, top_lvl2);
+
lua_pushstring(L, "name");
lua_pushstring(L, package.name.c_str());
lua_settable (L, top_lvl2);
lua_pushstring(L, package.title.c_str());
lua_settable (L, top_lvl2);
- lua_pushstring(L, "author");
- lua_pushstring(L, package.author.c_str());
- lua_settable (L, top_lvl2);
-
lua_pushstring(L, "type");
lua_pushstring(L, package.type.c_str());
lua_settable (L, top_lvl2);
lua_pushstring(L, package.shortDesc.c_str());
lua_settable (L, top_lvl2);
- lua_pushstring(L, "url");
- lua_pushstring(L, package.url.c_str());
- lua_settable (L, top_lvl2);
-
lua_pushstring (L, "release");
lua_pushinteger(L, package.release);
lua_settable (L, top_lvl2);
- lua_pushstring(L, "screenshots");
- lua_newtable(L);
- {
- int top_screenshots = lua_gettop(L);
- for (size_t i = 0; i < package.screenshots.size(); ++i) {
- lua_pushnumber(L, i + 1);
- lua_pushstring(L, package.screenshots[i].c_str());
- lua_settable(L, top_screenshots);
- }
+ if (package.thumbnail != "") {
+ lua_pushstring(L, "thumbnail");
+ lua_pushstring(L, package.thumbnail.c_str());
+ lua_settable (L, top_lvl2);
}
- lua_settable(L, top_lvl2);
+
+ lua_pushstring(L, "url");
+ lua_pushstring(L, package.getDownloadURL(url).c_str());
+ lua_settable (L, top_lvl2);
lua_settable(L, top);
index++;