+ 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
|
Read metadata from a block and cache it to the block database
|
||||||
'''
|
'''
|
||||||
myBlock = Block(blockHash, self._core)
|
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):
|
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