// --------------------------------------------------------------- int PackageDialog::insertDirectory(const QString& DirName, QDataStream& Stream) { QFile File; QDir myDir(DirName); // Put all files of this directory into the package. QStringList Entries = myDir.entryList("*", QDir::Files, QDir::Name); QStringList::iterator it; for(it = Entries.begin(); it != Entries.end(); ++it) { File.setName(myDir.absFilePath(*it)); Stream << Q_UINT32(CODE_FILE); if(insertFile(*it, File, Stream) < 0) return -1; } // Put all subdirectories into the package. Entries = myDir.entryList("*", QDir::Dirs, QDir::Name); Entries.pop_front(); // delete "." from list Entries.pop_front(); // delete ".." from list for(it = Entries.begin(); it != Entries.end(); ++it) { Stream << Q_UINT32(CODE_DIR) << (*it).latin1(); if(insertDirectory(myDir.absPath()+QDir::separator()+(*it), Stream) < 0) return -1; Stream << Q_UINT32(CODE_DIR_END) << Q_UINT32(0); } return 0; }
QDataStream & operator << (QDataStream & str, const Account & a) { str << a.accname << a.name << a.server << a.smtp << a.user << a.s_user << a.password << a.s_password << a.from << a.reply << a.mbox << a.speed << a.calendarFolder << a.contactsFolder << a.notesFolder << a.todoFolder << Q_UINT8(a.leave) << Q_UINT8(a.sync) << Q_UINT8(a.sorted) << Q_UINT8(a.enabled) << Q_UINT8(a.haspassword) << Q_UINT8(a.s_haspassword) << Q_UINT8(a.ssl) << Q_UINT8(a.s_ssl) << Q_UINT8(a.tls) << Q_UINT8(a.s_tls) << Q_UINT8(a.useCertificates) << Q_UINT8(a.s_useCertificates) << Q_UINT8(a.getdisabled) << Q_UINT8(a.passentered) << Q_UINT8(a.persistence) << Q_UINT8(a.groupware) << Q_UINT8(a.groupType) << Q_UINT32(a.port) << Q_UINT32(a.s_port) << Q_UINT32(a.max_dl) << Q_UINT32(a.type) << Q_UINT32(a.s_type) << Q_UINT32(a.auth) << Q_UINT32(a.s_auth) << Q_UINT32(a.max_action) ; return str; }
// --------------------------------------------------------------- int PackageDialog::insertLibraries(QDataStream& Stream) { QFile File; QDir myDir(QucsSettings.QucsHomeDir.absPath() + QDir::separator() + "user_lib"); QStringList Entries = myDir.entryList("*", QDir::Files, QDir::Name); QStringList::iterator it; for(it = Entries.begin(); it != Entries.end(); ++it) { File.setName(myDir.absFilePath(*it)); Stream << Q_UINT32(CODE_LIBRARY); if(insertFile(*it, File, Stream) < 0) return -1; } return 0; }
// --------------------------------------------------------------- void PackageDialog::slotCreate() { if(NameEdit->text().isEmpty()) { QMessageBox::critical(this, tr("Error"), tr("Please insert a package name!")); return; } QCheckBox *p; QListIterator<QCheckBox *> i(BoxList); if(!LibraryCheck->isChecked()) { int count=0; while(i.hasNext()){ p = i.next(); if(p->isChecked()) count++; } if(count < 1) { QMessageBox::critical(this, tr("Error"), tr("Please choose at least one project!")); return; } } QString s(NameEdit->text()); QFileInfo Info(s); if(Info.extension().isEmpty()) s += ".qucs"; NameEdit->setText(s); QFile PkgFile(s); if(PkgFile.exists()) if(QMessageBox::information(this, tr("Info"), tr("Output file already exists!")+"\n"+tr("Overwrite it?"), tr("&Yes"), tr("&No"), 0,1,1)) return; if(!PkgFile.open(QIODevice::ReadWrite)) { QMessageBox::critical(this, tr("Error"), tr("Cannot create package!")); return; } QDataStream Stream(&PkgFile); // First write header. char Header[HEADER_LENGTH]; memset(Header, 0, HEADER_LENGTH); strcpy(Header, "Qucs package " PACKAGE_VERSION); PkgFile.writeBlock(Header, HEADER_LENGTH); // Write project files to package. i.toFront(); while(i.hasNext()) { p = i.next(); if(p->isChecked()) { s = p->text() + "_prj"; Stream << Q_UINT32(CODE_DIR) << s.latin1(); s = QucsSettings.QucsHomeDir.absPath() + QDir::separator() + s; if(insertDirectory(s, Stream) < 0) { PkgFile.close(); PkgFile.remove(); return; } Stream << Q_UINT32(CODE_DIR_END) << Q_UINT32(0); } } // Write user libraries to package if desired. if(LibraryCheck->isChecked()) if(insertLibraries(Stream) < 0) { PkgFile.close(); PkgFile.remove(); return; } // Calculate checksum and write it to package file. PkgFile.at(0); QByteArray Content = PkgFile.readAll(); Q_UINT16 Checksum = qChecksum(Content.data(), Content.size()); PkgFile.at(HEADER_LENGTH-sizeof(Q_UINT16)); Stream << Checksum; PkgFile.close(); QMessageBox::information(this, tr("Info"), tr("Successfully created Qucs package!")); accept(); }