diff --git a/app/main.py b/app/main.py index 45688a1..2264f63 100644 --- a/app/main.py +++ b/app/main.py @@ -383,6 +383,7 @@ class MainApp(MDApp): async def download(self,file_id,output_fn=None): self.log('downloading:',file_id) file_dat = await self.api.download(file_id) + self.log('file_dat =',file_dat) if not output_fn: file_id=file_dat['id'] file_ext=file_dat['ext'] diff --git a/app/screens/post/post.py b/app/screens/post/post.py index 529a8b0..98fd6e4 100644 --- a/app/screens/post/post.py +++ b/app/screens/post/post.py @@ -1,4 +1,4 @@ -from screens.base import ProtectedScreen +from screens.base import ProtectedScreen,BaseScreen from plyer import filechooser from kivymd.uix.label import MDLabel from kivymd.uix.textfield import MDTextField diff --git a/p2p/api.py b/p2p/api.py index 6ad762a..b9dc0bc 100644 --- a/p2p/api.py +++ b/p2p/api.py @@ -82,7 +82,7 @@ class Api(object): i = 0 self._node = await self.connect() while True: - self.log(f'Node status (minute {i}): {self._node}') + # self.log(f'Node status (minute {i}): {self._node}') # # get some sleep # if self.root.ids.btn1.state != 'down' and i >= 2: @@ -91,7 +91,7 @@ class Api(object): # self.root.ids.btn1.trigger_action() i += 1 - await asyncio.sleep(60) + await asyncio.sleep(5) # pass except asyncio.CancelledError as e: self.log('P2P node cancelled', e) @@ -119,6 +119,7 @@ class Api(object): if type(key_or_keys) in {list,tuple,dict}: keys = key_or_keys + self.log('??????!!!!!') res = await asyncio.gather(*[self.unpack_well_documented_val(await node.get(key)) for key in keys]) #log('RES?',res) else: @@ -144,13 +145,14 @@ class Api(object): #self.log('timestamp =',timestamp) if type(val)!=bytes: - value = str(val) - try: - value_bytes = value.encode('utf-8') - except UnicodeDecodeError: - value_bytes = value.encode('ascii') + # value = str(val) + # try: + # value_bytes = value.encode('utf-8') + # except UnicodeDecodeError: + # value_bytes = value.encode('ascii') + value_bytes = base64.b64encode(bytes(val,'utf-8')) else: - value_bytes=val + value_bytes=base64.b64encode(val) # encrypt? @@ -261,15 +263,23 @@ class Api(object): # time=float(time.decode()) #val=val.decode() # return time,val,pub,sign + self.log('valtype??',type(val),val) + # try: + # valdec = val.decode() + # except UnicodeDecodeError: + # valdec = val.decode('ascii') + # valdec = val #.decode() #base64.b64encode(val).decode() + valdec = base64.b64decode(val) + WDV={ 'time':float(time_b.decode()), - 'val':val, + 'val':valdec, 'to':to_pub, 'from':from_pub, 'sign':signature } - # self.log('GOT WDV:',WDV) + self.log('GOT WDV:',WDV) return WDV @@ -305,9 +315,14 @@ class Api(object): if res is None: return res def jsonize(entry): + self.log('jsonize!',entry) if not 'val' in entry: return entry val=entry['val'] - dat=json.loads(val.decode()) if val else val + try: + dat=json.loads(val) if val else val + except UnicodeDecodeError: + dat=val + self.log('dat??',dat) entry['val']=dat return entry @@ -477,7 +492,7 @@ class Api(object): parts=[] PARTS=[] buffer_size=100 - for part in bytes_from_file(filename,chunksize=1024*4): + for part in bytes_from_file(filename,chunksize=1024*2): part_id = get_random_id() part_ids.append(part_id) part_key='/part/'+part_id @@ -520,7 +535,10 @@ class Api(object): self.log('file_store!?',file_store) keys = ['/part/'+x for x in file_store['parts']] - time,pieces,pub,sign = await self.get(keys) + + #time,pieces,pub,sign = await self.get_val(keys) + pieces = await self.get_val(keys) + self.log('pieces = ',pieces) file_store['parts_data']=pieces return file_store @@ -544,13 +562,13 @@ class Api(object): async def get_val(self,uri): res=await self.get_json(uri) self.log('get_val() got',res) - if res is None: - return res - elif type(res) == dict: - return res.get('val',None) + r=None + if type(res) == dict: + r=res.get('val',None) elif type(res) == list: - return [x.get('val',None) for x in res] - return None + r=[x.get('val',None) for x in res] + self.log('get_val() giving back',r) + return r async def get_post(self,post_id): return await self.get_val(post_id) diff --git a/p2p/kad.py b/p2p/kad.py index 8c2478e..84a7139 100644 --- a/p2p/kad.py +++ b/p2p/kad.py @@ -205,32 +205,34 @@ class KadServer(Server): - # async def get(self, key): - # """ - # Get a key if the network has it. - - # Returns: - # :class:`None` if not found, the value otherwise. - # """ - # log.info("Looking up key %s", key) - # dkey = digest(key) - # # if this node has it, return it - # if self.storage.get(dkey) is not None: - # log.info('I already have this') - # return self.storage.get(dkey) - # node = Node(dkey) - # nearest = self.protocol.router.find_neighbors(node) - # log.info(f'My nearest nodes are: {nearest}') - # if not nearest: - # log.warning("There are no known neighbors to get key %s", key) - # return None - # spider = ValueSpiderCrawl(self.protocol, node, nearest, - # self.ksize, self.alpha) - # found = await spider.find() - - # log.info(f'spider done crawling: {spider}') - # log.info(f'spider found value: {found}') - # return found + async def get(self, key): + """ + Get a key if the network has it. + + Returns: + :class:`None` if not found, the value otherwise. + """ + log.info("Looking up key %s", key) + dkey = digest(key) + # if this node has it, return it + if self.storage.get(dkey) is not None: + log.info('I already have this') + return self.storage.get(dkey) + node = Node(dkey) + nearest = self.protocol.router.find_neighbors(node) + log.info(f'My nearest nodes are: {nearest}') + if not nearest: + log.warning("There are no known neighbors to get key %s", key) + return None + spider = ValueSpiderCrawl(self.protocol, node, nearest, + self.ksize, self.alpha) + found = await spider.find() + + log.info(f'spider done crawling: {spider}') + log.info(f'spider found value: {found}') + + self.storage[dkey]=found + return found async def set(self, key, value): """