started work on flow plugin

This commit is contained in:
Kevin Froman 2018-07-11 02:35:22 -05:00
parent ba1b154f52
commit f918ae9b9c
No known key found for this signature in database
GPG Key ID: 0D414D0FE405B63B
5 changed files with 66 additions and 2 deletions

View File

@ -177,6 +177,7 @@ class OnionrCommunicatorDaemon:
logger.info('Block passed proof, saving.') logger.info('Block passed proof, saving.')
self._core.setData(content) self._core.setData(content)
self._core.addToBlockDB(blockHash, dataSaved=True) self._core.addToBlockDB(blockHash, dataSaved=True)
self._core.utils.processBlockMetadata(blockHash) # caches block metadata values to block database
else: else:
logger.warn('POW failed for block ' + blockHash) logger.warn('POW failed for block ' + blockHash)
else: else:

View File

@ -239,6 +239,7 @@ class Core:
dataSaved - if the data has been saved for the block dataSaved - if the data has been saved for the block
sig - optional signature by the author (not optional if author is specified) sig - optional signature by the author (not optional if author is specified)
author - multi-round partial sha3-256 hash of authors public key author - multi-round partial sha3-256 hash of authors public key
dateClaimed - timestamp claimed inside the block, only as trustworthy as the block author is
''' '''
if os.path.exists(self.blockDB): if os.path.exists(self.blockDB):
raise Exception("Block database already exists") raise Exception("Block database already exists")
@ -252,7 +253,8 @@ class Core:
dataFound int, dataFound int,
dataSaved int, dataSaved int,
sig text, sig text,
author text author text,
dateClaimed int
); );
''') ''')
conn.commit() conn.commit()
@ -658,7 +660,7 @@ class Core:
sets info associated with a block sets info associated with a block
''' '''
if key not in ('dateReceived', 'decrypted', 'dataType', 'dataFound', 'dataSaved', 'sig', 'author'): if key not in ('dateReceived', 'decrypted', 'dataType', 'dataFound', 'dataSaved', 'sig', 'author', 'dateClaimed'):
return False return False
conn = sqlite3.connect(self.blockDB) conn = sqlite3.connect(self.blockDB)
@ -742,6 +744,8 @@ class Core:
self.addToBlockDB(retData, selfInsert=True, dataSaved=True) self.addToBlockDB(retData, selfInsert=True, dataSaved=True)
self.setBlockType(retData, meta['type']) self.setBlockType(retData, meta['type'])
if retData != False:
events.event('insertBlock', onionr = None, threaded = False)
return retData return retData
def introduceNode(self): def introduceNode(self):

View File

@ -245,6 +245,13 @@ class OnionrUtils:
return False return False
else: else:
return True return True
def processBlockMetadata(self, blockHash):
'''
Read metadata from a block and cache it to the block database
'''
myBlock = Block(myBlock, self._core)
def getBlockDBHash(self): def getBlockDBHash(self):
''' '''

View File

@ -0,0 +1,5 @@
{
"name" : "flow",
"version" : "1.0",
"author" : "onionr"
}

View File

@ -0,0 +1,47 @@
'''
Onionr - P2P Microblogging Platform & Social network
This default plugin handles "flow" messages (global chatroom style communication)
'''
'''
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
from onionrblockapi import Block
plugin_name = 'flow'
class OnionrFlow:
def __init__(self):
logger.info("HELLO")
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.
'''
# Doing this makes it so that the other functions can access the api object
# by simply referencing the variable `pluginapi`.
global pluginapi
pluginapi = api
api.commands.register(['flow'], OnionrFlow)
api.commands.register_help('flow', 'Open the flow messaging interface')
return