add mailbox feature

This commit is contained in:
KF7EEL 2021-03-01 15:58:09 -08:00
parent dfedf9eade
commit 12dc612c2e
4 changed files with 158 additions and 2 deletions

View File

@ -183,7 +183,30 @@ def dashboard_bb_write(call, dmr_id, time, bulletin):
user_bb_file.close() user_bb_file.close()
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

View File

@ -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)')

View File

@ -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>&nbsp;</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>&nbsp;</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)

View File

@ -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>