Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linphone-desktop
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
linphone-desktop
Commits
15b5093b
Commit
15b5093b
authored
Mar 03, 2017
by
Ronan Abhamon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(app): add external `SingleApplication` class
parent
da4d2505
Changes
4
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
670 additions
and
0 deletions
+670
-0
CMakeLists.txt
linphone-desktop/CMakeLists.txt
+3
-0
SingleApplication.cpp
...op/src/externals/single-application/SingleApplication.cpp
+452
-0
SingleApplication.hpp
...op/src/externals/single-application/SingleApplication.hpp
+133
-0
SingleApplicationPrivate.hpp
...externals/single-application/SingleApplicationPrivate.hpp
+82
-0
No files found.
linphone-desktop/CMakeLists.txt
View file @
15b5093b
...
...
@@ -93,6 +93,7 @@ set(SOURCES
src/components/sip-addresses/SipAddressesModel.cpp
src/components/smart-search-bar/SmartSearchBarModel.cpp
src/components/timeline/TimelineModel.cpp
src/externals/single-application/SingleApplication.cpp
src/main.cpp
)
...
...
@@ -123,6 +124,8 @@ set(HEADERS
src/components/sip-addresses/SipAddressesModel.hpp
src/components/smart-search-bar/SmartSearchBarModel.hpp
src/components/timeline/TimelineModel.hpp
src/externals/single-application/SingleApplication.hpp
src/externals/single-application/SingleApplicationPrivate.hpp
src/utils.hpp
)
...
...
linphone-desktop/src/externals/single-application/SingleApplication.cpp
0 → 100644
View file @
15b5093b
This diff is collapsed.
Click to expand it.
linphone-desktop/src/externals/single-application/SingleApplication.hpp
0 → 100644
View file @
15b5093b
// The MIT License (MIT)
//
// Copyright (c) Itay Grudev 2015 - 2016
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
// See: https://github.com/itay-grudev/SingleApplication/
#ifndef SINGLE_APPLICATION_H
#define SINGLE_APPLICATION_H
#include <QtCore/QtGlobal>
#include <QtNetwork/QLocalSocket>
#ifndef QAPPLICATION_CLASS
#define QAPPLICATION_CLASS QCoreApplication
#endif // ifndef QAPPLICATION_CLASS
#include QT_STRINGIFY(QAPPLICATION_CLASS)
// =============================================================================
class
SingleApplicationPrivate
;
/**
* @brief The SingleApplication class handles multipe instances of the same
* Application
* @see QCoreApplication
*/
class
SingleApplication
:
public
QAPPLICATION_CLASS
{
Q_OBJECT
typedef
QAPPLICATION_CLASS
app_t
;
public:
/**
* @brief Mode of operation of SingleApplication.
* Whether the block should be user-wide or system-wide and whether the
* primary instance should be notified when a secondary instance had been
* started.
* @note Operating system can restrict the shared memory blocks to the same
* user, in which case the User/System modes will have no effect and the
* block will be user wide.
* @enum
*/
enum
Mode
{
User
=
1
<<
0
,
System
=
1
<<
1
,
SecondaryNotification
=
1
<<
2
,
ExcludeAppVersion
=
1
<<
3
,
ExcludeAppPath
=
1
<<
4
};
Q_DECLARE_FLAGS
(
Options
,
Mode
)
/**
* @brief Intitializes a SingleApplication instance with argc command line
* arguments in argv
* @arg {int &} argc - Number of arguments in argv
* @arg {const char *[]} argv - Supplied command line arguments
* @arg {bool} allowSecondary - Whether to start the instance as secondary
* if there is already a primary instance.
* @arg {Mode} mode - Whether for the SingleApplication block to be applied
* User wide or System wide.
* @arg {int} timeout - Timeout to wait in miliseconds.
* @note argc and argv may be changed as Qt removes arguments that it
* recognizes
* @note Mode::SecondaryNotification only works if set on both the primary
* instance and the secondary instance.
* @note The timeout is just a hint for the maximum time of blocking
* operations. It does not guarantee that the SingleApplication
* initialisation will be completed in given time, though is a good hint.
* Usually 4*timeout would be the worst case (fail) scenario.
* @see See the corresponding QAPPLICATION_CLASS constructor for reference
*/
explicit
SingleApplication
(
int
&
argc
,
char
*
argv
[],
bool
allowSecondary
=
false
,
Options
options
=
Mode
::
User
,
int
timeout
=
100
);
~
SingleApplication
();
/**
* @brief Returns if the instance is the primary instance
* @returns {bool}
*/
bool
isPrimary
();
/**
* @brief Returns if the instance is a secondary instance
* @returns {bool}
*/
bool
isSecondary
();
/**
* @brief Returns a unique identifier for the current instance
* @returns {int}
*/
quint32
instanceId
();
/**
* @brief Sends a message to the primary instance. Returns true on success.
* @param {int} timeout - Timeout for connecting
* @returns {bool}
* @note sendMessage() will return false if invoked from the primary
* instance.
*/
bool
sendMessage
(
QByteArray
message
,
int
timeout
=
100
);
Q_SIGNALS:
void
instanceStarted
();
void
receivedMessage
(
quint32
instanceId
,
QByteArray
message
);
private:
SingleApplicationPrivate
*
d_ptr
;
Q_DECLARE_PRIVATE
(
SingleApplication
)
};
Q_DECLARE_OPERATORS_FOR_FLAGS
(
SingleApplication
::
Options
)
#endif // SINGLE_APPLICATION_H
linphone-desktop/src/externals/single-application/SingleApplicationPrivate.hpp
0 → 100644
View file @
15b5093b
// The MIT License (MIT)
//
// Copyright (c) Itay Grudev 2015 - 2016
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
// W A R N I N G !!!
// -----------------
//
// This file is not part of the SingleApplication API. It is used purely as an
// implementation detail. This header file may change from version to
// version without notice, or may even be removed.
//
#ifndef SINGLE_APPLICATION_PRIVATE_H
#define SINGLE_APPLICATION_PRIVATE_H
#include <QtCore/QMutex>
#include <QtCore/QSharedMemory>
#include <QtNetwork/QLocalServer>
#include <QtNetwork/QLocalSocket>
#include "SingleApplication.hpp"
// =============================================================================
struct
InstancesInfo
{
bool
primary
;
quint32
secondary
;
};
class
SingleApplicationPrivate
:
public
QObject
{
Q_OBJECT
public:
Q_DECLARE_PUBLIC
(
SingleApplication
)
SingleApplicationPrivate
(
SingleApplication
*
q_ptr
);
~
SingleApplicationPrivate
();
void
genBlockServerName
(
int
msecs
);
void
startPrimary
(
bool
resetMemory
);
void
startSecondary
();
void
connectToPrimary
(
int
msecs
,
char
connectionType
);
#ifdef Q_OS_UNIX
void
crashHandler
();
static
void
terminate
(
int
signum
);
static
QList
<
SingleApplicationPrivate
*>
sharedMem
;
static
QMutex
sharedMemMutex
;
#endif // ifdef Q_OS_UNIX
QSharedMemory
*
memory
;
SingleApplication
*
q_ptr
;
QLocalSocket
*
socket
;
QLocalServer
*
server
;
quint32
instanceNumber
;
QString
blockServerName
;
SingleApplication
::
Options
options
;
public
Q_SLOTS
:
void
slotConnectionEstablished
();
void
slotDataAvailable
(
QLocalSocket
*
,
quint32
);
void
slotClientConnectionClosed
(
QLocalSocket
*
,
quint32
);
};
#endif // SINGLE_APPLICATION_PRIVATE_H
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment