static void addExtension(const ExtensionInfo &info) { const QMetaObject *meta = info.generator()->metaObject(); qDebug() << meta->className(); Q_ASSERT(meta); ensureNode(meta)->infos << info; const QList<QByteArray> interfaces = info.generator()->interfaces(); for (int i = 0; i < interfaces.size(); ++i) ensureNode(interfaces.at(i))->infos << info; }
ModuleManagerImpl::ModuleManagerImpl() { ModuleManager::loadPlugins(); CryptoService *cryptoService = NULL; foreach (const ObjectGenerator *gen, ObjectGenerator::module<CryptoService>()) { if (CRYPTO_BACKEND == QLatin1String(gen->metaObject()->className())) { cryptoService = gen->generate<CryptoService>(); break; } } QList<ConfigBackend*> &configBackends = get_config_backends(); foreach (const ObjectGenerator *gen, ObjectGenerator::module<ConfigBackend>()) { const ExtensionInfo info = gen->info(); ConfigBackend *backend = info.generator()->generate<ConfigBackend>(); if (QLatin1String(backend->metaObject()->className()) == CONFIG_BACKEND) configBackends.prepend(backend); else configBackends.append(backend); } Q_ASSERT(cryptoService); Q_ASSERT(!configBackends.isEmpty()); QVector<QDir> &dirs = *system_info_dirs(); dirs[SystemInfo::ConfigDir] = QDir::home().absoluteFilePath(".config/qutim"); dirs[SystemInfo::HistoryDir] = QDir::home().absoluteFilePath(".config/qutim/history"); dirs[SystemInfo::ShareDir] = QDesktopServices::storageLocation(QDesktopServices::DataLocation); Config config = Profile::instance()->config(); if (!config.hasChildGroup("profile")) { QString user; QT_TRY { struct passwd *userInfo = getpwuid(getuid()); QTextCodec *codec = QTextCodec::codecForLocale(); user = codec->toUnicode(userInfo->pw_name); } QT_CATCH(...) { } config.beginGroup("profile"); config.setValue("name", user); config.setValue("id", user); config.setValue("crypto",cryptoService->metaObject()->className()); config.setValue("config", QLatin1String(configBackends.first()->metaObject()->className())); config.setValue("portable", false); config.setValue("configDir", SystemInfo::getPath(SystemInfo::ConfigDir)); config.setValue("historyDir", SystemInfo::getPath(SystemInfo::HistoryDir)); config.setValue("shareDir", SystemInfo::getPath(SystemInfo::ShareDir)); config.endGroup(); }
foreach (AccountCreationWizard *wizard, m_wizards) { ExtensionInfo info = wizard->info(); QIcon icon = info.icon(); if (icon.isNull()) icon = Icon(QLatin1String("im-") + info.name()); if (!icon.actualSize(QSize(1,1)).isValid()) icon = Icon("applications-internet"); QListWidgetItem *item = new QListWidgetItem(ui->protocolList); item->setData(Qt::UserRole + 1, reinterpret_cast<qptrdiff>(wizard)); item->setData(Qt::UserRole + 2, qVariantFromValue(info)); item->setIcon(icon); item->setText(info.name()); item->setData(DescriptionRole,info.description().toString()); }
QVariant AddAccountDialogWrapper::data(const QModelIndex &index, int role) const { if (index.row() < 0 || index.row() > m_wizards->size()) return QVariant(); AccountCreationWizard *wizard = m_wizards->at(index.row()); ExtensionInfo info = wizard->info(); QIcon icon = info.icon(); if (!icon.actualSize(QSize(1,1)).isValid()) icon = Icon("applications-internet"); switch (role) { case Qt::DisplayRole: return info.name().toString(); case Qt::DecorationRole: return QString(); case WizardRole: return m_wizards->indexOf(wizard); case InfoRole:{ return info.description().toString();} default: return QVariant(); } }
void ProfileCreationPage::initializePage() { m_password = wizard()->property("password").toString(); m_singleProfile = wizard()->property("singleProfile").toBool(); bool first = true; if (!m_singleProfile) { registerField("crypto", ui->cryptoBox, "currentText"); } else { ui->label_6->hide(); ui->cryptoBox->hide(); ui->cryptoDescription->hide(); } foreach (const ObjectGenerator *gen, ObjectGenerator::module<CryptoService>()) { const ExtensionInfo info = gen->info(); if (!m_singleProfile || info.generator()->metaObject()->className() == QLatin1String("Core::NoCryptoService")) { ui->cryptoBox->addItem(info.icon(), info.name(), qVariantFromValue(info)); if (first) { ui->cryptoBox->setCurrentIndex(0); ui->cryptoDescription->setText(info.description()); first = false; } } } Q_ASSERT_X(ui->cryptoBox->count() > 0, "ProfileCreationPage::initializePage", "Have not been found any crypto plugin"); first = true; foreach (const ObjectGenerator *gen, ObjectGenerator::module<ConfigBackend>()) { const ExtensionInfo info = gen->info(); ui->configBox->addItem(info.icon(), info.name(), qVariantFromValue(info)); if (first) { ui->configBox->setCurrentIndex(0); ui->configDescription->setText(info.description()); first = false; } } Q_ASSERT_X(ui->cryptoBox->count() > 0, "ProfileCreationPage::initializePage", "Have not been found any config plugin"); rebaseDirs(); }
void ProfileCreationPage::on_configBox_currentIndexChanged(int index) { ExtensionInfo info = ui->configBox->itemData(index).value<ExtensionInfo>(); ui->configDescription->setText(info.description()); }
bool ProfileCreationPage::validatePage() { //FIXME Elessar, WTF? why the generators are run on several times? if (m_is_valid) return true; //dummy QString str; if (!createDirs(str)) { QMessageBox::warning(this, tr("Error"), tr("Unable to create directory %1. " "Maybe you are trying to create a directory " "in a protected system directory").arg(str)); return false; } QVector<QDir> &systemDirs = *system_info_dirs(); systemDirs[SystemInfo::ConfigDir] = QDir::cleanPath(ui->configEdit->text()); systemDirs[SystemInfo::HistoryDir] = QDir::cleanPath(ui->historyEdit->text()); systemDirs[SystemInfo::ShareDir] = QDir::cleanPath(ui->dataEdit->text()); QFile file(SystemInfo::getDir(SystemInfo::ConfigDir).absoluteFilePath("profilehash")); if (file.exists()) { int ret = QMessageBox::question(this, tr("Warning"), tr("Profile already exists, overwrite?"), QMessageBox::Yes, QMessageBox::No); if(ret != QMessageBox::Yes) return false; } if(!file.open(QIODevice::WriteOnly)) { QMessageBox::warning(this,tr("Warning"),tr("Unable to create profile hash")); return false; } ExtensionInfo info = ui->cryptoBox->itemData(ui->cryptoBox->currentIndex()).value<ExtensionInfo>(); CryptoService *service = info.generator()->generate<CryptoService>(); QByteArray data; QVariant serviceData = service->generateData(ui->idEdit->text()); m_cryptoName = service->metaObject()->className(); { QDataStream out(&data, QIODevice::WriteOnly); // We shouldn't store password as is QByteArray passwordHash = QCryptographicHash::hash(m_password.toUtf8() + "5667dd05fbe97bb238711a3af63", QCryptographicHash::Sha1); out << ui->idEdit->text() << passwordHash << m_cryptoName; } service->setPassword(m_password, serviceData); QVariant hash = service->crypt(data); file.write(hash.toByteArray()); file.flush(); file.close(); m_password.clear(); info = ui->configBox->itemData(ui->configBox->currentIndex()).value<ExtensionInfo>(); QList<ConfigBackend*> &configBackends = get_config_backends(); debug() << configBackends.count(); for (int i = 0; i < ui->configBox->count(); i++) { ExtensionInfo extInfo = ui->configBox->itemData(i).value<ExtensionInfo>(); ConfigBackend *backend = extInfo.generator()->generate<ConfigBackend>(); if (i == ui->configBox->currentIndex()) configBackends.prepend(backend); else configBackends.append(backend); } debugClearConfig(); m_is_valid = true; return true; }
void* ExtensionInfo_DataCopy( void* extensionInfo, void* source, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) { ExtensionInfo* self = (ExtensionInfo*)extensionInfo; return self->_dataCopy( self, source, dest, deep, nameExt, ptrMap ); }
bool ExtensionInfo::operator<= ( const ExtensionInfo& rhs ) const { return name().toLower() <= rhs.name().toLower(); }
bool ExtensionInfo::operator==( const ExtensionInfo& rhs) const { return configFile() == rhs.configFile(); }