split switcher and traverser to prepare for shuffle mode

This commit is contained in:
Manuel
2020-02-13 21:52:17 +01:00
parent 0eb9596095
commit db09dc43f2
8 changed files with 189 additions and 77 deletions

View File

@@ -1,4 +1,5 @@
#include "imageselector.h"
#include "pathtraverser.h"
#include "mainwindow.h"
#include <QDirIterator>
#include <QTimer>
@@ -8,31 +9,30 @@
#include <stdlib.h> /* srand, rand */
#include <time.h> /* time */
ImageSelector::ImageSelector(std::string path, bool recursive):
path(path),
recursive(recursive)
ImageSelector::ImageSelector(std::unique_ptr<PathTraverser>& pathTraverser):
pathTraverser(pathTraverser)
{
}
ImageSelector::~ImageSelector(){}
DefaultImageSelector::DefaultImageSelector(std::unique_ptr<PathTraverser>& pathTraverser):
ImageSelector(pathTraverser)
{
srand (time(NULL));
}
std::string ImageSelector::getNextImage() const
DefaultImageSelector::~DefaultImageSelector(){}
std::string DefaultImageSelector::getNextImage() const
{
QDir directory(path.c_str());
std:: string filename;
try
{
if (recursive)
{
QStringList images = listImagesRecursive();
unsigned int selectedImage = selectRandom(images);
filename = images.at(selectedImage).toStdString();
}
else
{
QStringList images = directory.entryList(QStringList() << "*.jpg" << "*.JPG", QDir::Files);
unsigned int selectedImage = selectRandom(images);
filename = directory.filePath(images.at(selectedImage)).toStdString();
}
QStringList images = pathTraverser->getImages();
unsigned int selectedImage = selectRandom(images);
filename = pathTraverser->getImagePath(images.at(selectedImage).toStdString());
}
catch(const std::string& err)
{
@@ -42,24 +42,12 @@ std::string ImageSelector::getNextImage() const
return filename;
}
unsigned int ImageSelector::selectRandom(const QStringList& images) const
unsigned int DefaultImageSelector::selectRandom(const QStringList& images) const
{
std::cout << "images: " << images.size() << std::endl;
if (images.size() == 0)
{
throw std::string("No jpg images found in folder " + path);
throw std::string("No jpg images found in given folder");
}
return rand() % images.size();
}
QStringList ImageSelector::listImagesRecursive() const
{
QDirIterator it(QString(path.c_str()), QStringList() << "*.jpg" << "*.JPG", QDir::Files, QDirIterator::Subdirectories);
QStringList files;
while (it.hasNext())
{
files.append(it.next());
}
return files;
}