• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • arts
 

arts

kartsserver.cpp

00001 // Copyright (c) 2000-2001 Charles Samuels <charles@kde.org>
00002 //                         Neil Stevens <neil@qualityassistant.com>
00003 //
00004 // Permission is hereby granted, free of charge, to any person obtaining a copy
00005 // of this software and associated documentation files (the "Software"), to deal
00006 // in the Software without restriction, including without limitation the rights
00007 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00008 // copies of the Software, and to permit persons to whom the Software is
00009 // furnished to do so, subject to the following conditions:
00010 //
00011 // The above copyright notice and this permission notice shall be included in
00012 // all copies or substantial portions of the Software.
00013 //
00014 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00015 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00016 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
00017 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIAB\ILITY, WHETHER IN
00018 // AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
00019 // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00020 
00021 #include <flowsystem.h>
00022 #include <ksimpleconfig.h>
00023 #include <kprocess.h>
00024 #include <kstandarddirs.h>
00025 #include <tqdir.h>
00026 #include <tqfile.h>
00027 #include "kartsserver.h"
00028 
00029 struct KArtsServer::Data
00030 {
00031     Arts::SoundServerV2 server;
00032 };
00033 
00034 KArtsServer::KArtsServer(TQObject *parent, const char *name)
00035     : TQObject(parent, name)
00036     , d(new Data)
00037 {
00038     d->server = Arts::SoundServerV2::null();
00039 }
00040 
00041 KArtsServer::~KArtsServer(void)
00042 {
00043     d->server = Arts::SoundServerV2::null();
00044     delete d;
00045 }
00046 
00047 Arts::SoundServerV2 KArtsServer::server(void)
00048 {
00049     bool error = d->server.error();
00050     if( d->server.isNull() || error )
00051     {
00052         d->server = Arts::Reference("global:Arts_SoundServerV2");
00053         if( error && !d->server.isNull() && !d->server.error() )
00054             emit restartedServer();
00055     }
00056 
00057     if(!d->server.isNull() && !d->server.error())
00058         return d->server;
00059 
00060     // aRts seems not to be running, let's try to run it
00061     // First, let's read the configuration as in kcmarts
00062     TDEConfig config("kcmartsrc", false /*bReadOnly*/, false /*bUseKDEGlobals*/);
00063     TDEProcess proc;
00064 
00065     config.setGroup("Arts");
00066 
00067     bool rt = config.readBoolEntry("StartRealtime", false);
00068     bool x11Comm = config.readBoolEntry("X11GlobalComm", false);
00069 
00070     // put the value of x11Comm into .mcoprc
00071     KSimpleConfig X11CommConfig(TQDir::homeDirPath()+"/.mcoprc");
00072 
00073     if(x11Comm)
00074         X11CommConfig.writeEntry("GlobalComm", "Arts::X11GlobalComm");
00075     else
00076         X11CommConfig.writeEntry("GlobalComm", "Arts::TmpGlobalComm");
00077 
00078     X11CommConfig.sync();
00079     
00080     proc << TQFile::encodeName(TDEStandardDirs::findExe(TQString::fromLatin1("tdeinit_wrapper"))).data();
00081 
00082     if(rt)
00083         proc << TQFile::encodeName(TDEStandardDirs::findExe(TQString::fromLatin1("artswrapper"))).data();
00084     else
00085         proc << TQFile::encodeName(TDEStandardDirs::findExe(TQString::fromLatin1("artsd"))).data();
00086 
00087     proc << TQStringList::split( " ", config.readEntry( "Arguments", "-F 10 -S 4096 -s 60 -m artsmessage -l 3 -f" ) );
00088 
00089     if(proc.start(TDEProcess::Block) && proc.normalExit())
00090     {
00091         // We could have a race-condition here.
00092         // The correct way to do it is to make artsd fork-and-exit
00093         // after starting to listen to connections (and running artsd
00094         // directly instead of using tdeinit), but this is better
00095         // than nothing.
00096         int time = 0;
00097         do
00098         {
00099             sleep(1);
00100             d->server = Arts::Reference("global:Arts_SoundServerV2");
00101         } while(++time < 5 && (d->server.isNull()));
00102 
00103         emit restartedServer();
00104     }
00105     // TODO else what?
00106 
00107     return d->server;
00108 }
00109 
00110 // vim: sw=4 ts=4 noet
00111 #include "kartsserver.moc"

arts

Skip menu "arts"
  • Main Page
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members

arts

Skip menu "arts"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for arts by doxygen 1.7.1
This website is maintained by Timothy Pearson.