add mailbox feature
This commit is contained in:
parent
dfedf9eade
commit
12dc612c2e
@ -184,6 +184,29 @@ def dashboard_bb_write(call, dmr_id, time, bulletin):
|
|||||||
logger.info('User bulletin entry saved.')
|
logger.info('User bulletin entry saved.')
|
||||||
#logger.info(dash_bb)
|
#logger.info(dash_bb)
|
||||||
|
|
||||||
|
def mailbox_write(call, dmr_id, time, message, recipient):
|
||||||
|
#try:
|
||||||
|
mail_file = ast.literal_eval(os.popen('cat /tmp/gps_data_user_mailbox.txt').read())
|
||||||
|
mail_file.insert(0, {'call': call, 'dmr_id': dmr_id, 'time': time, 'message':message, 'recipient': recipient})
|
||||||
|
with open("/tmp/gps_data_user_mailbox.txt", 'w') as mailbox_file:
|
||||||
|
mailbox_file.write(str(mail_file[:100]))
|
||||||
|
mailbox_file.close()
|
||||||
|
logger.info('User mail saved.')
|
||||||
|
|
||||||
|
def mailbox_delete(dmr_id):
|
||||||
|
mail_file = ast.literal_eval(os.popen('cat /tmp/gps_data_user_mailbox.txt').read())
|
||||||
|
call = str(get_alias((dmr_id), subscriber_ids))
|
||||||
|
new_data = []
|
||||||
|
for message in mail_file:
|
||||||
|
if message['recipient'] != call:
|
||||||
|
new_data.append(message)
|
||||||
|
with open("/tmp/gps_data_user_mailbox.txt", 'w') as mailbox_file:
|
||||||
|
mailbox_file.write(str(new_data[:100]))
|
||||||
|
mailbox_file.close()
|
||||||
|
logger.info('Mailbox updated. Delete occurred.')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def sos_write(dmr_id, time, message):
|
def sos_write(dmr_id, time, message):
|
||||||
user_settings = ast.literal_eval(os.popen('cat ./user_settings.txt').read())
|
user_settings = ast.literal_eval(os.popen('cat ./user_settings.txt').read())
|
||||||
try:
|
try:
|
||||||
@ -285,6 +308,12 @@ def process_sms(_rf_src, sms):
|
|||||||
elif '@REM SOS' == sms:
|
elif '@REM SOS' == sms:
|
||||||
os.remove('/tmp/gps_data_user_sos.txt')
|
os.remove('/tmp/gps_data_user_sos.txt')
|
||||||
logger.info('Removing SOS')
|
logger.info('Removing SOS')
|
||||||
|
elif '@' and 'M-' in sms:
|
||||||
|
message = re.sub('@.* |M-','',sms)
|
||||||
|
recipient = re.sub('@| M-.*','',sms)
|
||||||
|
mailbox_write(get_alias(int_id(_rf_src), subscriber_ids), int_id(_rf_src), time.strftime('%H:%M:%S - %m/%d/%y'), message, str(recipient).upper())
|
||||||
|
elif '@REM MAIL' == sms:
|
||||||
|
mailbox_delete(_rf_src)
|
||||||
elif '@MH' in sms:
|
elif '@MH' in sms:
|
||||||
grid_square = re.sub('@MH ', '', sms)
|
grid_square = re.sub('@MH ', '', sms)
|
||||||
if len(grid_square) < 6:
|
if len(grid_square) < 6:
|
||||||
@ -1763,7 +1792,13 @@ if __name__ == '__main__':
|
|||||||
with open("/tmp/gps_data_user_bb.txt", 'w') as user_bb_file:
|
with open("/tmp/gps_data_user_bb.txt", 'w') as user_bb_file:
|
||||||
user_bb_file.write("[]")
|
user_bb_file.write("[]")
|
||||||
user_bb_file.close()
|
user_bb_file.close()
|
||||||
|
if Path('/tmp/gps_data_user_mailbox.txt').is_file():
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
Path('/tmp/gps_data_user_mailbox.txt').touch()
|
||||||
|
with open("/tmp/gps_data_user_mailbox.txt", 'w') as user_loc_file:
|
||||||
|
user_loc_file.write("[]")
|
||||||
|
user_loc_file.close()
|
||||||
|
|
||||||
|
|
||||||
# CLI argument parser - handles picking up the config file from the command line, and sending a "help" message
|
# CLI argument parser - handles picking up the config file from the command line, and sending a "help" message
|
||||||
|
35
gps_data.py
35
gps_data.py
@ -177,6 +177,28 @@ def dashboard_bb_write(call, dmr_id, time, bulletin):
|
|||||||
logger.info('User bulletin entry saved.')
|
logger.info('User bulletin entry saved.')
|
||||||
#logger.info(dash_bb)
|
#logger.info(dash_bb)
|
||||||
|
|
||||||
|
def mailbox_write(call, dmr_id, time, message, recipient):
|
||||||
|
#try:
|
||||||
|
mail_file = ast.literal_eval(os.popen('cat /tmp/gps_data_user_mailbox.txt').read())
|
||||||
|
mail_file.insert(0, {'call': call, 'dmr_id': dmr_id, 'time': time, 'message':message, 'recipient': recipient})
|
||||||
|
with open("/tmp/gps_data_user_mailbox.txt", 'w') as mailbox_file:
|
||||||
|
mailbox_file.write(str(mail_file[:100]))
|
||||||
|
mailbox_file.close()
|
||||||
|
logger.info('User mail saved.')
|
||||||
|
|
||||||
|
def mailbox_delete(dmr_id):
|
||||||
|
mail_file = ast.literal_eval(os.popen('cat /tmp/gps_data_user_mailbox.txt').read())
|
||||||
|
call = str(get_alias((dmr_id), subscriber_ids))
|
||||||
|
new_data = []
|
||||||
|
for message in mail_file:
|
||||||
|
if message['recipient'] != call:
|
||||||
|
new_data.append(message)
|
||||||
|
with open("/tmp/gps_data_user_mailbox.txt", 'w') as mailbox_file:
|
||||||
|
mailbox_file.write(str(new_data[:100]))
|
||||||
|
mailbox_file.close()
|
||||||
|
logger.info('Mailbox updated. Delete occurred.')
|
||||||
|
|
||||||
|
|
||||||
def sos_write(dmr_id, time, message):
|
def sos_write(dmr_id, time, message):
|
||||||
user_settings = ast.literal_eval(os.popen('cat ./user_settings.txt').read())
|
user_settings = ast.literal_eval(os.popen('cat ./user_settings.txt').read())
|
||||||
try:
|
try:
|
||||||
@ -277,6 +299,12 @@ def process_sms(_rf_src, sms):
|
|||||||
elif '@REM SOS' == sms:
|
elif '@REM SOS' == sms:
|
||||||
os.remove('/tmp/gps_data_user_sos.txt')
|
os.remove('/tmp/gps_data_user_sos.txt')
|
||||||
logger.info('Removing SOS or Notice')
|
logger.info('Removing SOS or Notice')
|
||||||
|
elif '@' and 'M-' in sms:
|
||||||
|
message = re.sub('@.* |M-','',sms)
|
||||||
|
recipient = re.sub('@| M-.*','',sms)
|
||||||
|
mailbox_write(get_alias(int_id(_rf_src), subscriber_ids), int_id(_rf_src), time.strftime('%H:%M:%S - %m/%d/%y'), message, str(recipient).upper())
|
||||||
|
elif '@REM MAIL' == sms:
|
||||||
|
mailbox_delete(_rf_src)
|
||||||
elif '@MH' in sms:
|
elif '@MH' in sms:
|
||||||
grid_square = re.sub('@MH ', '', sms)
|
grid_square = re.sub('@MH ', '', sms)
|
||||||
if len(grid_square) < 6:
|
if len(grid_square) < 6:
|
||||||
@ -666,6 +694,13 @@ if __name__ == '__main__':
|
|||||||
with open("/tmp/gps_data_user_bb.txt", 'w') as user_bb_file:
|
with open("/tmp/gps_data_user_bb.txt", 'w') as user_bb_file:
|
||||||
user_bb_file.write("[]")
|
user_bb_file.write("[]")
|
||||||
user_bb_file.close()
|
user_bb_file.close()
|
||||||
|
if Path('/tmp/gps_data_user_mailbox.txt').is_file():
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
Path('/tmp/gps_data_user_mailbox.txt').touch()
|
||||||
|
with open("/tmp/gps_data_user_mailbox.txt", 'w') as user_loc_file:
|
||||||
|
user_loc_file.write("[]")
|
||||||
|
user_loc_file.close()
|
||||||
# CLI argument parser - handles picking up the config file from the command line, and sending a "help" message
|
# CLI argument parser - handles picking up the config file from the command line, and sending a "help" message
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument('-c', '--config', action='store', dest='CONFIG_FILE', help='/full/path/to/config.file (usually gps_data.cfg)')
|
parser.add_argument('-c', '--config', action='store', dest='CONFIG_FILE', help='/full/path/to/config.file (usually gps_data.cfg)')
|
||||||
|
@ -399,6 +399,68 @@ def user_settings():
|
|||||||
|
|
||||||
return render_template('user_settings.html', title = dashboard_title, logo = logo, user_result = Markup(user_result))
|
return render_template('user_settings.html', title = dashboard_title, logo = logo, user_result = Markup(user_result))
|
||||||
|
|
||||||
|
@app.route('/mailbox')
|
||||||
|
def mailbox():
|
||||||
|
recipient = request.args.get('recipient')
|
||||||
|
if not recipient:
|
||||||
|
mail_content = """
|
||||||
|
<p>The Mailbox is a place where users can leave messages via DMR SMS. A user can leave a message for someone else by sending a specially formatted SMS to <strong>""" + data_call_id + """</strong>.
|
||||||
|
The message recipient can then use the mailbox to check for messages. Enter your call sign below to check for messages. See the <a href="help">help</a> page for more information.</p>
|
||||||
|
<form action="mailbox" method="get">
|
||||||
|
<table style="margin-left: auto; margin-right: auto;">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 62px;">
|
||||||
|
<td style="text-align: center; height: 62px;">
|
||||||
|
<h2><strong><label for="recipient">Callsign:</label></strong></h2>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr style="height: 51.1667px;">
|
||||||
|
<td style="height: 51.1667px;"><input id="recipient" name="recipient" type="text" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr style="height: 27px;">
|
||||||
|
<td style="text-align: center; height: 27px;"><input type="submit" value="Submit" /></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
<p> </p>
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
else:
|
||||||
|
mailbox_file = ast.literal_eval(os.popen('cat /tmp/gps_data_user_mailbox.txt').read())
|
||||||
|
mail_content = '<h2 style="text-align: center;">Messages for: ' + recipient.upper() + '''
|
||||||
|
</h2>\n<p style="text-align: center;"><button onclick="history.back()">Back</button></p>\n
|
||||||
|
<h4 style="text-align: center;"><a href="mailbox_rss?recipient=''' + recipient.upper() + '''"><em>Mailbox RSS Feed for ''' + recipient.upper() + '''</em></a><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH5QIcFBAOXAevLAAAAZZJREFUSMftlbtKA0EUhj8jWhi8gaIEC29oxEoRFESLgIXYiWVSKoj6CCrBBwj6CBHNE1hEWy21ETQqiIW1wXhPo81ZOBw2apbdVPvDsDPnP8M/5zKzECJEQKivYO8DFoAYEAGKtTpQEvhW4w3IA+tAVy2F9fgEskA8COHUL8LOKAMZoMmLQF0FewcwImmNAzPANBB18b0BFoGroNLfBiyLgI2+BMwF3XgNwCrwYsQ//BBPSRPdAoeybjE+A8ClS+Sjfnf1E5A2dW4FzoxfwWvD/XWd7oAxI24jz3gVnpS7eiEpt+KvQEL5D5qal/245zFgU+pnXzMd+Zrh9/3q5l7g3CXtTs0bgWvFffn5vDa7iKcVv2K4DS8i3cAOsAuMm8h12ovqqrVL/R3upFrRKPBgHgctvm0iSynuWNnf5bf6byy5dPKe4nukhg6XU9yW2TfsJlDpNCUX27OaP8pD4WBCzQtmX381EUeAI3Xqe6m5xoHpYAezJuJkNb9Fh0tI4+SlXhpTwJBaZ+XbCcwr+6kcPESI2uAHmAijFaMnEmYAAAAASUVORK5CYII=" /></h4>
|
||||||
|
'''
|
||||||
|
for messages in mailbox_file:
|
||||||
|
if messages['recipient'] == recipient.upper():
|
||||||
|
mail_content = mail_content + """
|
||||||
|
<p> </p>
|
||||||
|
<table style="margin-left: auto; margin-right: auto; width: 372.55px;" border="1">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style="width: 63px;"><strong>Callsign:</strong></td>
|
||||||
|
<td style="text-align: center; width: 292.55px;"><strong>""" + messages['call'] + """</strong></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="width: 63px;"><strong>DMR ID:</strong></td>
|
||||||
|
<td style="width: 292.55px; text-align: center;">""" + str(messages['dmr_id']) + """</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="width: 63px;"><strong>Time:</strong></td>
|
||||||
|
<td style="width: 292.55px; text-align: center;">""" + messages['time'] + """</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="width: 63px;"><strong>Message:</strong></td>
|
||||||
|
<td style="width: 292.55px; text-align: center;"><strong>""" + messages['message'] + """</strong></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
"""
|
||||||
|
return render_template('generic.html', title = dashboard_title, logo = logo, content = Markup(mail_content))
|
||||||
|
|
||||||
@app.route('/bulletin_rss.xml')
|
@app.route('/bulletin_rss.xml')
|
||||||
def bb_rss():
|
def bb_rss():
|
||||||
try:
|
try:
|
||||||
@ -421,5 +483,28 @@ def bb_rss():
|
|||||||
return Response(rss_header + post_data + "\n</channel>\n</rss>", mimetype='text/xml')
|
return Response(rss_header + post_data + "\n</channel>\n</rss>", mimetype='text/xml')
|
||||||
except:
|
except:
|
||||||
return str('<h1 style="text-align: center;">No data</h1>')
|
return str('<h1 style="text-align: center;">No data</h1>')
|
||||||
|
|
||||||
|
@app.route('/mailbox_rss')
|
||||||
|
def mail_rss():
|
||||||
|
mailbox_file = ast.literal_eval(os.popen('cat /tmp/gps_data_user_mailbox.txt').read())
|
||||||
|
post_data = ''
|
||||||
|
recipient = request.args.get('recipient').upper()
|
||||||
|
rss_header = """<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<rss version="2.0">
|
||||||
|
<channel>
|
||||||
|
<title>""" + dashboard_title + """ - Mailbox Feed for """ + recipient + """</title>
|
||||||
|
<link>""" + rss_link + """</link>
|
||||||
|
<description>This is a Mailbox feed from """ + dashboard_title + """ for """ + recipient + """.</description>"""
|
||||||
|
for entry in mailbox_file:
|
||||||
|
if entry['recipient'] == recipient:
|
||||||
|
post_data = post_data + """
|
||||||
|
<item>
|
||||||
|
<title>""" + entry['call'] + ' - ' + str(entry['dmr_id']) + """</title>
|
||||||
|
<link>""" + rss_link + """</link>
|
||||||
|
<description>""" + entry['message'] + """ - """ + entry['time'] + """</description>
|
||||||
|
</item>
|
||||||
|
"""
|
||||||
|
return Response(rss_header + post_data + "\n</channel>\n</rss>", mimetype='text/xml')
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run(debug = True, port=dash_port, host=dash_host)
|
app.run(debug = True, port=dash_port, host=dash_host)
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td style="text-align: center;"><button onclick="window.location.href='/';"> D-APRS Dashboard </button></td>
|
<td style="text-align: center;"><button onclick="window.location.href='/';"> D-APRS Dashboard </button></td>
|
||||||
<td style="text-align: center;"><button onclick="window.location.href='/map';"> Station Map </button></td>
|
<td style="text-align: center;"><button onclick="window.location.href='/map';"> Station Map </button></td>
|
||||||
|
<td style="text-align: center;"><button onclick="window.location.href='/mailbox';"> The Mailbox </button></td>
|
||||||
<td style="text-align: center;"><button onclick="window.location.href='/user';"> User Settings </button></td>
|
<td style="text-align: center;"><button onclick="window.location.href='/user';"> User Settings </button></td>
|
||||||
<td style="text-align: center;"><button onclick="window.location.href='/help';"> D-APRS Help </button></td>
|
<td style="text-align: center;"><button onclick="window.location.href='/help';"> D-APRS Help </button></td>
|
||||||
<td style="text-align: center;"><button onclick="window.location.href='/about';"> Gateway Contact </button></td>
|
<td style="text-align: center;"><button onclick="window.location.href='/about';"> Gateway Contact </button></td>
|
||||||
|
Loading…
Reference in New Issue
Block a user