+ implemented some menus and message drafting in pm plugin
* prevent block types from being too large in metadata processing
This commit is contained in:
		
							parent
							
								
									f42d308b2b
								
							
						
					
					
						commit
						f432d9193e
					
				
					 3 changed files with 138 additions and 1 deletions
				
			
		|  | @ -256,7 +256,9 @@ class OnionrUtils: | |||
|             Read metadata from a block and cache it to the block database | ||||
|         ''' | ||||
|         myBlock = Block(blockHash, self._core) | ||||
|         self._core.updateBlockInfo(blockHash, 'dataType', myBlock.getType()) | ||||
|         blockType = myBlock.getType() | ||||
|         if len(blockType) <= 10: | ||||
|             self._core.updateBlockInfo(blockHash, 'dataType', blockType) | ||||
| 
 | ||||
|     def escapeAnsi(self, line): | ||||
|         ''' | ||||
|  |  | |||
							
								
								
									
										5
									
								
								onionr/static-data/default-plugins/pms/info.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								onionr/static-data/default-plugins/pms/info.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,5 @@ | |||
| { | ||||
|     "name" : "pms", | ||||
|     "version" : "1.0", | ||||
|     "author" : "onionr" | ||||
| } | ||||
							
								
								
									
										130
									
								
								onionr/static-data/default-plugins/pms/main.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								onionr/static-data/default-plugins/pms/main.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,130 @@ | |||
| ''' | ||||
|     Onionr - P2P Microblogging Platform & Social network | ||||
| 
 | ||||
|     This default plugin handles private messages in an email like fashion | ||||
| ''' | ||||
| ''' | ||||
|     This program is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|     the Free Software Foundation, either version 3 of the License, or | ||||
|     (at your option) any later version. | ||||
| 
 | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU General Public License for more details. | ||||
| 
 | ||||
|     You should have received a copy of the GNU General Public License | ||||
|     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
| ''' | ||||
| 
 | ||||
| # Imports some useful libraries | ||||
| import logger, config, threading, time, readline | ||||
| from onionrblockapi import Block | ||||
| import onionrexceptions | ||||
| 
 | ||||
| plugin_name = 'pms' | ||||
| PLUGIN_VERSION = '0.0.1' | ||||
| 
 | ||||
| class MailStrings: | ||||
|     def __init__(self, mailInstance): | ||||
|         self.mailInstance = mailInstance | ||||
| 
 | ||||
|         self.programTag = 'OnionrMail v%s' % (PLUGIN_VERSION) | ||||
|         choices = ['view inbox', 'view sentbox', 'send message', 'help', 'quit'] | ||||
|         self.mainMenuChoices = choices | ||||
|         self.mainMenu = '''\n | ||||
| ----------------- | ||||
| 1. %s | ||||
| 2. %s | ||||
| 3. %s | ||||
| 4. %s | ||||
| 5. %s''' % (choices[0], choices[1], choices[2], choices[3], choices[4]) | ||||
| 
 | ||||
| class OnionrMail: | ||||
|     def __init__(self, pluginapi): | ||||
|         self.myCore = pluginapi.get_core() | ||||
|         self.strings = MailStrings(self) | ||||
| 
 | ||||
|         return | ||||
|      | ||||
|     def inbox(self): | ||||
|         print('PM Blocks:') | ||||
|         for blockHash in self.myCore.getBlocksByType('pm'): | ||||
|             print(blockHash) | ||||
| 
 | ||||
|         return | ||||
|      | ||||
|     def draftMessage(self): | ||||
|         message = '' | ||||
|         newLine = '' | ||||
|         recip = '' | ||||
|         entering = True | ||||
| 
 | ||||
|         while entering: | ||||
|             try: | ||||
|                 recip = logger.readline('Enter peer address, or q to stop:').strip() | ||||
|                 if recip in ('-q', 'q'): | ||||
|                     raise EOFError | ||||
|                 if not self.myCore._utils.validatePubKey(recip): | ||||
|                     raise onionrexceptions.InvalidPubkey('Must be a valid ed25519 base32 encoded public key') | ||||
|             except onionrexceptions.InvalidPubkey: | ||||
|                 logger.warn('Invalid public key') | ||||
|             except (KeyboardInterrupt, EOFError): | ||||
|                 entering = False | ||||
|             else: | ||||
|                 break | ||||
|         else: | ||||
|             # if -q or ctrl-c/d, exit function here, otherwise we successfully got the public key | ||||
|             return | ||||
| 
 | ||||
|         print('Enter your message, stop by entering -q on a new line.') | ||||
|         while newLine != '-q': | ||||
|             try: | ||||
|                 newLine = input() | ||||
|             except (KeyboardInterrupt, EOFError): | ||||
|                 pass | ||||
|             if newLine == '-q': | ||||
|                 continue | ||||
|             newLine += '\n' | ||||
|             message += newLine | ||||
|          | ||||
|         print('Inserting encrypted message as Onionr block....') | ||||
| 
 | ||||
|         self.myCore.insertBlock(message, header='pm', encryptType='asym', asymPeer=recip) | ||||
| 
 | ||||
|     def menu(self): | ||||
|         choice = '' | ||||
|         while True: | ||||
| 
 | ||||
|             print(self.strings.programTag + self.strings.mainMenu.title()) # print out main menu | ||||
| 
 | ||||
|             try: | ||||
|                 choice = logger.readline('Enter 1-%s:\n' % (len(self.strings.mainMenuChoices))).lower() | ||||
|             except (KeyboardInterrupt, EOFError): | ||||
|                 choice = '5' | ||||
| 
 | ||||
|             if choice in (self.strings.mainMenuChoices[0], '1'): | ||||
|                 self.inbox() | ||||
|             elif choice in (self.strings.mainMenuChoices[2], '3'): | ||||
|                 self.draftMessage() | ||||
|             elif choice in (self.strings.mainMenuChoices[4], '5'): | ||||
|                 logger.info('Goodbye.') | ||||
|                 break | ||||
|             else: | ||||
|                 logger.warn('Invalid choice.') | ||||
|         return | ||||
| 
 | ||||
| 
 | ||||
| def on_init(api, data = None): | ||||
|     ''' | ||||
|         This event is called after Onionr is initialized, but before the command | ||||
|         inputted is executed. Could be called when daemon is starting or when | ||||
|         just the client is running. | ||||
|     ''' | ||||
| 
 | ||||
|     pluginapi = api | ||||
|     mail = OnionrMail(pluginapi) | ||||
|     api.commands.register(['mail'], mail.menu) | ||||
|     api.commands.register_help('mail', 'Interact with OnionrMail') | ||||
|     return | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue