void Folder::slotNewBigFolderDiscovered(const QString &newF) { auto newFolder = newF; if (!newFolder.endsWith(QLatin1Char('/'))) { newFolder += QLatin1Char('/'); } auto journal = journalDb(); // Add the entry to the blacklist if it is neither in the blacklist or whitelist already auto blacklist = journal->getSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList); auto whitelist = journal->getSelectiveSyncList(SyncJournalDb::SelectiveSyncWhiteList); if (!blacklist.contains(newFolder) && !whitelist.contains(newFolder)) { blacklist.append(newFolder); journal->setSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, blacklist); } // And add the entry to the undecided list and signal the UI auto undecidedList = journal->getSelectiveSyncList(SyncJournalDb::SelectiveSyncUndecidedList); if (!undecidedList.contains(newFolder)) { undecidedList.append(newFolder); journal->setSelectiveSyncList(SyncJournalDb::SelectiveSyncUndecidedList, undecidedList); emit newBigFolderDiscovered(newFolder); } QString message = tr("A new folder larger than %1 MB has been added: %2.\n" "Please go in the settings to select it if you wish to download it.") .arg(ConfigFile().newBigFolderSizeLimit().second).arg(newF); auto logger = Logger::instance(); logger->postOptionalGuiLog(Theme::instance()->appNameGUI(), message); }
void IssuesWidget::retryInsufficentRemoteStorageErrors(const QString &folderAlias) { auto folderman = FolderMan::instance(); auto folder = folderman->folder(folderAlias); if (!folder) return; folder->journalDb()->wipeErrorBlacklistCategory(SyncJournalErrorBlacklistRecord::InsufficientRemoteStorage); folderman->scheduleFolderNext(folder); }
// Method executed when the user ends has finished the basic setup. void OwncloudSetupWizard::slotAssistantFinished( int result ) { FolderMan *folderMan = FolderMan::instance(); if( result == QDialog::Rejected ) { qDebug() << "Rejected the new config, use the old!"; } else if( result == QDialog::Accepted ) { // This may or may not wipe all folder definitions, depending // on whether a new account is activated or the existing one // is changed. auto account = applyAccountChanges(); QString localFolder = QDir::fromNativeSeparators(_ocWizard->localFolder()); if( !localFolder.endsWith(QLatin1Char('/'))) { localFolder.append(QLatin1Char('/')); } bool startFromScratch = _ocWizard->field("OCSyncFromScratch").toBool(); if (!startFromScratch || ensureStartFromScratch(localFolder)) { qDebug() << "Adding folder definition for" << localFolder << _remoteFolder; FolderDefinition folderDefinition; auto alias = Theme::instance()->appName(); int count = 0; folderDefinition.alias = alias; while (folderMan->folder(folderDefinition.alias)) { // There is already a folder configured with this name and folder names need to be unique folderDefinition.alias = alias + QString::number(++count); } folderDefinition.localPath = localFolder; folderDefinition.targetPath = _remoteFolder; auto f = folderMan->addFolder(account, folderDefinition); if (f) { f->journalDb()->setSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, _ocWizard->selectiveSyncBlacklist()); } _ocWizard->appendToConfigurationLog(tr("<font color=\"green\"><b>Local sync folder %1 successfully created!</b></font>").arg(localFolder)); } } // notify others. emit ownCloudWizardDone( result ); }
void Folder::slotSyncFinished(bool success) { qDebug() << " - client version" << qPrintable(Theme::instance()->version()) << " Qt" << qVersion() #if QT_VERSION >= QT_VERSION_CHECK(5,0,0) << " SSL " << QSslSocket::sslLibraryVersionString().toUtf8().data() #endif ; if( _csyncError ) { qDebug() << "-> SyncEngine finished with ERROR, warn count is" << _syncResult.warnCount(); } else { qDebug() << "-> SyncEngine finished without problem."; } bubbleUpSyncResult(); bool anotherSyncNeeded = false; if (_engine) { anotherSyncNeeded = _engine->isAnotherSyncNeeded(); _engine.reset(0); } // _watcher->setEventsEnabledDelayed(2000); // This is for sync state calculation _stateLastSyncItemsWithError = _stateLastSyncItemsWithErrorNew; _stateLastSyncItemsWithErrorNew.clear(); _stateTaintedFolders.clear(); // heuristic: assume the sync had been done, new file watches needed to taint dirs if (_csyncError) { _syncResult.setStatus(SyncResult::Error); qDebug() << " ** error Strings: " << _errors; _syncResult.setErrorStrings( _errors ); qDebug() << " * owncloud csync thread finished with error"; } else if (_csyncUnavail) { _syncResult.setStatus(SyncResult::Error); qDebug() << " ** csync not available."; } else if( _syncResult.warnCount() > 0 ) { // there have been warnings on the way. _syncResult.setStatus(SyncResult::Problem); } else { _syncResult.setStatus(SyncResult::Success); } // Count the number of syncs that have failed in a row. if (_syncResult.status() == SyncResult::Success || _syncResult.status() == SyncResult::Problem) { _consecutiveFailingSyncs = 0; } else { _consecutiveFailingSyncs++; qDebug() << "the last" << _consecutiveFailingSyncs << "syncs failed"; } if (_syncResult.status() == SyncResult::Success && success) { // Clear the white list as all the folders that should be on that list are sync-ed journalDb()->setSelectiveSyncList(SyncJournalDb::SelectiveSyncWhiteList, QStringList()); } emit syncStateChange(); // The syncFinished result that is to be triggered here makes the folderman // clear the current running sync folder marker. // Lets wait a bit to do that because, as long as this marker is not cleared, // file system change notifications are ignored for that folder. And it takes // some time under certain conditions to make the file system notifications // all come in. QTimer::singleShot(200, this, SLOT(slotEmitFinishedDelayed() )); _lastSyncDuration = _timeSinceLastSyncStart.elapsed(); _timeSinceLastSyncDone.restart(); // Increment the follow-up sync counter if necessary. if (anotherSyncNeeded) { _consecutiveFollowUpSyncs++; qDebug() << "another sync was requested by the finished sync, this has" << "happened" << _consecutiveFollowUpSyncs << "times"; } else { _consecutiveFollowUpSyncs = 0; } // Maybe force a follow-up sync to take place, but only a couple of times. if (anotherSyncNeeded && _consecutiveFollowUpSyncs <= 3) { _forceSyncOnPollTimeout = true; // We will make sure that the poll timer occurs soon enough. // delay 1s, 4s, 9s int c = _consecutiveFollowUpSyncs; QTimer::singleShot(c*c * 1000, this, SLOT(slotRunEtagJob() )); } }