Electroneum
Loading...
Searching...
No Matches
notify.cpp
Go to the documentation of this file.
1
// Copyright (c) 2018, The Monero Project
2
//
3
// All rights reserved.
4
//
5
// Redistribution and use in source and binary forms, with or without modification, are
6
// permitted provided that the following conditions are met:
7
//
8
// 1. Redistributions of source code must retain the above copyright notice, this list of
9
// conditions and the following disclaimer.
10
//
11
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
12
// of conditions and the following disclaimer in the documentation and/or other
13
// materials provided with the distribution.
14
//
15
// 3. Neither the name of the copyright holder nor the names of its contributors may be
16
// used to endorse or promote products derived from this software without specific
17
// prior written permission.
18
//
19
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
27
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29
#include <boost/algorithm/string.hpp>
30
#include <stdarg.h>
31
#include "
misc_log_ex.h
"
32
#include "
file_io_utils.h
"
33
#include "
spawn.h
"
34
#include "
notify.h
"
35
36
#undef ELECTRONEUM_DEFAULT_LOG_CATEGORY
37
#define ELECTRONEUM_DEFAULT_LOG_CATEGORY "notify"
38
39
namespace
tools
40
{
41
42
/*
43
TODO:
44
- Improve tokenization to handle paths containing whitespaces, quotes, etc.
45
- Windows unicode support (implies implementing unicode command line parsing code)
46
*/
47
Notify::Notify
(
const
char
*spec)
48
{
49
CHECK_AND_ASSERT_THROW_MES
(spec,
"Null spec"
);
50
51
boost::split(args, spec, boost::is_any_of(
" \t"
), boost::token_compress_on);
52
CHECK_AND_ASSERT_THROW_MES
(args.size() > 0,
"Failed to parse spec"
);
53
if
(strchr(spec,
'\''
) || strchr(spec,
'\"'
) || strchr(spec,
'\\'
))
54
MWARNING
(
"A notification spec contains a quote or backslash: note that these are handled verbatim, which may not be the intent"
);
55
filename = args[0];
56
CHECK_AND_ASSERT_THROW_MES
(
epee::file_io_utils::is_file_exist
(filename),
"File not found: "
<< filename);
57
}
58
59
static
void
replace(std::vector<std::string> &v,
const
char
*tag,
const
char
*s)
60
{
61
for
(std::string &str: v)
62
boost::replace_all(str, tag, s);
63
}
64
65
int
Notify::notify
(
const
char
*tag,
const
char
*s, ...)
66
{
67
std::vector<std::string> margs = args;
68
69
replace(margs, tag, s);
70
71
va_list ap;
72
va_start(ap, s);
73
while
((tag = va_arg(ap,
const
char
*)))
74
{
75
s = va_arg(ap,
const
char
*);
76
replace(margs, tag, s);
77
}
78
va_end(ap);
79
80
return
tools::spawn
(filename.c_str(), margs,
false
);
81
}
82
83
}
tools::Notify::notify
int notify(const char *tag, const char *s,...)
Definition
notify.cpp:65
tools::Notify::Notify
Notify(const char *spec)
Definition
notify.cpp:47
file_io_utils.h
misc_log_ex.h
MWARNING
#define MWARNING(x)
Definition
misc_log_ex.h:74
CHECK_AND_ASSERT_THROW_MES
#define CHECK_AND_ASSERT_THROW_MES(expr, message)
Definition
misc_log_ex.h:173
epee::file_io_utils::is_file_exist
bool is_file_exist(const std::string &path)
Definition
file_io_utils.h:66
tools
Various Tools.
Definition
tools.cpp:31
tools::spawn
int spawn(const char *filename, const std::vector< std::string > &args, bool wait)
Definition
spawn.cpp:51
notify.h
spawn.h
src
common
notify.cpp
Generated on
for Electroneum by
1.16.1