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(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):
|
||||
user_settings = ast.literal_eval(os.popen('cat ./user_settings.txt').read())
|
||||
try:
|
||||
@ -285,6 +308,12 @@ def process_sms(_rf_src, sms):
|
||||
elif '@REM SOS' == sms:
|
||||
os.remove('/tmp/gps_data_user_sos.txt')
|
||||
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:
|
||||
grid_square = re.sub('@MH ', '', sms)
|
||||
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:
|
||||
user_bb_file.write("[]")
|
||||
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
|
||||
|
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(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):
|
||||
user_settings = ast.literal_eval(os.popen('cat ./user_settings.txt').read())
|
||||
try:
|
||||
@ -277,6 +299,12 @@ def process_sms(_rf_src, sms):
|
||||
elif '@REM SOS' == sms:
|
||||
os.remove('/tmp/gps_data_user_sos.txt')
|
||||
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:
|
||||
grid_square = re.sub('@MH ', '', sms)
|
||||
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:
|
||||
user_bb_file.write("[]")
|
||||
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
|
||||
parser = argparse.ArgumentParser()
|
||||
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))
|
||||
|
||||
@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')
|
||||
def bb_rss():
|
||||
try:
|
||||
@ -421,5 +483,28 @@ def bb_rss():
|
||||
return Response(rss_header + post_data + "\n</channel>\n</rss>", mimetype='text/xml')
|
||||
except:
|
||||
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__':
|
||||
app.run(debug = True, port=dash_port, host=dash_host)
|
||||
|
@ -6,6 +6,7 @@
|
||||
<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='/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='/help';"> D-APRS Help </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