This action will force synchronization from 陈炳煌/sqlitebrowser, which will overwrite any changes that you have made since you forked the repository, and can not be recovered!!!
Synchronous operation will process in the background and will refresh the page when finishing processing. Please be patient.
#include <QDesktopServices>#include <QFileInfo>#include <QUrl>#include "RemoteDock.h"#include "ui_RemoteDock.h"#include "Settings.h"#include "RemoteDatabase.h"#include "RemoteModel.h"#include "MainWindow.h"#include "RemotePushDialog.h"#include "PreferencesDialog.h"RemoteDock::RemoteDock(MainWindow* parent): QDialog(parent),ui(new Ui::RemoteDock),mainWindow(parent),remoteDatabase(parent->getRemote()),remoteModel(new RemoteModel(this, parent->getRemote())){ui->setupUi(this);// Set up modelui->treeStructure->setModel(remoteModel);// Reload the directory tree when a database upload has finishedconnect(&remoteDatabase, &RemoteDatabase::uploadFinished, this, &RemoteDock::setNewIdentity);// Whenever a new directory listing has been parsed, check if it was a new root dir and, if so, open the user's directoryconnect(remoteModel, &RemoteModel::directoryListingParsed, this, &RemoteDock::newDirectoryNode);// When the Preferences link is clicked in the no-certificates-label, open the preferences dialog. For other links than the ones we know,// just open them in a web browserconnect(ui->labelNoCert, &QLabel::linkActivated, [this](const QString& link) {if(link == "#preferences"){PreferencesDialog dialog(mainWindow, PreferencesDialog::TabRemote);if(dialog.exec())mainWindow->reloadSettings();} else {QDesktopServices::openUrl(QUrl(link));}});// Initial setupreloadSettings();}RemoteDock::~RemoteDock(){delete ui;}void RemoteDock::reloadSettings(){// Load list of client certsui->comboUser->clear();QStringList client_certs = Settings::getValue("remote", "client_certificates").toStringList();for(const QString& file : client_certs){auto certs = QSslCertificate::fromPath(file);for(const QSslCertificate& cert : certs)ui->comboUser->addItem(cert.subjectInfo(QSslCertificate::CommonName).at(0), file);}// Add public certificate for anonymous read-only access to dbhub.ioui->comboUser->addItem(tr("Public"), ":/user_certs/public.cert.pem");}void RemoteDock::setNewIdentity(){// Get identityQString identity = ui->comboUser->currentText();if(identity.isEmpty())return;// Get certificate file nameQString cert = ui->comboUser->itemData(ui->comboUser->findText(identity), Qt::UserRole).toString();if(cert.isEmpty())return;// Open root directory. Get host name from client certQString host = remoteDatabase.getInfoFromClientCert(cert, RemoteDatabase::CertInfoServer);remoteModel->setNewRootDir(QString("https://%1:5550/").arg(host), cert);// Enable buttons if necessaryenableButtons();}void RemoteDock::fetchDatabase(const QModelIndex& idx){if(!idx.isValid())return;// Get itemconst RemoteModelItem* item = remoteModel->modelIndexToItem(idx);// Only open database fileif(item->value(RemoteModelColumnType).toString() == "database")remoteDatabase.fetch(item->value(RemoteModelColumnUrl).toString(), RemoteDatabase::RequestTypeDatabase, remoteModel->currentClientCertificate());}void RemoteDock::enableButtons(){bool db_opened = mainWindow->getDb().isOpen();bool logged_in = !remoteModel->currentClientCertificate().isEmpty();ui->buttonPushDatabase->setEnabled(db_opened && logged_in);}void RemoteDock::pushDatabase(){// If the currently active identity is the read-only public access to dbhub.io, don't show the Push Database dialog because it won't work anyway.// Instead switch to an explanation offering some advice to create and import a proper certificate.if(remoteModel->currentClientCertificate() == ":/user_certs/public.cert.pem"){ui->stack->setCurrentIndex(1);return;}// The default suggestion for a database name is the local file name. If it is a remote file (like when it initially was fetched using DB4S),// the extra bit of information at the end of the name gets removed first.QString name = QFileInfo(mainWindow->getDb().currentFile()).fileName();name = name.remove(QRegExp("_[0-9]+.remotedb$"));// Show the user a dialog for setting all the commit detailsQString host = QString("https://%1:5550/").arg(remoteDatabase.getInfoFromClientCert(remoteModel->currentClientCertificate(), RemoteDatabase::CertInfoServer));RemotePushDialog pushDialog(this, remoteDatabase, host, remoteModel->currentClientCertificate(), name);if(pushDialog.exec() != QDialog::Accepted)return;// Build push URLQString url = host;url.append(remoteDatabase.getInfoFromClientCert(remoteModel->currentClientCertificate(), RemoteDatabase::CertInfoUser));url.append("/");url.append(pushDialog.name());// Push databaseremoteDatabase.push(mainWindow->getDb().currentFile(), url, remoteModel->currentClientCertificate(), pushDialog.name(),pushDialog.commitMessage(), pushDialog.licence(), pushDialog.isPublic(), pushDialog.branch(), pushDialog.forcePush());}void RemoteDock::newDirectoryNode(const QModelIndex& parent){// Was this a new root dir?if(!parent.isValid()){// Then check if there is a directory with the current user name// Get current user nameQString user = remoteDatabase.getInfoFromClientCert(remoteModel->currentClientCertificate(), RemoteDatabase::CertInfoUser);for(int i=0;i<remoteModel->rowCount(parent);i++){QModelIndex child = remoteModel->index(i, RemoteModelColumnName, parent);if(child.data().toString() == user)ui->treeStructure->expand(child);}}}void RemoteDock::reject(){// We override this, to ensure the Escape key doesn't make this dialog// dock go awayreturn;}void RemoteDock::switchToMainView(){ui->stack->setCurrentIndex(0);}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。