/* * Retroshare Photo Plugin. * * Copyright 2012-2012 by Robert Fernie. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License Version 2.1 as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA. * * Please report all bugs and problems to "retroshare@lunamutt.com". * */ #include "WireDialog.h" #include #include #include #include #include /****** * #define PHOTO_DEBUG 1 *****/ /**************************************************************** * New Photo Display Widget. * * This has two 'lists'. * Top list shows Albums. * Lower list is photos from the selected Album. * * Notes: * Each Item will be an AlbumItem, which contains a thumbnail & random details. * We will limit Items to < 100. With a 'Filter to see more message. * * Thumbnails will come from Service. * Option to Share albums / pictures onward (if permissions allow). * Option to Download the albums to a specified directory. (is this required if sharing an album?) * * Will introduce a FullScreen SlideShow later... first get basics happening. */ /** Constructor */ WireDialog::WireDialog(QWidget *parent) : MainPage(parent) { ui.setupUi(this); mAddDialog = NULL; mPulseSelected = NULL; connect( ui.pushButton_Post, SIGNAL(clicked()), this, SLOT(OpenOrShowPulseAddDialog())); //connect( ui.pushButton_Accounts, SIGNAL(clicked()), this, SLOT(OpenOrShowAccountDialog())); QTimer *timer = new QTimer(this); timer->connect(timer, SIGNAL(timeout()), this, SLOT(checkUpdate())); timer->start(1000); } void WireDialog::notifySelection(PulseItem *item, int ptype) { std::cerr << "WireDialog::notifySelection() from : " << ptype << " " << item; std::cerr << std::endl; notifyPulseSelection(item); #if 0 switch(ptype) { default: case PHOTO_ITEM_TYPE_ALBUM: notifyAlbumSelection(item); break; case PHOTO_ITEM_TYPE_PHOTO: notifyPhotoSelection(item); break; } #endif } void WireDialog::notifyPulseSelection(PulseItem *item) { std::cerr << "WireDialog::notifyPulseSelection() from : " << item; std::cerr << std::endl; if (mPulseSelected) { std::cerr << "WireDialog::notifyPulseSelection() unselecting old one : " << mPulseSelected; std::cerr << std::endl; mPulseSelected->setSelected(false); } mPulseSelected = item; } void WireDialog::checkUpdate() { #if 0 /* update */ if (!rsWire) return; if (rsWire->updated()) { insertAlbums(); } #endif return; } /*************** New Photo Dialog ***************/ void WireDialog::OpenOrShowPulseAddDialog() { if (mAddDialog) { mAddDialog->show(); } else { mAddDialog = new PulseAddDialog(NULL); mAddDialog->show(); } } bool WireDialog::matchesAlbumFilter(const RsPhotoAlbum &album) { return true; } double WireDialog::AlbumScore(const RsPhotoAlbum &album) { return 1; } bool WireDialog::matchesPhotoFilter(const RsPhotoPhoto &photo) { return true; } double WireDialog::PhotoScore(const RsPhotoPhoto &photo) { return 1; } bool WireDialog::FilterNSortAlbums(const std::list &albumIds, std::list &filteredAlbumIds, int count) { #if 0 std::multimap sortedAlbums; std::multimap::iterator sit; std::list::const_iterator it; for(it = albumIds.begin(); it != albumIds.end(); it++) { RsPhotoAlbum album; rsPhoto->getAlbum(*it, album); if (matchesAlbumFilter(album)) { double score = AlbumScore(album); sortedAlbums.insert(std::make_pair(score, *it)); } } int i; for (sit = sortedAlbums.begin(), i = 0; (sit != sortedAlbums.end()) && (i < count); sit++, i++) { filteredAlbumIds.push_back(sit->second); } #endif return true; } bool WireDialog::FilterNSortPhotos(const std::list &photoIds, std::list &filteredPhotoIds, int count) { #if 0 std::multimap sortedPhotos; std::multimap::iterator sit; std::list::const_iterator it; int i = 0; for(it = photoIds.begin(); it != photoIds.end(); it++, i++) { RsPhotoPhoto photo; rsPhoto->getPhoto(*it, photo); if (matchesPhotoFilter(photo)) { double score = i; //PhotoScore(album); sortedPhotos.insert(std::make_pair(score, *it)); } } for (sit = sortedPhotos.begin(), i = 0; (sit != sortedPhotos.end()) && (i < count); sit++, i++) { filteredPhotoIds.push_back(sit->second); } #endif return true; } void WireDialog::insertAlbums() { #if 0 /* clear it all */ clearAlbums(); //ui.albumLayout->clear(); /* create a list of albums */ std::list albumIds; std::list filteredAlbumIds; std::list::iterator it; rsPhoto->getAlbumList(albumIds); /* Filter Albums */ /* Sort Albums */ #define MAX_ALBUMS 50 int count = MAX_ALBUMS; FilterNSortAlbums(albumIds, filteredAlbumIds, count); for(it = filteredAlbumIds.begin(); it != filteredAlbumIds.end(); it++) { addAlbum(*it); } insertPhotosForAlbum(filteredAlbumIds); #endif } void WireDialog::insertPhotosForSelectedAlbum() { #if 0 std::cerr << "WireDialog::insertPhotosForSelectedAlbum()"; std::cerr << std::endl; clearPhotos(); std::list albumIds; if (mAlbumSelected) { albumIds.push_back(mAlbumSelected->mDetails.mAlbumId); std::cerr << "WireDialog::insertPhotosForSelectedAlbum() AlbumId: " << mAlbumSelected->mDetails.mAlbumId; std::cerr << std::endl; } insertPhotosForAlbum(albumIds); #endif } void WireDialog::addAlbum(const std::string &id) { #if 0 RsPhotoAlbum album; rsPhoto->getAlbum(id, album); RsPhotoThumbnail thumbnail; rsPhoto->getAlbumThumbnail(id, thumbnail); std::cerr << " WireDialog::addAlbum() AlbumId: " << album.mAlbumId << std::endl; PulseItem *item = new PulseItem(this, album, thumbnail); QLayout *alayout = ui.scrollAreaWidgetContents->layout(); alayout->addWidget(item); #endif } void WireDialog::clearAlbums() { #if 0 std::cerr << "WireDialog::clearAlbums()" << std::endl; std::list photoItems; std::list::iterator pit; QLayout *alayout = ui.scrollAreaWidgetContents->layout(); int count = alayout->count(); for(int i = 0; i < count; i++) { QLayoutItem *litem = alayout->itemAt(i); if (!litem) { std::cerr << "WireDialog::clearAlbums() missing litem"; std::cerr << std::endl; continue; } PulseItem *item = dynamic_cast(litem->widget()); if (item) { std::cerr << "WireDialog::clearAlbums() item: " << item; std::cerr << std::endl; photoItems.push_back(item); } else { std::cerr << "WireDialog::clearAlbums() Found Child, which is not a PulseItem???"; std::cerr << std::endl; } } for(pit = photoItems.begin(); pit != photoItems.end(); pit++) { PulseItem *item = *pit; alayout->removeWidget(item); delete item; } mAlbumSelected = NULL; #endif } void WireDialog::clearPhotos() { #if 0 std::cerr << "WireDialog::clearPhotos()" << std::endl; std::list photoItems; std::list::iterator pit; QLayout *alayout = ui.scrollAreaWidgetContents_2->layout(); int count = alayout->count(); for(int i = 0; i < count; i++) { QLayoutItem *litem = alayout->itemAt(i); if (!litem) { std::cerr << "WireDialog::clearPhotos() missing litem"; std::cerr << std::endl; continue; } PulseItem *item = dynamic_cast(litem->widget()); if (item) { std::cerr << "WireDialog::clearPhotos() item: " << item; std::cerr << std::endl; photoItems.push_back(item); } else { std::cerr << "WireDialog::clearPhotos() Found Child, which is not a PulseItem???"; std::cerr << std::endl; } } for(pit = photoItems.begin(); pit != photoItems.end(); pit++) { PulseItem *item = *pit; alayout->removeWidget(item); delete item; } mPhotoSelected = NULL; #endif } void WireDialog::insertPhotosForAlbum(const std::list &albumIds) { #if 0 /* clear it all */ clearPhotos(); //ui.photoLayout->clear(); /* create a list of albums */ std::list ids; std::list photoIds; std::list filteredPhotoIds; std::list::const_iterator it; for(it = albumIds.begin(); it != albumIds.end(); it++) { rsPhoto->getPhotoList(*it, photoIds); } /* Filter Albums */ /* Sort Albums */ #define MAX_PHOTOS 50 int count = MAX_PHOTOS; FilterNSortPhotos(photoIds, filteredPhotoIds, MAX_PHOTOS); for(it = filteredPhotoIds.begin(); it != filteredPhotoIds.end(); it++) { addPhoto(*it); } #endif } void WireDialog::addPhoto(const std::string &id) { #if 0 RsPhotoPhoto photo; rsPhoto->getPhoto(id,photo); RsPhotoThumbnail thumbnail; rsPhoto->getPhotoThumbnail(id, thumbnail); std::cerr << "WireDialog::addPhoto() AlbumId: " << photo.mAlbumId; std::cerr << " PhotoId: " << photo.mId; std::cerr << std::endl; PulseItem *item = new PulseItem(this, photo, thumbnail); QLayout *alayout = ui.scrollAreaWidgetContents_2->layout(); alayout->addWidget(item); #endif } void WireDialog::deletePulseItem(PulseItem *item, uint32_t type) { return; }