- Add stretch key to scheduler entries
- Fix change logic on pathentry to detect correct
This commit is contained in:
@@ -170,6 +170,8 @@ QVector<PathEntry> parsePathEntry(QJsonObject &jsonMainDoc, bool baseRecursive,
|
|||||||
SetJSONBool(entry.shuffle, schedulerJson, "shuffle");
|
SetJSONBool(entry.shuffle, schedulerJson, "shuffle");
|
||||||
SetJSONBool(entry.sorted, schedulerJson, "sorted");
|
SetJSONBool(entry.sorted, schedulerJson, "sorted");
|
||||||
|
|
||||||
|
SetJSONBool(entry.baseDisplayOptions.fitAspectAxisToWindow, schedulerJson, "stretch");
|
||||||
|
|
||||||
std::string pathString = ParseJSONString(schedulerJson, "path");
|
std::string pathString = ParseJSONString(schedulerJson, "path");
|
||||||
if(!pathString.empty()) {
|
if(!pathString.empty()) {
|
||||||
entry.path = pathString;
|
entry.path = pathString;
|
||||||
@@ -178,10 +180,7 @@ QVector<PathEntry> parsePathEntry(QJsonObject &jsonMainDoc, bool baseRecursive,
|
|||||||
if(!imageListString.empty()) {
|
if(!imageListString.empty()) {
|
||||||
entry.imageList = imageListString;
|
entry.imageList = imageListString;
|
||||||
}
|
}
|
||||||
std::string typeString = ParseJSONString(schedulerJson, "type");
|
|
||||||
if(!pathString.empty()) {
|
|
||||||
entry.type = typeString;
|
|
||||||
}
|
|
||||||
SetJSONBool(entry.exclusive, schedulerJson, "exclusive");
|
SetJSONBool(entry.exclusive, schedulerJson, "exclusive");
|
||||||
|
|
||||||
if(schedulerJson.contains("times") && schedulerJson["times"].isArray())
|
if(schedulerJson.contains("times") && schedulerJson["times"].isArray())
|
||||||
@@ -201,7 +200,7 @@ QVector<PathEntry> parsePathEntry(QJsonObject &jsonMainDoc, bool baseRecursive,
|
|||||||
{
|
{
|
||||||
window.endDisplay = QTime::fromString(timesJson["end"].toString());
|
window.endDisplay = QTime::fromString(timesJson["end"].toString());
|
||||||
}
|
}
|
||||||
entry.timeWindows.append(window);
|
entry.baseDisplayOptions.timeWindows.append(window);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,15 +16,38 @@ struct Config {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct PathEntry {
|
struct PathEntry {
|
||||||
QVector<DisplayTimeWindow> timeWindows;
|
|
||||||
std::string path = "";
|
std::string path = "";
|
||||||
std::string imageList = "";
|
std::string imageList = "";
|
||||||
std::string type = "";
|
bool exclusive = false; // only use this entry when it is valid, skip others
|
||||||
bool exclusive = false;
|
|
||||||
|
|
||||||
bool recursive = false;
|
bool recursive = false;
|
||||||
bool shuffle = false;
|
bool shuffle = false;
|
||||||
bool sorted = false;
|
bool sorted = false;
|
||||||
|
ImageDisplayOptions baseDisplayOptions;
|
||||||
|
|
||||||
|
bool operator==(const PathEntry &b) const
|
||||||
|
{
|
||||||
|
return !operator!=(b);
|
||||||
|
}
|
||||||
|
bool operator!=(const PathEntry &b) const
|
||||||
|
{
|
||||||
|
if (b.exclusive != exclusive)
|
||||||
|
return true;
|
||||||
|
if (b.recursive != recursive || b.shuffle != shuffle || b.sorted != sorted)
|
||||||
|
return true;
|
||||||
|
if(b.baseDisplayOptions.fitAspectAxisToWindow != baseDisplayOptions.fitAspectAxisToWindow)
|
||||||
|
return true;
|
||||||
|
if (b.path != path || b.imageList != imageList)
|
||||||
|
return true;
|
||||||
|
if (b.baseDisplayOptions.timeWindows.count() != baseDisplayOptions.timeWindows.count())
|
||||||
|
return true;
|
||||||
|
for(int i = 0; i < baseDisplayOptions.timeWindows.count(); ++i)
|
||||||
|
{
|
||||||
|
if (b.baseDisplayOptions.timeWindows[i] != baseDisplayOptions.timeWindows[i])
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// app level configuration
|
// app level configuration
|
||||||
@@ -39,18 +62,16 @@ struct AppConfig : public Config {
|
|||||||
|
|
||||||
static const std::string valid_aspects;
|
static const std::string valid_aspects;
|
||||||
public:
|
public:
|
||||||
bool PathOptionsChanged(AppConfig &other) {
|
bool PathOptionsChanged(AppConfig &other)
|
||||||
|
{
|
||||||
if (paths.count() != other.paths.count())
|
if (paths.count() != other.paths.count())
|
||||||
return true;
|
return true;
|
||||||
for(int index = 0; index < paths.count(); ++index)
|
for(int index = 0; index < paths.count(); ++index)
|
||||||
{
|
{
|
||||||
if ( other.paths[index].recursive != paths[index].recursive || other.paths[index].shuffle != paths[index].shuffle
|
if(other.paths[index] != paths[index])
|
||||||
|| other.paths[index].sorted != paths[index].sorted)
|
|
||||||
return true;
|
|
||||||
if ( other.paths[index].path != paths[index].path || other.paths[index].imageList != paths[index].imageList )
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -337,12 +337,12 @@ ListImageSelector::~ListImageSelector()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void ListImageSelector::AddImageSelector(std::unique_ptr<ImageSelector>& selector, const QVector<DisplayTimeWindow> &displayTimeWindows, const bool exclusiveIn)
|
void ListImageSelector::AddImageSelector(std::unique_ptr<ImageSelector>& selector, const bool exclusiveIn, const ImageDisplayOptions& baseDisplayOptionsIn)
|
||||||
{
|
{
|
||||||
SelectoryEntry entry;
|
SelectoryEntry entry;
|
||||||
entry.selector = std::move(selector);
|
entry.selector = std::move(selector);
|
||||||
entry.displayTimeWindows = displayTimeWindows;
|
|
||||||
entry.exclusive = exclusiveIn;
|
entry.exclusive = exclusiveIn;
|
||||||
|
entry.baseDisplayOptions = baseDisplayOptionsIn;
|
||||||
imageSelectors.push_back(std::move(entry));
|
imageSelectors.push_back(std::move(entry));
|
||||||
currentSelector = imageSelectors.begin();
|
currentSelector = imageSelectors.begin();
|
||||||
}
|
}
|
||||||
@@ -353,9 +353,12 @@ const ImageDetails ListImageSelector::getNextImage(const ImageDisplayOptions& ba
|
|||||||
// check for exclusive time windows
|
// check for exclusive time windows
|
||||||
for(auto& selector: imageSelectors)
|
for(auto& selector: imageSelectors)
|
||||||
{
|
{
|
||||||
if (imageInsideTimeWindow(selector.displayTimeWindows) && selector.exclusive)
|
if (imageInsideTimeWindow(selector.baseDisplayOptions.timeWindows) && selector.exclusive)
|
||||||
{
|
{
|
||||||
return selector.selector->getNextImage(baseOptions);
|
ImageDisplayOptions options = baseOptions;
|
||||||
|
if (selector.baseDisplayOptions.fitAspectAxisToWindow)
|
||||||
|
options.fitAspectAxisToWindow = true;
|
||||||
|
return selector.selector->getNextImage(options);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -367,9 +370,12 @@ const ImageDetails ListImageSelector::getNextImage(const ImageDisplayOptions& ba
|
|||||||
{
|
{
|
||||||
currentSelector = imageSelectors.begin();
|
currentSelector = imageSelectors.begin();
|
||||||
}
|
}
|
||||||
if (imageInsideTimeWindow(currentSelector->displayTimeWindows))
|
if (imageInsideTimeWindow(currentSelector->baseDisplayOptions.timeWindows))
|
||||||
{
|
{
|
||||||
return currentSelector->selector->getNextImage(baseOptions);
|
ImageDisplayOptions options = baseOptions;
|
||||||
|
if (currentSelector->baseDisplayOptions.fitAspectAxisToWindow)
|
||||||
|
options.fitAspectAxisToWindow = true;
|
||||||
|
return currentSelector->selector->getNextImage(options);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while(true);
|
while(true);
|
||||||
|
|||||||
@@ -70,12 +70,12 @@ public:
|
|||||||
ListImageSelector();
|
ListImageSelector();
|
||||||
virtual ~ListImageSelector();
|
virtual ~ListImageSelector();
|
||||||
virtual const ImageDetails getNextImage(const ImageDisplayOptions &baseOptions);
|
virtual const ImageDetails getNextImage(const ImageDisplayOptions &baseOptions);
|
||||||
void AddImageSelector(std::unique_ptr<ImageSelector>& selector, const QVector<DisplayTimeWindow> &displayTimeWindows, const bool exclusiveIn);
|
void AddImageSelector(std::unique_ptr<ImageSelector>& selector, const bool exclusiveIn, const ImageDisplayOptions& baseDisplayOptionsIn);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct SelectoryEntry {
|
struct SelectoryEntry {
|
||||||
std::unique_ptr<ImageSelector> selector;
|
std::unique_ptr<ImageSelector> selector;
|
||||||
QVector<DisplayTimeWindow> displayTimeWindows;
|
ImageDisplayOptions baseDisplayOptions;
|
||||||
bool exclusive = false;
|
bool exclusive = false;
|
||||||
};
|
};
|
||||||
std::vector<SelectoryEntry> imageSelectors;
|
std::vector<SelectoryEntry> imageSelectors;
|
||||||
|
|||||||
@@ -12,6 +12,11 @@ struct DisplayTimeWindow
|
|||||||
{
|
{
|
||||||
QTime startDisplay = QTime(0,0,0,0);
|
QTime startDisplay = QTime(0,0,0,0);
|
||||||
QTime endDisplay = QTime(23,59,59,0);
|
QTime endDisplay = QTime(23,59,59,0);
|
||||||
|
|
||||||
|
bool operator!=(const DisplayTimeWindow &b) const
|
||||||
|
{
|
||||||
|
return startDisplay != b.startDisplay || endDisplay != b.endDisplay;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// options to consider when displaying an image
|
// options to consider when displaying an image
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ std::unique_ptr<ImageSelector> GetSelectorForApp(const AppConfig& appConfig)
|
|||||||
for(const auto &path : appConfig.paths)
|
for(const auto &path : appConfig.paths)
|
||||||
{
|
{
|
||||||
auto selector = GetSelectorForConfig(path, appConfig.debugMode);
|
auto selector = GetSelectorForConfig(path, appConfig.debugMode);
|
||||||
listSelector->AddImageSelector(selector,path.timeWindows, path.exclusive);
|
listSelector->AddImageSelector(selector, path.exclusive, path.baseDisplayOptions);
|
||||||
}
|
}
|
||||||
// new things
|
// new things
|
||||||
return listSelector;
|
return listSelector;
|
||||||
|
|||||||
Reference in New Issue
Block a user