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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user