Ticket #4400: phpgallery2-030908.patch

File phpgallery2-030908.patch, 26.6 KB (added by jshoor, 13 years ago)

Updated Php Gallery 2 integration patch

  • mythgallery/mythgallery/phpgalleryutil.cpp

     
     1//
     2// C++ Implementation: PhpGalleryUtil
     3//
     4// Description:
     5//
     6//
     7// Author: mythtv <mythtv@jshoor-media>, (C) 2007
     8//
     9// Copyright: See COPYING file that comes with this distribution
     10//
     11//
     12
     13#include <qdir.h>
     14#include <qhbox.h>
     15#include <qvbox.h>
     16#include <qapplication.h>
     17#include <mythtv/mythcontext.h>
     18#include <mythtv/mythwidgets.h>
     19#include <mythtv/lcddevice.h>
     20
     21#include "phpgalleryutil.h"
     22
     23QString PhpGalleryUtil::m_startURL;
     24QString PhpGalleryUtil::m_startDir;
     25Album *PhpGalleryUtil::m_rootAlbum;
     26int PhpGalleryUtil::m_refreshCache;
     27QPtrList<Album> PhpGalleryUtil::m_all_albums;
     28QDict<Album>  PhpGalleryUtil::m_temp_album_dict;
     29QDict<Album>  PhpGalleryUtil::m_album_dict;
     30int PhpGalleryUtil::m_progress;
     31
     32
     33PhpGalleryUtil::PhpGalleryUtil()
     34{
     35    m_startURL = gContext->GetSetting("PHPGalleryURL");
     36    m_startDir = gContext->GetSetting("GalleryDir");
     37    m_refreshCache = gContext->GetNumSetting("PHPGalleryRefreshCache");
     38    m_progress = 0;
     39    m_stopped = false;
     40   
     41        QDir dir(m_startDir);
     42        if (!dir.exists() || !dir.isReadable())
     43        {
     44                m_errorStr = tr("MythGallery Directory '%1' does not exist "
     45                "or is unreadable.").arg(m_startDir);
     46                return;
     47        }
     48   
     49    QString response = MakeRequest("fetch-albums&g2_form%5Bno_perms%5D=yes");
     50    if (!response){
     51        m_errorStr += tr("Php Gallery URL '%1' is down or is not correct.").arg(m_startURL);
     52        return;
     53    }
     54
     55    QStringList responseLines = QStringList::split("\n",response);
     56    QString albumNumber = NULL;
     57    for ( QStringList::Iterator it = responseLines.begin(); it != responseLines.end(); ++it )
     58    {
     59        QStringList nameList;
     60        QString propValue;
     61        ReadResponseLine(*it, nameList, propValue);
     62        if ((nameList[0].compare("album")==0)&&((nameList.last()).compare(albumNumber)!=0))
     63        {
     64                QString albumName=NULL;
     65                QString albumTitle=NULL;
     66                QString albumParent=NULL;                       
     67                albumNumber = nameList.last();
     68                if (nameList[1].compare("name")==0)
     69                {
     70                        albumName = propValue;
     71                }
     72                ReadResponseLine(*++it, nameList, propValue);
     73                if ((nameList[1].compare("title")==0)&&((nameList.last()).compare(albumNumber)==0))
     74                {
     75                        propValue.replace("/", "-" );
     76                        propValue.replace("\\", "-" );
     77                        albumTitle = propValue;
     78                }
     79                it++;
     80                ReadResponseLine(*++it, nameList, propValue);
     81                if ((nameList[1].compare("parent")==0)&&((nameList.last()).compare(albumNumber)==0))
     82                {
     83                        albumParent = propValue;
     84                }
     85            if (albumParent.compare("0")==0){
     86                m_rootAlbum = new Album(albumName, albumTitle, albumParent);
     87                m_rootAlbum->SetPath(m_startDir + "/");
     88            }
     89            else
     90            {
     91                Album *album = new Album(albumName, albumTitle, albumParent);
     92                m_all_albums.append(album);
     93                m_temp_album_dict.insert(album->GetName(),album);
     94            }
     95
     96        }
     97               
     98    }
     99        QPtrListIterator<Album> it( m_all_albums );
     100        Album *thisalbum;
     101
     102        while ((thisalbum = it.current()) != 0){
     103                thisalbum->SetPath(BuildPath(thisalbum,thisalbum->GetTitle()));
     104        m_album_dict.insert(thisalbum->GetTitle(),thisalbum);
     105                ++it;
     106        }
     107        return;
     108}
     109
     110PhpGalleryUtil::~PhpGalleryUtil()
     111{
     112    return;
     113}
     114
     115QString PhpGalleryUtil::BuildPath(Album *album, QString path)
     116{
     117        if (album->GetParent().compare(m_rootAlbum->GetName())==0)
     118        {
     119                path.prepend(m_startDir + "/");
     120                QDir dir(path);
     121                if (!dir.exists())
     122                {
     123                        dir.mkdir(path,true);
     124                }
     125                return path;
     126        }
     127        else
     128        {
     129                path.prepend(m_temp_album_dict.find(album->GetParent())->GetTitle()+"/");
     130                return BuildPath(m_temp_album_dict.find(album->GetParent()),path);
     131        }
     132}
     133               
     134
     135void PhpGalleryUtil::ReadResponseLine(QString responseLine, QStringList &nameList, QString &propValue)
     136{
     137        QStringList propertyMap = QStringList::split("=", responseLine);
     138        QString propName = propertyMap[0];
     139        propValue = propertyMap[1];
     140        nameList = QStringList::split(".", propName);
     141}
     142
     143void PhpGalleryUtil::LoadAll(const QString& dir, MythPhpDownloadProgressDialog *dialog)
     144{
     145        Album *album;
     146        if (dir.compare(m_startDir)==0)
     147        {
     148                album = m_rootAlbum;
     149        }
     150        else
     151        {
     152                album = m_album_dict.find(dir.section("/",-1));
     153        }
     154        GetAll(album, dialog);
     155        dialog->setPrimaryProgress(++m_progress);
     156        QPtrListIterator<Album> it( m_all_albums );
     157        Album *thisalbum;
     158
     159        while ((thisalbum = it.current()) != 0)
     160        {
     161                if (m_stopped)
     162                        return;
     163                if (thisalbum->GetParent().compare(album->GetName()) == 0)
     164                {
     165                        LoadAll(thisalbum->GetPath(), dialog);                                 
     166                }
     167                ++it;
     168        }
     169        return;
     170}
     171
     172void PhpGalleryUtil::GetAll(Album *album, MythPhpDownloadProgressDialog *dialog)
     173{
     174    int progress = 1;
     175    dialog->setSecondaryLabel(album->GetTitle());
     176    QString response = MakeRequest("fetch-album-images&g2_form%5Bset_albumName%5D=" + album->GetName());
     177    QStringList responseLines = QStringList::split("\n",response);
     178   
     179    //Find total items in album
     180    for ( QStringList::Iterator it = --responseLines.end(); it != responseLines.begin(); --it )
     181    {
     182        if (m_stopped)
     183            return;
     184        QStringList nameList;
     185        QString propValue;
     186        ReadResponseLine(*it, nameList, propValue);   
     187        if (nameList[0].compare("image_count")==0)
     188        {
     189            dialog->setSecondaryTotalSteps(propValue.toInt());
     190            break;
     191        }
     192    }
     193
     194    //Download items in album
     195    QString itemNumber = NULL;   
     196    for ( QStringList::Iterator it = responseLines.begin(); it != responseLines.end(); ++it )
     197    {
     198        if (m_stopped)
     199            return;
     200        QStringList nameList;
     201        QString propValue;
     202        ReadResponseLine(*it, nameList, propValue);
     203        if ((nameList[0].compare("image")==0)&&(nameList.last().compare(itemNumber)!=0))
     204        {
     205
     206/*            image.name.1=12227
     207            image.raw_width.1=3008
     208            image.raw_height.1=2000
     209            image.raw_filesize.1=1196696
     210            image.resizedName.1=12228 if exists
     211            image.resized_width.1=640 if exists
     212            image.resized_height.1=426 if exists
     213            image.thumbName.1=12229
     214            image.thumb_width.1=150
     215            image.thumb_height.1=100
     216            image.forceExtension.1=jpg
     217            image.caption.1=DSC_0005.JPG
     218            image.title.1=DSC_0005.JPG
     219            image.hidden.1=no*/
     220
     221            QString itemName=NULL;
     222            QString thumbName=NULL;
     223            QString itemTitle=NULL;
     224            QString itemParent=NULL;
     225            QString itemExtension=NULL;
     226           
     227            itemNumber = nameList.last();
     228            if (nameList[1].compare("name")==0)
     229            {
     230                itemName = propValue;
     231            }
     232            it+=4;
     233            ReadResponseLine(*it, nameList, propValue);
     234            if (nameList[1].compare("resizedName")==0)
     235            {
     236                itemName = propValue;
     237                it+=3;
     238            }
     239
     240            ReadResponseLine(*it, nameList, propValue);
     241            if (nameList[1].compare("thumbName")==0)
     242            {
     243                thumbName = propValue;
     244            }
     245            it+=2;
     246            ReadResponseLine(*++it, nameList, propValue);
     247            if ((nameList[1].compare("forceExtension")==0)&&(nameList.last().compare(itemNumber)==0))
     248            {
     249                itemExtension = propValue;
     250            }           
     251            ++it;
     252            ReadResponseLine(*++it, nameList, propValue);
     253            if ((nameList[1].compare("title")==0)&&(nameList.last().compare(itemNumber)==0))
     254            {
     255                itemTitle = propValue;
     256            }
     257            //make and set QPixmap       
     258            QDir dir(album->GetPath());
     259            if (!dir.exists())
     260                dir.mkdir(album->GetPath());
     261           
     262            float wmult, hmult;
     263            int screenwidth, screenheight;
     264            int xbase, ybase;
     265            gContext->GetScreenSettings(xbase, screenwidth, wmult, ybase, screenheight, hmult);
     266           
     267            //Download image
     268            QString tempFile= album->GetPath() + "/" + itemTitle;
     269            QString url = gContext->GetSetting("PHPGalleryURL")+"?g2_view=core.DownloadItem&g2_itemId="+itemName;
     270            if (!QFile::exists(tempFile) || m_refreshCache)
     271            {               
     272                if (!HttpComms::getHttpFile(tempFile, url, 20000, 3))
     273                {
     274                    VERBOSE(VB_IMPORTANT, QString("Download Image failed"));                   
     275                }
     276                VERBOSE(VB_NETWORK, QString("Downloading Image '%1'").arg(tempFile));
     277            }
     278            //Scale Image
     279            QImage image = QImage(tempFile);
     280            if (!image.isNull())
     281            {
     282                image.smoothScale(screenwidth,screenheight,QImage::ScaleMin);
     283                image.save(tempFile, "JPEG");
     284            }
     285            dialog->setSecondaryProgress(progress++);
     286        }
     287    }
     288
     289    return;
     290}
     291
     292QString PhpGalleryUtil::MakeRequest(QString cmd){
     293    QUrl url = m_startURL;
     294   
     295    // Make Request to server
     296    QByteArray  aBuffer;
     297    QTextStream os( aBuffer, IO_WriteOnly );
     298    os << "g2_controller=remote%3AGalleryRemote&protocol_version=2.11&g2_form%5Bcmd%5D=";
     299    os << cmd;
     300    QBuffer buff( aBuffer );
     301    QHttpRequestHeader header;
     302
     303    header.setValue("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,application/msword, application/x-shockwave-flash, */*" );
     304    header.setValue("Accept-Language", "en-us");
     305    header.setValue("Content-Type", "application/x-www-form-urlencoded");
     306    header.setValue("Connection", "Keep-Alive");
     307    header.setValue("Cache-Control", "no-cache");
     308
     309    QString response  = HttpComms::postHttp( url,
     310                                        &header,
     311                                        &buff,
     312                                        20000, // ms
     313                                        3,     // retries
     314                                        0,     // redirects
     315                                        false, // allow gzip
     316                                        NULL,  // login
     317                                        true );
     318    return response;
     319   
     320}
     321
     322Album::Album(QString albumName, QString albumTitle, QString albumParent){
     323    m_name = albumName;
     324    m_title = albumTitle;
     325    m_parent = albumParent;
     326}
     327
     328MythPhpDownloadProgressDialog::MythPhpDownloadProgressDialog(const QString &message, int primaryTotalSteps, int secondaryTotalSteps,
     329                                         bool cancelButton, const QObject *target, const char *slot)
     330                  : MythDialog(gContext->GetMainWindow(), "progress", false)
     331{
     332    int screenwidth, screenheight;
     333    float wmult, hmult;
     334
     335    gContext->GetScreenSettings(screenwidth, wmult, screenheight, hmult);
     336
     337    setFont(gContext->GetMediumFont());
     338
     339    gContext->ThemeWidget(this);
     340
     341    int yoff = screenheight / 3;
     342    int xoff = screenwidth / 10;
     343    setGeometry(xoff, yoff, screenwidth - xoff * 2, yoff);
     344    setFixedSize(QSize(screenwidth - xoff * 2, yoff));
     345
     346    QVBoxLayout *lay = new QVBoxLayout(this, 0);
     347
     348    QVBox *vbox = new QVBox(this);
     349    lay->addWidget(vbox);
     350
     351    vbox->setLineWidth(3);
     352    vbox->setMidLineWidth(3);
     353    vbox->setFrameShape(QFrame::Panel);
     354    vbox->setFrameShadow(QFrame::Raised);
     355    vbox->setMargin((int)(15 * wmult));
     356
     357    primarymsglabel = new QLabel(vbox);
     358    primarymsglabel->setBackgroundOrigin(ParentOrigin);
     359    primarymsglabel->setText(message);
     360    vbox->setStretchFactor(primarymsglabel, 5);
     361
     362    QHBox *hbox = new QHBox(vbox);
     363    hbox->setSpacing(5);
     364   
     365    primaryProgress = new QProgressBar(primaryTotalSteps, hbox);
     366    primaryProgress->setBackgroundOrigin(ParentOrigin);
     367   
     368    secondarymsglabel = new QLabel(vbox);
     369    secondarymsglabel->setBackgroundOrigin(ParentOrigin);
     370    vbox->setStretchFactor(secondarymsglabel, 5);
     371    QHBox *shbox = new QHBox(vbox);
     372    shbox->setSpacing(5);
     373   
     374    secondaryProgress = new QProgressBar(secondaryTotalSteps, shbox);
     375    secondaryProgress->setBackgroundOrigin(ParentOrigin);
     376   
     377    if (cancelButton && slot && target)
     378    {
     379        MythPushButton *button = new MythPushButton("Cancel", vbox, 0);
     380        button->setFocus();
     381        connect(button, SIGNAL(pressed()), target, slot);
     382    }
     383
     384    setPrimaryTotalSteps(primaryTotalSteps);
     385    setSecondaryTotalSteps(secondaryTotalSteps);
     386   
     387    if (class LCD * lcddev = LCD::Get())
     388    {
     389        textItems = new QPtrList<LCDTextItem>;
     390        textItems->setAutoDelete(true);
     391
     392        textItems->clear();
     393        textItems->append(new LCDTextItem(1, ALIGN_CENTERED, message, "Generic",
     394                          false));
     395        lcddev->switchToGeneric(textItems);
     396    }
     397    else
     398        textItems = NULL;
     399
     400    show();
     401
     402    qApp->processEvents();
     403}
     404
     405MythPhpDownloadProgressDialog::~MythPhpDownloadProgressDialog()
     406{
     407    Teardown();
     408}
     409
     410void MythPhpDownloadProgressDialog::deleteLater(void)
     411{
     412    hide();
     413    Teardown();
     414    MythDialog::deleteLater();
     415}
     416
     417void MythPhpDownloadProgressDialog::Teardown(void)
     418{
     419    if (textItems)
     420    {
     421        delete textItems;
     422        textItems = NULL;
     423    }
     424}
     425
     426void MythPhpDownloadProgressDialog::Close(void)
     427{
     428    accept();
     429
     430    LCD *lcddev = LCD::Get();
     431    if (lcddev)
     432    {
     433        lcddev->switchToNothing();
     434        lcddev->switchToTime();
     435    }
     436}
     437
     438void MythPhpDownloadProgressDialog::setPrimaryProgress(int curprogress)
     439{
     440    primaryProgress->setProgress(curprogress);
     441    if (curprogress % primarySteps == 0)
     442    {
     443        qApp->processEvents();
     444        if (LCD * lcddev = LCD::Get())
     445        {
     446            float fProgress = (float)curprogress / m_primaryTotalSteps;
     447            lcddev->setGenericProgress(fProgress);
     448        }
     449    }
     450}
     451
     452void MythPhpDownloadProgressDialog::setSecondaryProgress(int curprogress)
     453{
     454    secondaryProgress->setProgress(curprogress);
     455    if (curprogress % secondarySteps == 0)
     456    {
     457        qApp->processEvents();
     458    }
     459}
     460
     461void MythPhpDownloadProgressDialog::setPrimaryLabel(QString newlabel)
     462{
     463    primarymsglabel->setText(newlabel);
     464}
     465
     466void MythPhpDownloadProgressDialog::setSecondaryLabel(QString newlabel)
     467{
     468    secondarymsglabel->setText(newlabel);
     469}
     470
     471void MythPhpDownloadProgressDialog::keyPressEvent(QKeyEvent *e)
     472{
     473    bool handled = false;
     474    QStringList actions;
     475    if (gContext->GetMainWindow()->TranslateKeyPress("qt", e, actions))
     476    {
     477        for (unsigned int i = 0; i < actions.size() && !handled; i++)
     478        {
     479            QString action = actions[i];
     480            if (action == "ESCAPE")
     481                handled = true;
     482        }
     483    }
     484
     485    if (!handled)
     486        MythDialog::keyPressEvent(e);
     487}
     488
     489void MythPhpDownloadProgressDialog::setPrimaryTotalSteps(int totalSteps)
     490{
     491    m_primaryTotalSteps = totalSteps;
     492    primaryProgress->setTotalSteps(totalSteps);
     493    primarySteps = totalSteps / 1000;
     494    if (primarySteps == 0)
     495        primarySteps = 1;
     496}
     497
     498void MythPhpDownloadProgressDialog::setSecondaryTotalSteps(int totalSteps)
     499{
     500    m_secondaryTotalSteps = totalSteps;
     501    secondaryProgress->setTotalSteps(totalSteps);
     502    secondarySteps = totalSteps / 1000;
     503    if (secondarySteps == 0)
     504        secondarySteps = 1;
     505}
  • mythgallery/mythgallery/phpgalleryutil.h

     
     1//
     2// C++ Interface: PhpGalleryUtil
     3//
     4// Description:
     5//
     6//
     7// Author: mythtv <mythtv@jshoor-media>, (C) 2007
     8//
     9// Copyright: See COPYING file that comes with this distribution
     10//
     11//
     12
     13#include <qstringlist.h>
     14#include <qbuffer.h>
     15#include <mythtv/httpcomms.h>
     16#include <mythtv/mythdialogs.h>
     17class  MythPhpDownloadProgressDialog;
     18
     19class Album
     20{
     21public:
     22        Album(QString albumName, QString albumTitle, QString albumParent);
     23        QString GetName(){return m_name;}
     24        QString GetTitle(){return m_title;}
     25        QString GetParent(){return m_parent;}
     26        QString GetPath(){return m_path;}
     27        void SetPath(QString path){m_path = path;}
     28private:
     29        QString m_name;
     30        QString m_title;
     31        QString m_parent;
     32        QString m_path;
     33};
     34
     35
     36class PhpGalleryUtil : QObject
     37{
     38 Q_OBJECT
     39 public:
     40        PhpGalleryUtil();
     41        ~PhpGalleryUtil();
     42        void LoadAll(const QString& dir,  MythPhpDownloadProgressDialog *dialog);
     43        void GetAll(Album *album, MythPhpDownloadProgressDialog *dialog);
     44
     45        Album *GetRootAlbum(){return m_rootAlbum;}
     46        int GetAlbumCount(){return m_all_albums.count();}
     47    QString GetError() { return m_errorStr; }
     48    void Stop(){ m_stopped = true; return;}
     49
     50   
     51 private:
     52 void ReadResponseLine(QString responseLine, QStringList &nameList, QString &propValue);
     53 QString MakeRequest(QString cmd);
     54 QString BuildPath(Album *album, QString path);
     55 static QString m_startURL;
     56 static QString m_startDir;
     57 static Album *m_rootAlbum;
     58 static int m_refreshCache;
     59 static QPtrList<Album> m_all_albums;
     60 static QDict<Album>  m_temp_album_dict;
     61 static QDict<Album>  m_album_dict;
     62 static int m_progress;
     63 QString m_errorStr;
     64 bool m_stopped;
     65};
     66
     67class MPUBLIC MythPhpDownloadProgressDialog: public MythDialog
     68{
     69    Q_OBJECT
     70  public:
     71    MythPhpDownloadProgressDialog(const QString& message, int primaryTotalSteps = 0, int secondaryTotalSteps = 0,
     72                       bool cancelButton = false,
     73                       const QObject * target = NULL,
     74                       const char * slot = NULL);
     75
     76    void Close(void);
     77
     78    void setPrimaryProgress(int curprogress);
     79    void setSecondaryProgress(int curprogress);
     80   
     81    void setPrimaryLabel(QString newlabel);
     82    void setSecondaryLabel(QString newlabel);
     83   
     84    void keyPressEvent(QKeyEvent *);
     85
     86    virtual void deleteLater(void);
     87    void setSecondaryTotalSteps(int totalSteps);
     88   
     89  signals:
     90    void pressed();
     91
     92  protected:
     93    void Teardown(void);
     94    ~MythPhpDownloadProgressDialog();
     95    QProgressBar *primaryProgress;
     96    QProgressBar *secondaryProgress;
     97    QLabel *primarymsglabel;
     98    QLabel *secondarymsglabel;
     99   
     100  private:
     101    void setPrimaryTotalSteps(int totalSteps);
     102
     103    int primarySteps;
     104    int m_primaryTotalSteps;
     105    int secondarySteps;
     106    int m_secondaryTotalSteps;
     107    QPtrList<class LCDTextItem> * textItems;
     108};
     109
     110
     111
     112
     113
     114
     115
  • mythgallery/mythgallery/mythgallery.pro

     
    2929HEADERS += qtiffio.h           galleryutil.h
    3030HEADERS += constants.h
    3131HEADERS += thumbgenerator.h    thumbview.h
     32HEADERS += phpgalleryutil.h
    3233SOURCES += iconview.cpp        singleview.cpp
    3334SOURCES += imageview.cpp
    3435SOURCES += gallerysettings.cpp dbcheck.cpp
    3536SOURCES += qtiffio.cpp         galleryutil.cpp
    3637SOURCES += thumbgenerator.cpp  thumbview.cpp
     38SOURCES += phpgalleryutil.cpp
    3739SOURCES += main.cpp
    3840
    3941opengl {
  • mythgallery/mythgallery/gallerysettings.cpp

     
    3434    return gc;
    3535};
    3636
     37static HostCheckBox *MythGalleryUsePHPGallery()
     38{
     39    HostCheckBox *gc = new HostCheckBox("UsePHPGallery");
     40    gc->setLabel(QObject::tr("Use PHP Gallery"));
     41    gc->setValue(false);
     42    gc->setHelpText(QObject::tr("Check this to enable a "
     43                                "remote PHP Gallery Installation"));
     44    return gc;
     45};
     46
     47static HostLineEdit *MythGalleryPHPGalleryURL()
     48{
     49    HostLineEdit *gc = new HostLineEdit("PHPGalleryURL");
     50    gc->setLabel(QObject::tr("URL of PHP Gallery"));
     51    gc->setValue(QObject::tr("http://www.mygallery.com/gallery2/main.php"));
     52    gc->setHelpText(QObject::tr("For example: http://www.mygallery.com/gallery2/main.php"));
     53    return gc;
     54};
     55
     56static HostCheckBox *MythGalleryRefreshPHPGalleryCache()
     57{
     58        HostCheckBox *gc = new HostCheckBox("PHPGalleryRefreshCache");
     59    gc->setLabel(QObject::tr("Overwrite Existing Images"));
     60    gc->setValue(false);
     61    gc->setHelpText(QObject::tr("Overwrite existing Images. This will slow load time significantly."));
     62    return gc;
     63};
     64
    3765static HostComboBox *MythGallerySortOrder()
    3866{
    3967    HostComboBox *gc = new HostComboBox("GallerySortOrder");
     
    208236
    209237};
    210238
     239GeneralGalleryConfigurationGroup::GeneralGalleryConfigurationGroup() :
     240        TriggeredConfigurationGroup(false, true, false, false)
     241{
     242        setLabel(QObject::tr("MythGallery Settings (General)"));
     243        setUseLabel(false);
     244        addChild(MythGalleryDir());
     245        addChild(MythGalleryThumbnailLocation());
     246        addChild(MythGallerySortOrder());
     247        addChild(MythGalleryImportDirs());
     248        addChild(MythGalleryMoviePlayerCmd());
    211249
     250        HostCheckBox* usePHPGallery = MythGalleryUsePHPGallery();
     251        addChild(usePHPGallery);
     252        setTrigger(usePHPGallery);
     253
     254        ConfigurationGroup* PHPConfig = new VerticalConfigurationGroup(false);
     255        PHPConfig->addChild(MythGalleryPHPGalleryURL());
     256        PHPConfig->addChild(MythGalleryRefreshPHPGalleryCache());
     257        addTarget("1", PHPConfig);
     258        ConfigurationGroup* regularConfig = new VerticalConfigurationGroup(false);
     259        addTarget("0", regularConfig);
     260}
     261
     262
    212263GallerySettings::GallerySettings()
    213264{
    214     VerticalConfigurationGroup* general = new VerticalConfigurationGroup(false);
    215     general->setLabel(QObject::tr("MythGallery Settings (General)"));
    216     general->addChild(MythGalleryDir());
    217     general->addChild(MythGalleryThumbnailLocation());
    218     general->addChild(MythGallerySortOrder());
    219     general->addChild(MythGalleryImportDirs());
    220     general->addChild(MythGalleryMoviePlayerCmd());
    221     addChild(general);
    222265
     266    GeneralGalleryConfigurationGroup* generalConfig = new GeneralGalleryConfigurationGroup();
     267    addChild(generalConfig);
     268
    223269    GalleryConfigurationGroup* config = new GalleryConfigurationGroup();
    224270    addChild(config);
    225271}
  • mythgallery/mythgallery/iconview.cpp

     
    12181218    item = new UIListBtnTypeItem(m_submenuType, tr("Show Devices"));
    12191219    item->setData(new MenuAction(&IconView::HandleShowDevices));
    12201220
     1221    if(gContext->GetSetting("UsePHPGallery").compare("1")==0){
     1222        item = new UIListBtnTypeItem(m_submenuType, tr("Download"));
     1223        item->setData(new MenuAction(&IconView::HandleDownload));
     1224    }
     1225
    12211226    item = new UIListBtnTypeItem(m_submenuType, tr("Import"));
    12221227    item->setData(new MenuAction(&IconView::HandleImport));
    12231228
     
    14031408    }
    14041409}
    14051410
     1411void IconView::HandleDownload(void)
     1412{
     1413    DialogBox *downloadDlg = new DialogBox(
     1414        gContext->GetMainWindow(), tr("Download pictures from '%1'?").arg(gContext->GetSetting("PHPGalleryURL")));
     1415
     1416    downloadDlg->AddButton(tr("No"));
     1417    downloadDlg->AddButton(tr("Yes"));
     1418    DialogCode code = downloadDlg->exec();
     1419    downloadDlg->deleteLater();
     1420    if (kDialogCodeButton1 != code)
     1421        return;
     1422    MythBusyDialog *busy = new MythBusyDialog(
     1423        QObject::tr("Attempting to download files."));
     1424
     1425    busy->start();
     1426    m_phpGalleryUtil = new PhpGalleryUtil();   
     1427    busy->Close();
     1428    busy->deleteLater();
     1429    if (m_phpGalleryUtil->GetError().isEmpty())
     1430    {
     1431        m_dialog = new MythPhpDownloadProgressDialog(
     1432            QObject::tr("Downloading images"), m_phpGalleryUtil->GetAlbumCount(), 0, true, this, SLOT(cancelDownload()));
     1433        QPtrList<ThumbItem> mythumblist;
     1434        QTime t;
     1435        t.start();
     1436        m_phpGalleryUtil->LoadAll(gContext->GetSetting("GalleryDir"), m_dialog);
     1437        VERBOSE(VB_IMPORTANT, QString("Finished Loading Pictures in '%1' secs").arg(t.elapsed()/1000));
     1438        m_dialog->Close();
     1439        m_dialog->deleteLater();
     1440    }
     1441    else
     1442    {
     1443        DialogBox *dlg = new DialogBox(
     1444            gContext->GetMainWindow(), m_phpGalleryUtil->GetError());
     1445
     1446        dlg->AddButton(QObject::tr("Ok"));
     1447        dlg->exec();
     1448        dlg->deleteLater();
     1449        return;
     1450    }
     1451    LoadDirectory(gContext->GetSetting("GalleryDir"), true);
     1452
     1453}
     1454
    14061455void IconView::HandleShowDevices(void)
    14071456{
    14081457#ifndef _WIN32
     
    16891738        UpdateText();
    16901739    }
    16911740}
     1741
     1742void IconView::cancelDownload()
     1743{
     1744    DialogBox *downloadDlg = new DialogBox(
     1745        gContext->GetMainWindow(), tr("Are you sure you want to cancel downloading?"));
     1746
     1747    downloadDlg->AddButton(tr("No"));
     1748    downloadDlg->AddButton(tr("Yes"));
     1749    DialogCode code = downloadDlg->exec();
     1750    downloadDlg->deleteLater();
     1751    if (kDialogCodeButton1 != code)
     1752        return;
     1753    m_phpGalleryUtil->Stop();
     1754}
  • mythgallery/mythgallery/gallerysettings.h

     
    44#include "mythtv/settings.h"
    55#include "mythtv/mythcontext.h"
    66
     7class GeneralGalleryConfigurationGroup : public TriggeredConfigurationGroup
     8{
     9  public:
     10    GeneralGalleryConfigurationGroup();
     11};
     12
    713class GallerySettings : public ConfigurationWizard
    814{
    915  public: 
  • mythgallery/mythgallery/iconview.h

     
    2828
    2929// MythGallery headers
    3030#include "thumbview.h"
     31#include "phpgalleryutil.h"
    3132
    3233class XMLParse;
    3334class UIListBtnType;
     
    101102    void HandleSelectAll(void);
    102103    void HandleMkDir(void);
    103104    void HandleRename(void);
     105    void HandleDownload(void);
    104106
    105107    void HandleMenuButtonPress(void);
    106108
     
    114116    QDict<ThumbItem>    m_itemDict;
    115117    QStringList         m_itemMarked;
    116118    QString             m_galleryDir;
    117 
     119   
    118120    XMLParse           *m_theme;
    119121    QRect               m_menuRect;
    120122    QRect               m_textRect;
     
    160162    QStringList         m_paths;
    161163
    162164    QString             m_errorStr;
     165    PhpGalleryUtil              *m_phpGalleryUtil;
     166    MythPhpDownloadProgressDialog *m_dialog;
    163167
    164168    typedef void (IconView::*MenuAction)(void);
    165169
    166170  public slots:
    167171    void mediaStatusChanged(MediaStatus oldStatus, MythMediaDevice *pMedia);
     172    void cancelDownload();
    168173};
    169174
    170175