Пример #1
0
// ---------------------------------------------------------------
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;
}
Пример #2
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;
}
Пример #3
0
// ---------------------------------------------------------------
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;
}
Пример #4
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();
}