30 #include <kcmdlineargs.h>
31 #include <kmessagebox.h>
32 #include <solid/networking.h>
35 #include "kabcpersistence.h"
36 #include "kopeteaccount.h"
37 #include "kopeteaccountmanager.h"
38 #include "kopetestatusmanager.h"
39 #include "kopetestatusitems.h"
40 #include "kopetebehaviorsettings.h"
41 #include "kopetecommandhandler.h"
42 #include "kopetecontactlist.h"
43 #include "kopeteglobal.h"
44 #include "kopetefileengine.h"
45 #include "kopetemimetypehandler.h"
46 #include "kopetepluginmanager.h"
47 #include "kopeteprotocol.h"
48 #include "kopetestdaction.h"
49 #include "kopeteuiglobal.h"
51 #include "kopeteviewmanager.h"
52 #include "kopeteidentitymanager.h"
58 setQuitOnLastWindowClosed(
false );
59 m_isShuttingDown =
false;
62 Kopete::IdentityManager::self()->load();
66 Kopete::PluginManager::self();
68 Kopete::UI::Global::setMainWidget( m_mainWindow );
94 m_fileEngineHandler =
new Kopete::FileEngineHandler();
97 m_emoticonHandler =
new Kopete::EmoticonMimeTypeHandler;
107 if ( ! m_isShuttingDown )
110 m_isShuttingDown =
true;
113 QList<KMainWindow*> members = KMainWindow::memberList();
114 QList<KMainWindow*>::iterator it, itEnd = members.end();
115 for ( it = members.begin(); it != itEnd; ++it )
119 Kopete::PluginManager::self()->shutdown();
122 Kopete::PluginList list = Kopete::PluginManager::self()->loadedPlugins();
123 foreach ( Kopete::Plugin *plugin, list )
127 delete m_fileEngineHandler;
128 delete m_emoticonHandler;
137 Kopete::KABCPersistence::self()->addressBook();
140 Kopete::CommandHandler::commandHandler();
143 KopeteViewManager::viewManager();
146 Kopete::AccountManager::self()->load();
147 Kopete::ContactList::self()->load();
149 KSharedConfig::Ptr config = KGlobal::config();
152 KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
154 bool showConfigDialog =
false;
156 KConfigGroup pluginsGroup = config->group(
"Plugins" );
163 if ( !pluginsGroup.exists() )
164 showConfigDialog =
true;
179 foreach (
const QString &disableArg, args->getOption(
"disable" ).split(
',' ))
181 showConfigDialog =
false;
182 Kopete::PluginManager::self()->setPluginEnabled( disableArg,
false );
186 if ( args->isSet(
"load-plugins" ) )
188 pluginsGroup.deleteGroup( KConfigBase::Global );
189 showConfigDialog =
false;
190 foreach (
const QString &plugin, args->getOption(
"load-plugins" ).split(
',' ))
191 Kopete::PluginManager::self()->setPluginEnabled( plugin,
true );
197 if ( !args->isSet(
"plugins" ) )
204 showConfigDialog =
false;
206 QTimer::singleShot(0,
this, SLOT(slotAllPluginsLoaded()));
210 Kopete::PluginManager::self()->loadAllPlugins();
213 connect( Kopete::PluginManager::self(), SIGNAL(allPluginsLoaded()),
214 this, SLOT(slotAllPluginsLoaded()));
216 if( showConfigDialog )
231 Kopete::AccountManager::self()->save();
236 void KopeteApplication::slotAllPluginsLoaded()
238 KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
243 Kopete::OnlineStatusManager::Category initStatus = Kopete::OnlineStatusManager::self()->initialStatus();
244 Kopete::OnlineStatusManager::Category setStatus = Kopete::OnlineStatusManager::Offline;
246 if ( args->isSet(
"connect" ) && initStatus != Kopete::OnlineStatusManager::Offline &&
247 ( Solid::Networking::status() == Solid::Networking::Unknown ||
248 Solid::Networking::status() == Solid::Networking::Connected ) ){
250 setStatus = initStatus;
254 QList <Kopete::Status::StatusItem *> statusList = Kopete::StatusManager::self()->getRootGroup()->childList();
255 QString message, title;
259 for ( QList <Kopete::Status::StatusItem *>::ConstIterator it = statusList.constBegin(); it != statusList.constEnd(); ++it ) {
260 if ( ! (*it)->isGroup() && (*it)->category() == setStatus ) {
261 title = (*it)->title();
262 message = (static_cast <Kopete::Status::Status*> (*it))->message();
271 if ( setStatus != Kopete::OnlineStatusManager::Offline )
273 Kopete::AccountManager::self()->setOnlineStatus(initStatus, Kopete::StatusMessage(title, message), Kopete::AccountManager::ConnectIfOffline);
276 Kopete::StatusManager::self()->setGlobalStatus(setStatus, Kopete::StatusMessage(title, message));
280 if ( setStatus != Kopete::OnlineStatusManager::Offline )
282 Kopete::AccountManager::self()->setOnlineStatus(initStatus, QString(), Kopete::AccountManager::ConnectIfOffline);
287 kDebug(14000)<<
"initial status set in config: " << initStatus;
289 QStringList connectArgs = args->getOptionList(
"autoconnect" );
292 QStringList toConnect;
294 for ( QStringList::ConstIterator i = connectArgs.constBegin(); i != connectArgs.constEnd(); ++i )
296 foreach (
const QString &connectArg, (*i).split(
','))
297 toConnect.append( connectArg );
300 for ( QStringList::ConstIterator i = toConnect.constBegin(); i != toConnect.constEnd(); ++i )
302 QRegExp rx( QLatin1String(
"([^\\|]*)\\|\\|(.*)" ) );
304 QString protocolId = rx.cap( 1 );
307 if ( accountId.isEmpty() )
309 if ( protocolId.isEmpty() )
315 QListIterator<Kopete::Account *> it( Kopete::AccountManager::self()->accounts() );
316 Kopete::Account *account;
317 while ( it.hasNext() )
320 if ( ( account->accountId() ==
accountId ) )
322 if ( protocolId.isEmpty() || account->protocol()->pluginId() == protocolId )
342 return KUniqueApplication::newInstance();
345 void KopeteApplication::handleURLArgs()
347 KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
350 if ( args->count() > 0 )
352 for (
int i = 0; i < args->count(); i++ )
354 KUrl u( args->url( i ) );
358 Kopete::MimeTypeHandler::dispatchURL( u );
368 m_isShuttingDown =
true;
371 QList<KMainWindow*> members = KMainWindow::memberList();
372 QList<KMainWindow*>::iterator it, itEnd = members.end();
373 for ( it = members.begin(); it != itEnd; ++it)
375 if ( !(*it)->close() )
377 m_isShuttingDown =
false;
382 if ( m_isShuttingDown && m_mainWindow )
384 m_mainWindow->deleteLater();
392 m_isShuttingDown =
true;
393 KUniqueApplication::commitData( sm );
396 #include "kopeteapplication.moc"
void slotLoadPlugins()
Load all plugins.
virtual int newInstance()
Public D-Bus interface for Kopete.
void quitKopete()
Quit Kopete, closing all the windows, which causes application shutdown This method marks Kopete as '...
virtual void commitData(QSessionManager &sm)