Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F34140281
signclipboardcommand.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
4 KB
Subscribers
None
signclipboardcommand.cpp
View Options
/* -*- mode: c++; c-basic-offset:4 -*-
commands/signclipboardcommand.cpp
This file is part of Kleopatra, the KDE keymanager
SPDX-FileCopyrightText: 2008 Klarälvdalens Datakonsult AB
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include
<config-kleopatra.h>
#include
"signclipboardcommand.h"
#ifndef QT_NO_CLIPBOARD
#include
"command_p.h"
#include
<crypto/signemailcontroller.h>
#include
<utils/input.h>
#include
<utils/output.h>
#include
<Libkleo/Stl_Util>
#include
"kleopatra_debug.h"
#include
<KLocalizedString>
#include
<QApplication>
#include
<QClipboard>
#include
<QMimeData>
#include
<exception>
using
namespace
Kleo
;
using
namespace
Kleo
::
Commands
;
using
namespace
Kleo
::
Crypto
;
class
SignClipboardCommand
::
Private
:
public
Command
::
Private
{
friend
class
::
Kleo
::
Commands
::
SignClipboardCommand
;
SignClipboardCommand
*
q_func
()
const
{
return
static_cast
<
SignClipboardCommand
*>
(
q
);
}
public
:
explicit
Private
(
SignClipboardCommand
*
qq
,
KeyListController
*
c
);
~
Private
()
override
;
void
init
();
private
:
void
slotSignersResolved
();
void
slotControllerDone
()
{
finished
();
}
void
slotControllerError
(
int
,
const
QString
&
)
{
finished
();
}
private
:
std
::
shared_ptr
<
const
ExecutionContext
>
shared_qq
;
std
::
shared_ptr
<
Input
>
input
;
SignEMailController
controller
;
};
SignClipboardCommand
::
Private
*
SignClipboardCommand
::
d_func
()
{
return
static_cast
<
Private
*>
(
d
.
get
());
}
const
SignClipboardCommand
::
Private
*
SignClipboardCommand
::
d_func
()
const
{
return
static_cast
<
const
Private
*>
(
d
.
get
());
}
#define d d_func()
#define q q_func()
SignClipboardCommand
::
Private
::
Private
(
SignClipboardCommand
*
qq
,
KeyListController
*
c
)
:
Command
::
Private
(
qq
,
c
)
,
shared_qq
(
qq
,
[](
SignClipboardCommand
*
)
{})
,
input
()
,
controller
(
SignEMailController
::
ClipboardMode
)
{
}
SignClipboardCommand
::
Private
::~
Private
()
{
qCDebug
(
KLEOPATRA_LOG
);
}
SignClipboardCommand
::
SignClipboardCommand
(
GpgME
::
Protocol
protocol
,
KeyListController
*
c
)
:
Command
(
new
Private
(
this
,
c
))
{
d
->
init
();
d
->
controller
.
setProtocol
(
protocol
);
}
SignClipboardCommand
::
SignClipboardCommand
(
GpgME
::
Protocol
protocol
,
QAbstractItemView
*
v
,
KeyListController
*
c
)
:
Command
(
v
,
new
Private
(
this
,
c
))
{
d
->
init
();
d
->
controller
.
setProtocol
(
protocol
);
}
void
SignClipboardCommand
::
Private
::
init
()
{
controller
.
setExecutionContext
(
shared_qq
);
controller
.
setDetachedSignature
(
false
);
connect
(
&
controller
,
&
Controller
::
done
,
q
,
[
this
]()
{
slotControllerDone
();
});
connect
(
&
controller
,
&
Controller
::
error
,
q
,
[
this
](
int
err
,
const
QString
&
details
)
{
slotControllerError
(
err
,
details
);
});
}
SignClipboardCommand
::~
SignClipboardCommand
()
{
qCDebug
(
KLEOPATRA_LOG
);
}
// static
bool
SignClipboardCommand
::
canSignCurrentClipboard
()
{
bool
canSign
=
false
;
if
(
const
QClipboard
*
const
clip
=
QApplication
::
clipboard
())
{
if
(
const
QMimeData
*
const
mime
=
clip
->
mimeData
())
{
canSign
=
mime
->
hasText
();
}
}
return
canSign
;
}
void
SignClipboardCommand
::
doStart
()
{
try
{
// snapshot clipboard content here, in case it's being changed...
d
->
input
=
Input
::
createFromClipboard
();
connect
(
&
d
->
controller
,
&
SignEMailController
::
signersResolved
,
this
,
[
this
]()
{
d
->
slotSignersResolved
();
});
d
->
controller
.
startResolveSigners
();
}
catch
(
const
std
::
exception
&
e
)
{
d
->
information
(
i18n
(
"An error occurred: %1"
,
QString
::
fromLocal8Bit
(
e
.
what
())),
i18n
(
"Sign Clipboard Error"
));
d
->
finished
();
}
}
void
SignClipboardCommand
::
Private
::
slotSignersResolved
()
{
try
{
controller
.
setInputAndOutput
(
input
,
Output
::
createFromClipboard
());
input
.
reset
();
// no longer needed, so don't keep a reference
controller
.
start
();
}
catch
(
const
std
::
exception
&
e
)
{
information
(
i18n
(
"An error occurred: %1"
,
QString
::
fromLocal8Bit
(
e
.
what
())),
i18n
(
"Sign Clipboard Error"
));
finished
();
}
}
void
SignClipboardCommand
::
doCancel
()
{
qCDebug
(
KLEOPATRA_LOG
);
d
->
controller
.
cancel
();
}
#undef d
#undef q
#include
"moc_signclipboardcommand.cpp"
#endif
// QT_NO_CLIPBOARD
File Metadata
Details
Attached
Mime Type
text/x-c++
Expires
Tue, Dec 9, 1:06 AM (23 h, 37 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
61/7d/e259575ccd74dc8bb880c764bc2f
Attached To
rKLEOPATRA Kleopatra
Event Timeline
Log In to Comment