bool KNotify::notifyBySound(const QString &sound, const QString &appname, int eventId) { if(sound.isEmpty()) { soundFinished(eventId, NoSoundFile); return false; } bool external = d->useExternal && !d->externalPlayer.isEmpty(); // get file name QString soundFile(sound); if(QFileInfo(sound).isRelative()) { QString search = QString("%1/sounds/%2").arg(appname).arg(sound); soundFile = KGlobal::instance()->dirs()->findResource("data", search); if(soundFile.isEmpty()) soundFile = locate("sound", sound); } if(soundFile.isEmpty()) { soundFinished(eventId, NoSoundFile); return false; } // kdDebug() << "KNotify::notifyBySound - trying to play file " << soundFile << endl; if(!external) { #ifdef WITH_PULSEAUDIO d->pulsePlayer.play(soundFile.utf8()); return true; #else soundFinished(eventId, NoSoundSupport); return false; #endif } else if(!d->externalPlayer.isEmpty()) { // use an external player to play the sound KProcess *proc = d->externalPlayerProc; if(!proc) { proc = d->externalPlayerProc = new KProcess; connect(proc, SIGNAL(processExited(KProcess *)), SLOT(slotPlayerProcessExited(KProcess *))); } if(proc->isRunning()) { soundFinished(eventId, PlayerBusy); return false; // Skip } proc->clearArguments(); (*proc) << d->externalPlayer << QFile::encodeName(soundFile); d->externalPlayerEventId = eventId; proc->start(KProcess::NotifyOnExit); return true; } soundFinished(eventId, Unknown); return false; }
void ZooArch::remove( QStringList *list ) { if (!list) return; KProcess *kp = m_currentProcess = new KProcess; kp->clearArguments(); *kp << m_archiver_program << "D" << m_filename; QStringList::Iterator it; for ( it = list->begin(); it != list->end(); ++it ) { QString str = *it; *kp << str; } connect( kp, SIGNAL( receivedStdout(KProcess*, char*, int) ), SLOT( slotReceivedOutput(KProcess*, char*, int) ) ); connect( kp, SIGNAL( receivedStderr(KProcess*, char*, int) ), SLOT( slotReceivedOutput(KProcess*, char*, int) ) ); connect( kp, SIGNAL( processExited(KProcess*) ), SLOT( slotDeleteExited(KProcess*) ) ); if ( !kp->start( KProcess::NotifyOnExit, KProcess::AllOutput ) ) { KMessageBox::error( 0, i18n( "Could not start a subprocess." ) ); emit sigDelete( false ); } }
void SevenZipArch::addFile( const QStringList & urls ) { KProcess *kp = m_currentProcess = new KProcess; kp->clearArguments(); *kp << m_archiver_program << "a" ; KURL url( urls.first() ); QDir::setCurrent( url.directory() ); *kp << m_filename; QStringList::ConstIterator iter; for ( iter = urls.begin(); iter != urls.end(); ++iter ) { KURL url( *iter ); *kp << url.fileName(); } connect( kp, SIGNAL( receivedStdout(KProcess*, char*, int) ), SLOT( slotReceivedOutput(KProcess*, char*, int) ) ); connect( kp, SIGNAL( receivedStderr(KProcess*, char*, int) ), SLOT( slotReceivedOutput(KProcess*, char*, int) ) ); connect( kp, SIGNAL( processExited(KProcess*) ), SLOT( slotAddExited(KProcess*) ) ); if ( !kp->start( KProcess::NotifyOnExit, KProcess::AllOutput ) ) { KMessageBox::error( 0, i18n( "Could not start a subprocess." ) ); emit sigAdd( false ); } }
void ZooArch::unarchFileInternal() { // if _fileList is empty, we extract all. // if _destDir is empty, abort with error. if ( m_destDir.isEmpty() || m_destDir.isNull() ) { kdError( 1601 ) << "There was no extract directory given." << endl; return; } // zoo has no option to specify the destination directory // so we have to change to it. bool ret = QDir::setCurrent( m_destDir ); // We already checked the validity of the dir before coming here Q_ASSERT(ret); KProcess *kp = m_currentProcess = new KProcess; kp->clearArguments(); *kp << m_archiver_program; if ( ArkSettings::extractOverwrite() ) { *kp << "xOOS"; } else { *kp << "x"; } *kp << m_filename; // if the list is empty, no filenames go on the command line, // and we then extract everything in the archive. if (m_fileList) { QStringList::Iterator it; for ( it = m_fileList->begin(); it != m_fileList->end(); ++it ) { *kp << (*it); } } connect( kp, SIGNAL( receivedStdout(KProcess*, char*, int) ), SLOT( slotReceivedOutput(KProcess*, char*, int) ) ); connect( kp, SIGNAL( receivedStderr(KProcess*, char*, int) ), SLOT( slotReceivedOutput(KProcess*, char*, int) ) ); connect( kp, SIGNAL( processExited(KProcess*) ), SLOT( slotExtractExited(KProcess*) ) ); if ( !kp->start( KProcess::NotifyOnExit, KProcess::AllOutput ) ) { KMessageBox::error( 0, i18n( "Could not start a subprocess." ) ); emit sigExtract( false ); } }
void ZipArch::unarchFileInternal() { // if fileList is empty, all files are extracted. // if destDir is empty, abort with error. if ( m_destDir.isEmpty() || m_destDir.isNull() ) { kdError( 1601 ) << "There was no extract directory given." << endl; return; } KProcess *kp = m_currentProcess = new KProcess; kp->clearArguments(); *kp << m_unarchiver_program; if ( !m_password.isEmpty() ) *kp << "-P" << m_password; if ( ArkSettings::extractJunkPaths() && !m_viewFriendly ) *kp << "-j" ; if ( ArkSettings::rarToLower() ) *kp << "-L"; if ( ArkSettings::extractOverwrite() ) *kp << "-o"; else *kp << "-n"; *kp << m_filename; // if the list is empty, no filenames go on the command line, // and we then extract everything in the archive. if ( m_fileList ) { QStringList::Iterator it; for ( it = m_fileList->begin(); it != m_fileList->end(); ++it ) { *kp << (*it); } } *kp << "-d" << m_destDir; connect( kp, SIGNAL( receivedStdout(KProcess*, char*, int) ), SLOT( slotReceivedOutput(KProcess*, char*, int) ) ); connect( kp, SIGNAL( receivedStderr(KProcess*, char*, int) ), SLOT( slotReceivedOutput(KProcess*, char*, int) ) ); connect( kp, SIGNAL( processExited(KProcess*) ), SLOT( slotExtractExited(KProcess*) ) ); if ( !kp->start( KProcess::NotifyOnExit, KProcess::AllOutput ) ) { KMessageBox::error( 0, i18n( "Could not start a subprocess." ) ); emit sigExtract( false ); } }
void TarArch::createTmp() { if ( compressed ) { if ( !QFile::exists(tmpfile) ) { QString strUncompressor = getUnCompressor(); // at least lzop doesn't want to pipe zerosize/nonexistent files QFile originalFile( m_filename ); if ( strUncompressor != "gunzip" && strUncompressor !="bunzip2" && ( !originalFile.exists() || originalFile.size() == 0 ) ) { QFile temp( tmpfile ); temp.open( IO_ReadWrite ); temp.close(); emit createTempDone(); return; } // the tmpfile does not yet exist, so we create it. createTmpInProgress = true; int f_desc = KDE_open(QFile::encodeName(tmpfile), O_CREAT | O_TRUNC | O_WRONLY, 0666); if (f_desc != -1) fd = fdopen( f_desc, "w" ); else fd = NULL; KProcess *kp = m_currentProcess = new KProcess; kp->clearArguments(); kdDebug(1601) << "Uncompressor is " << strUncompressor << endl; *kp << strUncompressor; KProcess::Communication flag = KProcess::AllOutput; if (strUncompressor == "lzop") { // setting up a pty for lzop, since it doesn't like stdin to // be /dev/null ( "no filename allowed when reading from stdin" ) // - but it used to work without this ? ( Feb 13, 2003 ) kp->setUsePty( KProcess::Stdin, false ); flag = KProcess::Stdout; *kp << "-d"; } *kp << "-c" << m_filename; connect(kp, SIGNAL(processExited(KProcess *)), this, SLOT(createTmpFinished(KProcess *))); connect(kp, SIGNAL(receivedStdout(KProcess*, char*, int)), this, SLOT(createTmpProgress( KProcess *, char *, int ))); connect( kp, SIGNAL(receivedStderr(KProcess*, char*, int)), this, SLOT(slotReceivedOutput(KProcess*, char*, int))); if (kp->start(KProcess::NotifyOnExit, flag ) == false) { KMessageBox::error(0, i18n("Unable to fork a decompressor")); emit sigOpen( this, false, QString::null, 0 ); } } else {
void ZipArch::addFile( const QStringList &urls ) { KProcess *kp = m_currentProcess = new KProcess; kp->clearArguments(); *kp << m_archiver_program; if ( !m_password.isEmpty() ) *kp << "-P" << m_password; if ( ArkSettings::rarRecurseSubdirs() ) *kp << "-r"; if ( ArkSettings::rarStoreSymlinks() ) *kp << "-y"; if ( ArkSettings::forceMSDOS() ) *kp << "-k"; if ( ArkSettings::convertLF2CRLF() ) *kp << "-l"; if ( ArkSettings::replaceOnlyWithNewer() ) *kp << "-u"; *kp << m_filename; QStringList::ConstIterator iter; KURL url( urls.first() ); QDir::setCurrent( url.directory() ); for ( iter = urls.begin(); iter != urls.end(); ++iter ) { KURL fileURL( *iter ); *kp << fileURL.fileName(); } connect( kp, SIGNAL( receivedStdout(KProcess*, char*, int) ), SLOT( slotReceivedOutput(KProcess*, char*, int) ) ); connect( kp, SIGNAL( receivedStderr(KProcess*, char*, int) ), SLOT( slotReceivedOutput(KProcess*, char*, int) ) ); connect( kp, SIGNAL( processExited(KProcess*) ), SLOT( slotAddExited(KProcess*) ) ); if ( !kp->start( KProcess::NotifyOnExit, KProcess::AllOutput ) ) { KMessageBox::error( 0, i18n( "Could not start a subprocess." ) ); emit sigAdd( false ); } }
void SevenZipArch::unarchFileInternal( ) { if ( m_destDir.isEmpty() || m_destDir.isNull() ) { kdError( 1601 ) << "There was no extract directory given." << endl; return; } KProcess *kp = m_currentProcess = new KProcess; kp->clearArguments(); // extract (and maybe overwrite) *kp << m_unarchiver_program << "x"; if ( ArkSettings::extractOverwrite() ) { //*kp << "-ao"; } *kp << m_filename; // if the file list is empty, no filenames go on the command line, // and we then extract everything in the archive. if ( m_fileList ) { QStringList::Iterator it; for ( it = m_fileList->begin(); it != m_fileList->end(); ++it ) { *kp << (*it); } } *kp << "-o" + m_destDir ; connect( kp, SIGNAL( receivedStdout(KProcess*, char*, int) ), SLOT( slotReceivedOutput(KProcess*, char*, int) ) ); connect( kp, SIGNAL( receivedStderr(KProcess*, char*, int) ), SLOT( slotReceivedOutput(KProcess*, char*, int) ) ); connect( kp, SIGNAL( processExited(KProcess*) ), SLOT( slotExtractExited(KProcess*) ) ); if ( !kp->start( KProcess::NotifyOnExit, KProcess::AllOutput ) ) { KMessageBox::error( 0, i18n( "Could not start a subprocess." ) ); emit sigExtract( false ); } }
void TarArch::updateArch() { if (compressed) { updateInProgress = true; int f_desc = KDE_open(QFile::encodeName(m_filename), O_CREAT | O_TRUNC | O_WRONLY, 0666); if (f_desc != -1) fd = fdopen( f_desc, "w" ); else fd = NULL; KProcess *kp = m_currentProcess = new KProcess; kp->clearArguments(); KProcess::Communication flag = KProcess::AllOutput; if ( getCompressor() == "lzop" ) { kp->setUsePty( KProcess::Stdin, false ); flag = KProcess::Stdout; } if ( !getCompressor().isNull() ) *kp << getCompressor() << "-c" << tmpfile; else *kp << "cat" << tmpfile; connect(kp, SIGNAL(receivedStdout(KProcess*, char*, int)), this, SLOT(updateProgress( KProcess *, char *, int ))); connect( kp, SIGNAL(receivedStderr(KProcess*, char*, int)), (Arch *)this, SLOT(slotReceivedOutput(KProcess*, char*, int))); connect(kp, SIGNAL(processExited(KProcess *)), this, SLOT(updateFinished(KProcess *)) ); if ( !fd || kp->start(KProcess::NotifyOnExit, flag) == false) { KMessageBox::error(0, i18n("Trouble writing to the archive...")); emit updateDone(); } } }