Index: mythgallery/gallerysettings.cpp =================================================================== RCS file: /var/lib/mythcvs/mythplugins/mythgallery/mythgallery/gallerysettings.cpp,v retrieving revision 1.12 diff -u -d -r1.12 gallerysettings.cpp --- mythgallery/gallerysettings.cpp 30 Jan 2005 16:11:49 -0000 1.12 +++ mythgallery/gallerysettings.cpp 8 May 2005 14:37:33 -0000 @@ -120,6 +120,14 @@ return gc; }; +static HostCheckBox *SlideshowRecursive() +{ + HostCheckBox *gc = new HostCheckBox("GalleryRecursiveSlideshow"); + gc->setLabel(QObject::tr("Recurse into directories")); + gc->setHelpText(QObject::tr("Check this to let the slideshow recurse into " + "sub-directories.")); + return gc; +}; class GalleryConfigurationGroup: public VerticalConfigurationGroup, public TriggeredConfigurationGroup { @@ -160,7 +168,7 @@ addChild(SlideshowDelay()); - + addChild(SlideshowRecursive()); } }; Index: mythgallery/galleryutil.cpp =================================================================== RCS file: /var/lib/mythcvs/mythplugins/mythgallery/mythgallery/galleryutil.cpp,v retrieving revision 1.2 diff -u -d -r1.2 galleryutil.cpp --- mythgallery/galleryutil.cpp 10 Feb 2005 22:21:31 -0000 1.2 +++ mythgallery/galleryutil.cpp 8 May 2005 14:37:33 -0000 @@ -18,10 +18,12 @@ #include #include +#include #include "config.h" #include "constants.h" #include "galleryutil.h" +#include "thumbgenerator.h" #ifdef EXIF_SUPPORT #include @@ -32,13 +34,13 @@ bool GalleryUtil::isImage(const char* filePath) { QFileInfo fi(filePath); - return IMAGE_FILENAMES.find(fi.extension()) != -1; + return !fi.isDir() && IMAGE_FILENAMES.find(fi.extension()) != -1; } bool GalleryUtil::isMovie(const char* filePath) { QFileInfo fi(filePath); - return MOVIE_FILENAMES.find(fi.extension()) != -1; + return !fi.isDir() && MOVIE_FILENAMES.find(fi.extension()) != -1; } long GalleryUtil::getNaturalRotation(const char* filePath) @@ -119,3 +121,81 @@ return rotateAngle; } + +bool GalleryUtil::loadDirectory(ThumbList& itemList, + const QString& dir, bool recurse, + ThumbDict *itemDict, ThumbGenerator* thumbGen) +{ + QDir d(dir); + QString currDir = d.absPath(); + + bool isGallery; + const QFileInfoList* gList = d.entryInfoList("serial*.dat", QDir::Files); + if (gList) + isGallery = (gList->count() != 0); + else + isGallery = false; + + if(thumbGen) { + QFileInfo cdir(d.absPath() + "/.thumbcache"); + if (!cdir.exists()) + d.mkdir(".thumbcache"); + } + + d.setNameFilter(MEDIA_FILENAMES); + d.setSorting(QDir::Name | QDir::DirsFirst | QDir::IgnoreCase); + + d.setMatchAllDirs(true); + const QFileInfoList *list = d.entryInfoList(); + if (!list) + return false; + + QFileInfoListIterator it(*list); + QFileInfo *fi; + + if(thumbGen) { + thumbGen->cancel(); + thumbGen->setDirectory(currDir, isGallery); + } + + while ((fi = it.current()) != 0) + { + ++it; + if (fi->fileName() == "." || fi->fileName() == "..") + continue; + + // remove these already-resized pictures. + if (isGallery && ( + (fi->fileName().find(".thumb.") > 0) || + (fi->fileName().find(".sized.") > 0) || + (fi->fileName().find(".highlight.") > 0))) + continue; + + if(fi->isDir() && recurse) { + GalleryUtil::loadDirectory(itemList, + QDir::cleanDirPath(fi->absFilePath()), true, + itemDict, thumbGen); + } + else { + ThumbItem* item = new ThumbItem; + item->name = fi->fileName(); + item->path = QDir::cleanDirPath(fi->absFilePath()); + item->isDir = fi->isDir(); + + itemList.append(item); + + if(itemDict) + itemDict->insert(item->name, item); + + if(thumbGen) + thumbGen->addFile(item->name); + } + } + + if (thumbGen && !thumbGen->running()) + { + thumbGen->start(); + } + + return isGallery; +} Index: mythgallery/galleryutil.h =================================================================== RCS file: /var/lib/mythcvs/mythplugins/mythgallery/mythgallery/galleryutil.h,v retrieving revision 1.1 diff -u -d -r1.1 galleryutil.h --- mythgallery/galleryutil.h 8 Dec 2004 13:23:55 -0000 1.1 +++ mythgallery/galleryutil.h 8 May 2005 14:37:33 -0000 @@ -19,14 +19,19 @@ #ifndef EXIFUTIL_H #define EXIFUTIL_H +#include "iconview.h" + class GalleryUtil { public: - static bool isImage(const char* filePath); - static bool isMovie(const char* filePath); - static long getNaturalRotation(const char* filePath); + static bool isImage(const char* filePath); + static bool isMovie(const char* filePath); + static long getNaturalRotation(const char* filePath); + static bool loadDirectory(ThumbList& itemList, + const QString& dir, bool recurse, + ThumbDict *itemDict, ThumbGenerator* thumbGen); }; #endif /* EXIFUTIL_H */ Index: mythgallery/glsingleview.cpp =================================================================== RCS file: /var/lib/mythcvs/mythplugins/mythgallery/mythgallery/glsingleview.cpp,v retrieving revision 1.10 diff -u -d -r1.10 glsingleview.cpp --- mythgallery/glsingleview.cpp 24 Feb 2005 21:21:35 -0000 1.10 +++ mythgallery/glsingleview.cpp 8 May 2005 14:37:33 -0000 @@ -78,15 +78,22 @@ // -------------------------------------------------------------------- // remove all dirs from m_itemList; + bool recurse = gContext->GetNumSetting("GalleryRecursiveSlideshow", 0); + + // Optionally append all directories found to the end of the itemlist + // Remove any remaining directories m_itemList.setAutoDelete(false); - ThumbItem* item = m_itemList.first(); + ThumbItem* item = itemList.first(); while (item) { - ThumbItem* next = m_itemList.next(); - if (item->isDir) + ThumbItem* next = itemList.next(); + if (item->isDir) { + if (recurse) + GalleryUtil::loadDirectory(m_itemList, item->path, recurse, NULL, NULL); m_itemList.remove(item); + } item = next; } - + // since we remove dirs item position might have changed item = itemList.at(m_pos); if (item) Index: mythgallery/iconview.cpp =================================================================== RCS file: /var/lib/mythcvs/mythplugins/mythgallery/mythgallery/iconview.cpp,v retrieving revision 1.39 diff -u -d -r1.39 iconview.cpp --- mythgallery/iconview.cpp 24 Feb 2005 21:21:35 -0000 1.39 +++ mythgallery/iconview.cpp 8 May 2005 14:37:33 -0000 @@ -596,58 +596,7 @@ m_lastCol = 0; m_topRow = 0; - const QFileInfoList* gList = d.entryInfoList("serial*.dat", QDir::Files); - if (gList) - m_isGallery = (gList->count() != 0); - else - m_isGallery = false; - - QFileInfo cdir(d.absPath() + "/.thumbcache"); - if (!cdir.exists()) - d.mkdir(".thumbcache"); - - d.setNameFilter(MEDIA_FILENAMES); - d.setSorting(QDir::Name | QDir::DirsFirst | QDir::IgnoreCase); - - d.setMatchAllDirs(true); - const QFileInfoList *list = d.entryInfoList(); - if (!list) - return; - - QFileInfoListIterator it(*list); - QFileInfo *fi; - - m_thumbGen->cancel(); - m_thumbGen->setDirectory(m_currDir, m_isGallery); - - while ((fi = it.current()) != 0) - { - ++it; - if (fi->fileName() == "." || fi->fileName() == "..") - continue; - - // remove these already-resized pictures. - if (m_isGallery && ( - (fi->fileName().find(".thumb.") > 0) || - (fi->fileName().find(".sized.") > 0) || - (fi->fileName().find(".highlight.") > 0))) - continue; - - ThumbItem* item = new ThumbItem; - item->name = fi->fileName(); - item->path = QDir::cleanDirPath(fi->absFilePath()); - item->isDir = fi->isDir(); - - m_itemList.append(item); - m_itemDict.insert(item->name, item); - m_thumbGen->addFile(item->name); - } - - if (!m_thumbGen->running()) - { - m_thumbGen->start(); - } - + m_isGallery = GalleryUtil::loadDirectory(m_itemList, dir, false, &m_itemDict, m_thumbGen);; m_lastRow = QMAX((int)ceilf((float)m_itemList.count()/(float)m_nCols)-1,0); m_lastCol = QMAX(m_itemList.count()-m_lastRow*m_nCols-1,0); } @@ -829,7 +778,8 @@ { ThumbItem* item = m_itemList.at(m_currRow * m_nCols + m_currCol); - if (!item || item->isDir) + bool recurse = gContext->GetNumSetting("GalleryRecursiveSlideshow", 0); + if (!item || (item->isDir && !recurse)) return; int pos = m_currRow * m_nCols + m_currCol; @@ -859,7 +809,8 @@ { ThumbItem* item = m_itemList.at(m_currRow * m_nCols + m_currCol); - if (!item || item->isDir) + bool recurse = gContext->GetNumSetting("GalleryRecursiveSlideshow", 0); + if (!item || (item->isDir && !recurse)) return; int pos = m_currRow * m_nCols + m_currCol; Index: mythgallery/iconview.h =================================================================== RCS file: /var/lib/mythcvs/mythplugins/mythgallery/mythgallery/iconview.h,v retrieving revision 1.22 diff -u -d -r1.22 iconview.h --- mythgallery/iconview.h 24 Feb 2005 21:21:35 -0000 1.22 +++ mythgallery/iconview.h 8 May 2005 14:37:33 -0000 @@ -58,6 +58,7 @@ }; typedef QPtrList ThumbList; +typedef QDict ThumbDict; class IconView : public MythDialog { Index: mythgallery/singleview.cpp =================================================================== RCS file: /var/lib/mythcvs/mythplugins/mythgallery/mythgallery/singleview.cpp,v retrieving revision 1.32 diff -u -d -r1.32 singleview.cpp --- mythgallery/singleview.cpp 24 Feb 2005 21:21:36 -0000 1.32 +++ mythgallery/singleview.cpp 8 May 2005 14:37:33 -0000 @@ -41,12 +41,19 @@ // -------------------------------------------------------------------- // remove all dirs from m_itemList; + bool recurse = gContext->GetNumSetting("GalleryRecursiveSlideshow", 0); + + // Optionally append all directories found to the end of the itemlist + // Remove any remaining directories m_itemList.setAutoDelete(false); - ThumbItem* item = m_itemList.first(); + ThumbItem* item = itemList.first(); while (item) { - ThumbItem* next = m_itemList.next(); - if (item->isDir) + ThumbItem* next = itemList.next(); + if (item->isDir) { + if (recurse) + GalleryUtil::loadDirectory(m_itemList, item->path, recurse, NULL, NULL); m_itemList.remove(item); + } item = next; }