+ implemented some menus and message drafting in pm plugin
* prevent block types from being too large in metadata processingmaster
parent
f42d308b2b
commit
f432d9193e
|
@ -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):
|
||||
'''
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"name" : "pms",
|
||||
"version" : "1.0",
|
||||
"author" : "onionr"
|
||||
}
|
|
@ -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…
Reference in New Issue