File indexing completed on 2025-03-09 03:52:59
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2010-01-08 0007 * Description : database server starter 0008 * 0009 * SPDX-FileCopyrightText: 2009-2010 by Holger Foerster <Hamsi2k at freenet dot de> 0010 * SPDX-FileCopyrightText: 2016 by Swati Lodha <swatilodha27 at gmail dot com> 0011 * 0012 * SPDX-License-Identifier: GPL-2.0-or-later 0013 * 0014 * ============================================================ */ 0015 0016 #include "databaseserverstarter.h" 0017 0018 // Qt includes 0019 0020 #include <QSystemSemaphore> 0021 0022 // Local includes 0023 0024 #include "digikam_debug.h" 0025 #include "databaseserver.h" 0026 0027 namespace Digikam 0028 { 0029 0030 class Q_DECL_HIDDEN DatabaseServerStarter::Private 0031 { 0032 public: 0033 0034 explicit Private() 0035 : internalServer(nullptr) 0036 { 0037 } 0038 0039 DatabaseServer* internalServer; 0040 }; 0041 0042 // ----------------------------------------------------------------------------------------------- 0043 0044 class Q_DECL_HIDDEN DatabaseServerStarterCreator 0045 { 0046 public: 0047 0048 DatabaseServerStarter object; 0049 }; 0050 0051 Q_GLOBAL_STATIC(DatabaseServerStarterCreator, databaseServerStarterCreator) 0052 0053 // ----------------------------------------------------------------------------------------------- 0054 0055 DatabaseServerStarter::DatabaseServerStarter() 0056 : d(new Private) 0057 { 0058 } 0059 0060 DatabaseServerStarter::~DatabaseServerStarter() 0061 { 0062 delete d; 0063 } 0064 0065 DatabaseServerStarter* DatabaseServerStarter::instance() 0066 { 0067 return &databaseServerStarterCreator->object; 0068 } 0069 0070 DatabaseServerError DatabaseServerStarter::startServerManagerProcess(const DbEngineParameters& parameters) const 0071 { 0072 DatabaseServerError result; 0073 0074 d->internalServer = new DatabaseServer(parameters); 0075 0076 QSystemSemaphore sem(QLatin1String("DigikamDBSrvAccess"), 1, QSystemSemaphore::Open); 0077 sem.acquire(); 0078 0079 result = d->internalServer->startDatabaseProcess(); 0080 0081 if (result.getErrorType() != DatabaseServerError::NoErrors) 0082 { 0083 qCDebug(DIGIKAM_DATABASESERVER_LOG) << "Cannot start internal database server"; 0084 } 0085 else 0086 { 0087 qCDebug(DIGIKAM_DATABASESERVER_LOG) << "Internal database server started"; 0088 d->internalServer->start(); 0089 } 0090 0091 sem.release(); 0092 0093 return result; 0094 } 0095 0096 void DatabaseServerStarter::stopServerManagerProcess() 0097 { 0098 if (!d->internalServer) 0099 { 0100 return; 0101 } 0102 0103 QSystemSemaphore sem(QLatin1String("DigikamDBSrvAccess"), 1, QSystemSemaphore::Open); 0104 sem.acquire(); 0105 0106 d->internalServer->stopDatabaseProcess(); 0107 d->internalServer = nullptr; 0108 0109 sem.release(); 0110 0111 qCDebug(DIGIKAM_DATABASESERVER_LOG) << "Internal database server stopped"; 0112 } 0113 0114 } // namespace Digikam 0115 0116 #include "moc_databaseserverstarter.cpp"