void AddCollectionTask::doStart(KIMAP::Session *session) { if (parentCollection().remoteId().isEmpty()) { qCWarning(IMAPRESOURCE_LOG) << "Parent collection has no remote id, aborting." << collection().name() << parentCollection().name(); emitError(i18n("Cannot add IMAP folder '%1' for a non-existing parent folder '%2'.", collection().name(), parentCollection().name())); changeProcessed(); return; } const QChar separator = separatorCharacter(); m_pendingJobs = 0; m_session = session; m_collection = collection(); m_collection.setName(m_collection.name().replace(separator, QString())); m_collection.setRemoteId(separator + m_collection.name()); QString newMailBox = mailBoxForCollection(parentCollection()); if (!newMailBox.isEmpty()) { newMailBox += separator; } newMailBox += m_collection.name(); qCDebug(IMAPRESOURCE_LOG) << "New folder: " << newMailBox; KIMAP::CreateJob *job = new KIMAP::CreateJob(session); job->setMailBox(newMailBox); connect(job, &KIMAP::CreateJob::result, this, &AddCollectionTask::onCreateDone); job->start(); }
int TKAction::plug(QWidget* widget, int index) { if ( widget->inherits("KToolBar") ) { KToolBar* bar = static_cast<KToolBar*>(widget); int id_ = KAction::getToolButtonID(); KInstance *instance; if ( parentCollection() ) instance = parentCollection()->instance(); else instance = KGlobal::instance(); TKToolBarButton* b = new TKToolBarButton(icon(),plainText(),bar,name(),instance); // we don't need clicked() and buttonClicked(), do we? // connect(b,SIGNAL(clicked()),SLOT(slotActivated())); b->setIconMode(m_imode); initToolBarButton(b); bar->insertWidget( id_, 100, b, index ); addContainer(bar,id_); connect( bar, SIGNAL(destroyed()), this, SLOT(slotDestroyed()) ); return containerCount() - 1; } return KAction::plug(widget,index); }
const QChar ResourceTask::separatorCharacter() const { const QChar separator = m_resource->separatorCharacter(); if (!separator.isNull()) { return separator; } else { //If we request the separator before first folder listing, then try to guess //the separator: //If we create a toplevel folder, assume the separator to be '/'. This is not perfect, but detecting the right //IMAP separator is not straightforward for toplevel folders, and fixes bug 292418 and maybe other, where //subfolders end up with remote id's starting with "i" (the first letter of imap:// ...) QString remoteId; // We don't always have parent collection set (for example for CollectionChangeTask), // in such cases however we can use current collection's remoteId to get the separator const Akonadi::Collection parent = parentCollection(); if (parent.isValid()) { remoteId = parent.remoteId(); } else { remoteId = collection().remoteId(); } return ((remoteId != rootRemoteId()) && !remoteId.isEmpty()) ? remoteId.at(0) : QLatin1Char('/'); } }