~LOTPlayer();
LOTPlayer();
+ bool loadFromData(const char *jsonData, const char *key);
+
bool setFilePath(const char *filePath);
float playTime() const;
-#include "lottieloader.h"
+#include "lottieloader.h"
#include "lottieparser.h"
#include <fstream>
return CACHE;
}
- std::shared_ptr<LOTModel> find(std::string &key);
+ std::shared_ptr<LOTModel> find(const std::string &key);
void add(std::string &key, std::shared_ptr<LOTModel> value);
private:
std::unordered_map<std::string, std::shared_ptr<LOTModel>> mHash;
};
-std::shared_ptr<LOTModel> LottieFileCache::find(std::string &key)
+std::shared_ptr<LOTModel> LottieFileCache::find(const std::string &key)
{
auto search = mHash.find(key);
if (search != mHash.end()) {
return true;
}
+bool LottieLoader::loadFromData(const char *jsonData, const char *key)
+{
+ LottieFileCache &fileCache = LottieFileCache::get();
+ std::string keyString(key);
+
+ mModel = fileCache.find(std::string(keyString));
+ if (mModel) return true;
+
+ LottieParser parser(const_cast<char *>(jsonData));
+ mModel = parser.model();
+ fileCache.add(keyString, mModel);
+
+ return true;
+}
+
std::shared_ptr<LOTModel> LottieLoader::model()
{
return mModel;
{
public:
bool load(std::string &filePath);
+ bool loadFromData(const char *jsonData, const char *key);
std::shared_ptr<LOTModel> model();
private:
std::shared_ptr<LOTModel> mModel;
LOTPlayerPrivate();
bool update(float pos);
bool setFilePath(std::string path);
+ bool loadFromData(const char *jsonData,
+ const char *key);
void setSize(const VSize &sz);
void setPos(float pos);
VSize size() const;
return false;
}
+bool LOTPlayerPrivate::loadFromData(const char *jsonData, const char *key)
+{
+ if (!jsonData) {
+ vWarning << "jason data is empty";
+ return false;
+ }
+
+ LottieLoader loader;
+ if (loader.loadFromData(jsonData, key)) {
+ mModel = loader.model();
+ mCompItem = std::make_unique<LOTCompItem>(mModel.get());
+ return true;
+ }
+ return false;
+}
+
/*
* Implement a task stealing schduler to perform render task
* As each player draws into its own buffer we can delegate this
* @param path add the details
*/
+bool LOTPlayer::loadFromData(const char *jsonData, const char *key)
+{
+ return d->loadFromData(jsonData, key);
+}
+
bool LOTPlayer::setFilePath(const char *filePath)
{
return d->setFilePath(filePath);