Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <QtCore/QCoreApplication>
- #include <QProcess>
- #include <iostream>
- #include <QFile>
- #include <QTemporaryFile>
- #include <QTextStream>
- bool runProcess( QString file, QString name)
- {
- QProcess *scheduler = new QProcess();
- scheduler->setProcessChannelMode(QProcess::ForwardedChannels);
- QStringList args;
- args << "/Create";
- args << "/XML" << file;
- args << "/TN" << name;
- std::cout << "Creating task: " << name.toStdString() << std::endl;
- scheduler->start("schtasks", args);
- scheduler->waitForFinished();
- return scheduler->exitCode() == 0;
- }
- enum ParseState { eScan, eWrite, eCommit };
- // Importing tasks from xml (not really) dump made by schtasks
- int main(int argc, char *argv[])
- {
- QCoreApplication a(argc, argv);
- int count = 0, total = 0;
- // open file
- QString filename;
- std::string fn;
- if(argc < 2)
- {
- std::cout << "Enter name of file, containing schtasks dump: ";
- std::cin >> fn;
- filename= QString::fromStdString(fn);
- }
- else
- {
- filename = argv[1];
- }
- QFile inputFile(filename);
- if (!inputFile.open(QIODevice::ReadOnly | QIODevice::Text))
- {
- std::cout << "Cannot open file: " << inputFile.fileName().toStdString() << std::endl;
- return -1;
- }
- std::cout << "Importing from file: " << inputFile.fileName().toStdString() << std::endl;
- // create Temporary file
- QTemporaryFile *tmpFile;
- enum ParseState state = eScan;
- QRegExp rxName("<!--([^#]+)-->");
- QString taskName, tmpFileName;
- bool error = false;
- while (!inputFile.atEnd() && !error)
- {
- QByteArray line = inputFile.readLine();
- switch(state)
- {
- case eScan:
- if ( rxName.indexIn(line) != -1)//(line.contains("<!--"))
- {
- taskName = rxName.cap(1).trimmed();
- std::cout << "Task: " << taskName.toStdString() << std::endl;
- tmpFile = new QTemporaryFile;
- tmpFile->setAutoRemove(false);
- if(!tmpFile->open())
- {
- std::cout << "Cannot create temporary file\n ";
- }
- else
- {
- state = eWrite;
- }
- }
- break;
- case eWrite:
- tmpFile->write(line);
- if(line.contains("</Task>"))
- {
- tmpFile->flush();
- state = eCommit;
- }
- break;
- case eCommit:
- //tmpFile->close();
- tmpFileName =tmpFile->fileName();
- delete tmpFile;
- count += (runProcess(tmpFileName,taskName))? 1 : 0;
- total++;
- QFile::remove(tmpFileName);
- state = eScan;
- break;
- }
- }
- if(!error && (state != eScan))
- {
- std::cout << "Unexpected end of file: " << std::endl;
- return -1;
- }
- std::cout << "Tasks created: " << count << " out of " << total;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement