got map working

app-gui
quadrismegistus 4 years ago
parent 348dc4b30b
commit f249767b1a

@ -1,8 +1,8 @@
#from p2p_api import
PORT_LISTEN = 5969
# #from p2p_api import
# PORT_LISTEN = 5969
# NODES_PRIME = [("128.232.229.63",8467), ("68.66.241.111",8467)]
NODES_PRIME = [("128.232.229.63",8467)]
# # NODES_PRIME = [("128.232.229.63",8467), ("68.66.241.111",8467)]
# NODES_PRIME = [("128.232.229.63",8467)]
@ -14,150 +14,150 @@ NODES_PRIME = [("128.232.229.63",8467)]
DEFAULT_URI='/login/'
import random,platform
HORIZONTAL = True # random.choice([True,True,True,False])
FACTOR=1
WINDOW_SIZE = (1136*FACTOR,640*FACTOR) if HORIZONTAL else (640*FACTOR,1136*FACTOR)
PLAYING_CARDS = (2.5,3.5)
ASPECT_RATIO = PLAYING_CARDS[0]/PLAYING_CARDS[1]
ASPECT_RATIO = 1/ASPECT_RATIO
HEIGHT = 850
if platform.platform().startswith('Linux'):
HEIGHT *= 1.25
WINDOW_SIZE=int(HEIGHT),int(HEIGHT * ASPECT_RATIO)
BG_IMG='assets/bg-brown.png'
grass=(201,203,163)
russiangreen = (109,140,96)
huntergreen = (67,92,61)
kombugreen = (49,67,45)
pinetreegreen = (29,40,27)
junglegreen = (15, 21, 14)
browncoffee=(77, 42, 34)
rootbeer=(38, 7, 1)
blackbean=(61, 12, 2)
burntumber=(132, 55, 34)
brownsugar=(175, 110, 81)
antiquebrass= (198, 144, 118)
royalbrown=(94, 55, 46)
bole=(113, 65, 55)
liver= (110, 56, 31)
bistre=(58, 33, 14)
bistre2=(43, 21, 7)
skin1=(89, 47, 42)
skin2=(80, 51, 53)
skin3=(40, 24, 26)
grullo=177, 158, 141
smokyblack=33, 14, 0
liverchestnut=148, 120, 96
ashgray=196, 199, 188
livchestnut2=156, 106, 73
beaver=165, 134, 110
rawumber=120, 95, 74
persianred=202,52,51
vermillion=126,25,27
indianred=205,92,92
barnred=124,10,2
maroon=128,0,0
bloodred=98, 23, 8
rust=188, 57, 8
darksienna=34, 9, 1
yellowcrayola=246, 170, 28
darkred=148, 27, 12
rosewood=94, 11, 21
redviolet=144, 50, 61
bone=217, 202, 179
bronze=188, 128, 52
shadow=140, 122, 107
orangered=194, 3, 3
# DEFAULT_URI='/login/'
# import random,platform
# HORIZONTAL = True # random.choice([True,True,True,False])
# FACTOR=1
# WINDOW_SIZE = (1136*FACTOR,640*FACTOR) if HORIZONTAL else (640*FACTOR,1136*FACTOR)
# PLAYING_CARDS = (2.5,3.5)
# ASPECT_RATIO = PLAYING_CARDS[0]/PLAYING_CARDS[1]
# ASPECT_RATIO = 1/ASPECT_RATIO
# HEIGHT = 850
# if platform.platform().startswith('Linux'):
# HEIGHT *= 1.25
# WINDOW_SIZE=int(HEIGHT),int(HEIGHT * ASPECT_RATIO)
# BG_IMG='assets/bg-brown.png'
# grass=(201,203,163)
# russiangreen = (109,140,96)
# huntergreen = (67,92,61)
# kombugreen = (49,67,45)
# pinetreegreen = (29,40,27)
# junglegreen = (15, 21, 14)
# browncoffee=(77, 42, 34)
# rootbeer=(38, 7, 1)
# blackbean=(61, 12, 2)
# burntumber=(132, 55, 34)
# brownsugar=(175, 110, 81)
# antiquebrass= (198, 144, 118)
# royalbrown=(94, 55, 46)
# bole=(113, 65, 55)
# liver= (110, 56, 31)
# bistre=(58, 33, 14)
# bistre2=(43, 21, 7)
# skin1=(89, 47, 42)
# skin2=(80, 51, 53)
# skin3=(40, 24, 26)
# grullo=177, 158, 141
# smokyblack=33, 14, 0
# liverchestnut=148, 120, 96
# ashgray=196, 199, 188
# livchestnut2=156, 106, 73
# beaver=165, 134, 110
# rawumber=120, 95, 74
# persianred=202,52,51
# vermillion=126,25,27
# indianred=205,92,92
# barnred=124,10,2
# maroon=128,0,0
# bloodred=98, 23, 8
# rust=188, 57, 8
# darksienna=34, 9, 1
# yellowcrayola=246, 170, 28
# darkred=148, 27, 12
# rosewood=94, 11, 21
# redviolet=144, 50, 61
# bone=217, 202, 179
# bronze=188, 128, 52
# shadow=140, 122, 107
# orangered=194, 3, 3
dutchwhite=229,219,181
# black=(0,0,0)
black=15, 15, 15 #5, 8, 13
eerieblack=23, 22, 20
bistre=58, 38, 24
tuscanred=117, 64, 67
grullo2=154, 136, 115
blackolive=55, 66, 61
dogreen=103, 116, 35
sage=187, 193, 145
alabaster2 = 241, 236, 226
coyotebrown = 138, 93, 61
vandykebrown = 90, 62, 41
darksienna2=55, 6, 23
xiketic=3, 7, 30
rossacorsa=208, 0, 0
raisinblack=38, 34, 34
coffee2=67, 58, 58
rufusred=171, 4, 4
darksienna3=56, 22, 13
black2=0, 20, 39
xanadu=112, 141, 129
jasmine=244, 213, 141
ioe=191, 6, 3
dred=141, 8, 1
caputmort1=74, 36, 25
# SCHEME = 'lgreen'
# SCHEME = 'bronze'
SCHEME = 'dark'
# light green theme?
if SCHEME=='lgreen':
COLOR_TOOLBAR= huntergreen #bone #smokyblack #5,5,5 #russiangreen #pinetreegreen #kombugreen #(12,5,5) #russiangreen
COLOR_BG = grass # russiangreen #(0,73,54)
COLOR_LOGO = coyotebrown # grass#russiangreen #(0,0,0) #(0,0,0) #(151,177,140) #(132,162,118) #(109,140,106)
COLOR_TEXT = black #(255,245,200) #(0,0,0,1) #(241,233,203) #COLOR_ICON #(207,219,204) #(239,235,206) # (194,211,187) # (171,189,163) # (222,224,198) # COLOR_LOGO #(223, 223, 212)
COLOR_CARD = bone #(67,92,61) #(12,9,10)
COLOR_CARD_BORDER = COLOR_CARD
COLOR_ICON=COLOR_LOGO
elif SCHEME=='bronze':
COLOR_TOOLBAR= junglegreen
COLOR_BG = bronze
COLOR_LOGO = rufusred #yellowcrayola #0,0,0
COLOR_TEXT = black
COLOR_CARD = bone
COLOR_CARD_BORDER = COLOR_CARD
COLOR_ICON=COLOR_LOGO
else:
# COLOR_TOOLBAR= black
# COLOR_TOOLBAR=bronze
# COLOR_LOGO = black #bronze #0,0,0
# dutchwhite=229,219,181
# # black=(0,0,0)
# black=15, 15, 15 #5, 8, 13
# eerieblack=23, 22, 20
# bistre=58, 38, 24
# tuscanred=117, 64, 67
# grullo2=154, 136, 115
# blackolive=55, 66, 61
# dogreen=103, 116, 35
# sage=187, 193, 145
# alabaster2 = 241, 236, 226
# coyotebrown = 138, 93, 61
# vandykebrown = 90, 62, 41
# darksienna2=55, 6, 23
# xiketic=3, 7, 30
# rossacorsa=208, 0, 0
# raisinblack=38, 34, 34
# coffee2=67, 58, 58
# rufusred=171, 4, 4
# darksienna3=56, 22, 13
# black2=0, 20, 39
# xanadu=112, 141, 129
# jasmine=244, 213, 141
# ioe=191, 6, 3
# dred=141, 8, 1
# caputmort1=74, 36, 25
# # SCHEME = 'lgreen'
# # SCHEME = 'bronze'
# SCHEME = 'dark'
# # light green theme?
# if SCHEME=='lgreen':
# COLOR_TOOLBAR= huntergreen #bone #smokyblack #5,5,5 #russiangreen #pinetreegreen #kombugreen #(12,5,5) #russiangreen
# COLOR_BG = grass # russiangreen #(0,73,54)
# COLOR_LOGO = coyotebrown # grass#russiangreen #(0,0,0) #(0,0,0) #(151,177,140) #(132,162,118) #(109,140,106)
# COLOR_TEXT = black #(255,245,200) #(0,0,0,1) #(241,233,203) #COLOR_ICON #(207,219,204) #(239,235,206) # (194,211,187) # (171,189,163) # (222,224,198) # COLOR_LOGO #(223, 223, 212)
# COLOR_CARD = bone #(67,92,61) #(12,9,10)
# COLOR_CARD_BORDER = COLOR_CARD
# COLOR_ICON=COLOR_LOGO
# elif SCHEME=='bronze':
# COLOR_TOOLBAR= junglegreen
# COLOR_BG = bronze
# COLOR_LOGO = rufusred #yellowcrayola #0,0,0
# COLOR_TEXT = black
# COLOR_CARD = bone
# COLOR_CARD_BORDER = COLOR_CARD
# COLOR_ICON=COLOR_LOGO
# else:
# # COLOR_TOOLBAR= black
# # COLOR_TOOLBAR=bronze
# # COLOR_LOGO = black #bronze #0,0,0
# COLOR_BG = black
COLOR_BG=bistre
COLOR_TOOLBAR=black
COLOR_LOGO=bronze
COLOR_TEXT = black
COLOR_CARD = bone
COLOR_CARD_BORDER = COLOR_CARD
COLOR_ICON=COLOR_LOGO
COLOR_ACCENT = huntergreen
# # COLOR_BG = black
# COLOR_BG=bistre
# COLOR_TOOLBAR=black
# COLOR_LOGO=bronze
# COLOR_TEXT = black
# COLOR_CARD = bone
# COLOR_CARD_BORDER = COLOR_CARD
# COLOR_ICON=COLOR_LOGO
# COLOR_ACCENT = huntergreen
COLOR_INACTIVE = COLOR_CARD
COLOR_ACTIVE = russiangreen
# COLOR_INACTIVE = COLOR_CARD
# COLOR_ACTIVE = russiangreen

@ -124,6 +124,7 @@ class MessagePopup(MDDialog2):
pass
class MessagePopupCard(MDDialog2):
def __init__(self,*x,**y):
@ -134,8 +135,8 @@ class MessagePopupCard(MDDialog2):
# self.color_bg=rgb(*COLOR_CARD)
self.ok_to_continue=False
#def on_dismiss(self):
# return True
def on_dismiss(self):
return True
def on_touch_down(self,touch):
self.ok_to_continue=True
@ -145,7 +146,6 @@ class MessagePopupCard(MDDialog2):
class TextInputPopupCard(MDDialog2):
def say(self,x):
self.ok_to_continue=True
@ -178,17 +178,23 @@ class TextInputPopupCard(MDDialog2):
self.field.line_color_focus=rgb(*COLOR_TEXT)
self.field.line_color_normal=rgb(*COLOR_TEXT,a=0.25)
self.field.font_name=FONT_PATH
self.field.font_size='20sp'
self.field_label = UsernameLabel(text='password:' if password else input_name)
self.field_label.font_name=FONT_PATH
self.field_label.font_size='20sp'
if title:
self.title_label = UsernameLabel(text=title)
self.title_label.halign='center'
self.title_label.font_size='20sp'
self.title_label.pos_hint={'center_x':0.5}
self.title_label.font_name=FONT_PATH
#self.field_layout.add_widget(self.title_label)
self.layout.add_widget(self.title_label)
self.field_layout.add_widget(self.field_label)
self.field_layout.add_widget(self.field)
self.layout.add_widget(self.field_layout)
@ -437,8 +443,17 @@ class MainApp(MDApp, Logger):
self.root.change_screen_from_uri(self.uri if self.uri else DEFAULT_URI)
# build the walker
self.walker=MazeWalker(callbacks=self.callbacks)
self.torpy_logger = logging.getLogger('torpy')
self.torpy_logger.propagate=False
self.torpy_logger.addHandler(self.walker)
import ipinfo
ipinfo_access_token = '90df1baf7c373a'
self.ipinfo_handler = ipinfo.getHandler(ipinfo_access_token)
from komrade.app.screens.map import MapWidget
self.map = MapWidget()
return self.root
@ -446,6 +461,29 @@ class MainApp(MDApp, Logger):
# kommie = Komrade(username)
# if self.exists_locally_as_contact()
@property
def callbacks(self):
return {
'torpy_guard_node_connect':self.callback_on_hop,
'torpy_extend_circuit':self.callback_on_hop,
}
async def callback_on_hop(self,rtr):
if not hasattr(self,'hops'): self.hops=[]
if not self.map.opened:
self.map.open()
# self.map.draw()
deets = self.ipinfo_handler.getDetails(rtr.ip)
self.hops.append((rtr,deets))
lat,long=tuple(float(_) for _ in deets.loc.split(','))
flag=f'{deets.city}, {deets.country_name} ({rtr.nickname})'
self.map.add_point(lat,long,flag)
self.map.draw()
import asyncio
# await asyncio.sleep(2)
logger.info('CALLBACK ON HOP: ' + flag)
def load_store(self):
if not self.store.exists('user'): return
@ -615,6 +653,8 @@ class MainApp(MDApp, Logger):
if hasattr(self,'msg_dialog0'):
self.root.remove_widget(self.msg_dialog0)
if hasattr(self.msg_dialog0,'card'):
self.msg_dialog0.remove_widget(self.msg_dialog0.card)
await asyncio.sleep(0.1)
while not self.msg_dialog.ok_to_continue:

@ -27,7 +27,7 @@
pos_hint: {'center_x':0.5, 'center_y':0.5}
size_hint:0.5,0.5
padding:'10dp'
md_bg_color:0,0,0,1
md_bg_color:rgb(*COLOR_BG) #0,0,0,1
canvas:
Color:
rgb: 1,0,0,2
@ -45,6 +45,14 @@
font_name: 'assets/font.otf'
size_hint:1,None
<MapImage>:
canvas:
Color:
rgb: (0, 0, 0, 0)
Rectangle:
texture: self.texture
size: self.width + 20, self.height + 20
pos: self.x - 10, self.y - 10
@ -53,7 +61,7 @@
<ProgressPopup>:
type: "custom"
size_hint: (None, None)
size: ('200dp','200dp')
size: ('333sp','333sp')
# md_bg_color: 0,0,0,1
MDBoxLayout:

@ -62,7 +62,6 @@ class LoginScreen(BaseScreen):
self.label_title.markup=True
self.label_title.color=rgb(*COLOR_TEXT)
self.label_title.text='Welcome,'
self.label_title.font_size='28sp'
self.layout.add_widget(get_separator('20sp'))
self.layout.add_widget(self.label_title)
self.layout.add_widget(get_separator('30sp'))
@ -169,6 +168,22 @@ class LoginScreen(BaseScreen):
# await self.app.get_input('hello?',get_pass=True,title='gimme your passwrdd')
# await self.app.get_input('hello?',get_pass=False,title='gimme your fav color bitch')
# return
# self.remove_widget(self.layout)
# from screens.map import MapWidget,default_places
# map = MapWidget()
# map.open()
# map.add_point(*default_places['Cambridge'],desc='Cambridge')
# map.draw()
# await asyncio.sleep(1)
# map.add_point(*default_places['San Francisco'],desc='San Francisco')
# map.draw()
# await asyncio.sleep(1)
# map.add_point(*default_places['Reykjavik'],desc='Reykjavik')
# map.draw()
# await asyncio.sleep(1)
# return
# return
@ -222,7 +237,7 @@ class LoginScreen(BaseScreen):
async def register(self,name):
async def logfunc(*x,**y):
if not 'komrade_name' in y: y['komrade_name']='Keymaker'
await self.app.stat(*x,**y)
#await self.app.stat(*x,**y)
kommie = Komrade(name)
@ -251,7 +266,7 @@ class LoginScreen(BaseScreen):
await logfunc(f'The first is your "public key", which you can share with anyone. With it, someone can write you an encrypted message.',komrade_name='Keymaker')
await logfunc(f'You can share it by pasting it to someone in a secure message:\n\n{uri_s}',komrade_name='Keymaker')
await logfunc(f'You can share it by pasting it to someone in a secure message:\n{uri_s}',komrade_name='Keymaker')
await logfunc(f'You can also share it IRL, phone to phone, as a QR code. This is what it will look like.',img_src=fnfn,komrade_name='Keymaker')
@ -272,7 +287,9 @@ class LoginScreen(BaseScreen):
### PRIVATE KEY
await logfunc(f"(2) Your PRIVATE encryption key, on the other hand, must be stored only on your device hardware. In fact it's so sensitive we'll even encrypt the encryption key itself.",pause=True,use_prefix=False)
await logfunc(f"(2) Your PRIVATE encryption key, on the other hand, must be stored only on your device hardware: {privkey}")
await logfunc(f"In fact this private encryption is so sensitive we'll encrypt it itself before storing it on your device -- locking the key itself away with a password.",pause=True,use_prefix=False)
passphrase = await self.app.get_input('Please enter a memorable password.',
get_pass=True
@ -282,32 +299,25 @@ class LoginScreen(BaseScreen):
privkey_decr = KomradeSymmetricKeyWithPassphrase(passhash=passhash)
print()
await logfunc(f'''Let's immediately run whatever you typed in for your password through a 1-way hashing algorithm (SHA-256), inflating it to (redacted):\n\n{make_key_discreet_str(passhash)}''',pause=True,clear=False)
await logfunc(f'''We immediately whatever you typed through a 1-way hashing algorithm (SHA-256), scrambling it into (redacted):\n{make_key_discreet_str(passhash)}''',pause=True,clear=False)
privkey_encr = privkey_decr.encrypt(privkey.data)
privkey_encr_obj = KomradeEncryptedAsymmetricPrivateKey(privkey_encr)
kommie._keychain['privkey_encr']=privkey_encr_obj
self.log('My keychain now looks like v2:',dict_format(kommie.keychain()))
await logfunc('With this inflated password we can encrypt your super-sensitive private key.',pause=True,clear=True)
await logfunc(f"Your original private key looks like this (redacted):\n\n{privkey}",pause=True,clear=False)
await logfunc(f'With this scrambled password we can encrypt your super-sensitive private key.')
await logfunc(f"After we encrypt it with your passworded key, it looks like this (redacted):\n\n{privkey_encr_obj}",pause=True,clear=False)
await logfunc('Only this encrypted version is stored.',pause=True,clear=True)
await logfunc(f'Private key before encryption: {privkey.discreet}',pause=True,clear=False)
await logfunc(f'Private key after encryption: {privkey_encr_obj.discreet}',pause=True,clear=False)
# ### PUBLIC KEY
await logfunc('You must also register your username and public key with Komrade @Operator on the remote server',pause=False,clear=False)
await logfunc('Connecting you to the @Operator...',komrade_name='Telephone')
## CALL OP WITH PUBKEY
self.app.open_dialog('Calling @Operator...')
# self.app.open_dialog('Calling @Operator...')
logger.info('got here!')
resp_msg_d = await kommie.ring_ring(
{
@ -316,7 +326,7 @@ class LoginScreen(BaseScreen):
},
route='register_new_user'
)
self.app.close_dialog()
# self.app.close_dialog()
# print()
await logfunc(resp_msg_d.get('status'),komrade_name='Operator',pause=True)

@ -0,0 +1,264 @@
import os,sys; sys.path.append(os.path.abspath(os.path.join(os.path.abspath(os.path.join(os.path.dirname(__file__),'..')),'..','..')))
from komrade.app.screens.dialog import MDDialog2
import cartopy
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from kivymd.uix.boxlayout import MDBoxLayout
from kivymd.uix.gridlayout import MDGridLayout
from kivymd.uix.button import MDFlatButton
from kivymd.uix.label import MDLabel
print('\n'.join(sys.path))
from komrade.constants import *
# from komrade.app.main import rgb
import io
from kivy.core.image import Image as CoreImage
from kivy.uix.image import Image,AsyncImage
from kivy.core.window import Window
from kivy.app import App
import logging
logger=logging.getLogger(__name__)
def rgb(r,g,b,a=1):
return (r/255,g/255,b/255,a)
class MapImage(AsyncImage):
pass
class MapWidget(MDDialog2):
@property
def projection(self):
# return ccrs.PlateCarree()
return ccrs.LambertConformal()
@property
def figsize(self):
# fig = plt.figure()
# dpi=fig.dpi // 2
dpi=40
width,height=Window.size
return (width//dpi, height//dpi)
# bbox = fig.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
# width, height = bbox.width*fig.dpi, bbox.height*fig.dpi
# return (width,height)
@property
def color_land(self): return rgb(*darksienna3) #darksienna3)
@property
def color_water(self): return rgb(*grullo2)
@property
def color_label(self): return self.color_land
@property
def color_marker(self): return rgb(*rossacorsa)
@property
def color_line(self): return self.color_marker
def __init__(self):
self.last_lat = None
self.last_long = None
self.points = []
self.opened=False
self.label=None
# self.fig = fig = plt.figure(figsize=(20,10))
plt.rcParams["figure.figsize"] = self.figsize
self.ax = ax = plt.axes(
projection=self.projection,
)
# ax.set_extent([-170, 165, -55, 75])
# ax.background_patch.set_facecolor(rgb(*COLOR_CARD)[:3])
# ax.outline_patch.set_facecolor(rgb(*COLOR_CARD)[:3])
# self.ax.stock_img()
# self.ax.coastlines(color=rgb(*COLOR_CARD))
ax.add_feature(cartopy.feature.OCEAN, zorder=0, color=self.color_water,edgecolor=self.color_water)
ax.add_feature(cartopy.feature.LAND, zorder=0, color=self.color_land, edgecolor=self.color_land)
ax.outline_patch.set_visible(False)
ax.background_patch.set_visible(False)
# ax.set_global()
# ax.gridlines()
self.layout=MDBoxLayout()
self.layout.orientation='vertical'
self.layout.cols=1
self.layout.size_hint=(None,None)
self.layout.size=(Window.size[0],Window.size[1]) # ('666sp','666sp')
self.layout.md_bg_color=rgb(*eerieblack) #rgb(*COLOR_BG,a=1)
# self.layout.adaptive_height=True
# self.layout.height=self.layout.minimum_height
self.layout.spacing='0sp'
self.layout.padding='0sp'
self.img=None
self.label_layout=MDGridLayout()
self.label_layout.orientation='vertical'
self.label_layout.cols=1
self.label_layout.row_default_height='25sp'
self.label_layout.row_force_default='25sp'
self.label_layout.rows=10
self.label_layout.pos_hint={'y':0}
self.label_layout.size_hint=(None,None)
self.label_layout.width=Window.size[0]
self.label_layout.height='300sp'
# self.label_layout.size=(Window.size[0],'400sp')
# self.label_layout.size=Window.size # ('666sp','666sp')
# self.layout.add_widget(self.label_layout)
# do dialog's intro
super().__init__(
type='custom',
text='',
content_cls=self.layout,
buttons=[
MDFlatButton(
text="disconnect",
text_color=rgb(*COLOR_TEXT),
md_bg_color = rgb(*eerieblack), #(0,0,0,1),
theme_text_color='Custom',
on_release=self.dismiss,
font_name=FONT_PATH
)
],
color_bg = rgb(*eerieblack), #(0,0,0,1),
overlay_color=(0,0,0,0),
background_color=(0,0,0,0)
)
self.ids.text.text_color=rgb(*COLOR_TEXT)
self.ids.text.font_name=FONT_PATH
self.size=Window.size #('666sp','666sp')
# self.
# self.adaptive_height=True
def draw(self):
from matplotlib import transforms
from PIL import Image as pImage
from PIL import ImageOps
tr = transforms.Affine2D().rotate_deg(90)
# buf = io.BytesIO()
# plt.ion()
odir=f'/home/ryan/komrade/data/maps/'
if not os.path.exists(odir): os.makedirs(odir)
ofn=os.path.join(odir,f't_{len(self.points)}.png')
plt.gca().invert_yaxis()
plt.savefig(ofn, format='png',transparent=True,pad_inches=0.1,bbox_inches = 'tight')
# flip?
# im = pImage.open(ofn)
# im = im.rotate(90)
# im.save(ofn)
if not self.img:
self.img= AsyncImage(source=ofn)
self.img.background_color=(0,0,0,0)
self.img.overlay_color=(0,0,0,0)
# self.img.texture.flip_horizontal()
self.img.pos_hint={'center_x':0.48,'center_y':0.5}
# self.img.size=Window.size
# self.img.texture = img
self.img.add_widget(self.label_layout,1)
self.layout.add_widget(self.img,1)
else:
self.img.source=ofn
# self.img.size_hint=(1,1)
# self.img.width=Window.size[0]
# self.img.allow_stretch=True
def add_point(self,lat,long,desc):
logger.info(f'adding point? {desc} {lat}, {long}')
# plt.text(
# long+3,
# lat-12,
# desc,
# horizontalalignment='left',
# transform=self.projection
# )
import random
from komrade.constants import ALL_COLORS
color = random.choice(ALL_COLORS)
self.points+=[(lat,long,desc)]
# point
plt.plot(
long,
lat,
'+',
markersize=25,
linewidth=7,
color=rgb(*color),
transform=ccrs.Geodetic(),
)
# line
if self.last_lat and self.last_long:
plt.plot(
[self.last_long, long],
[self.last_lat, lat],
color=rgb(*color), #self.color_line,
linewidth=7, marker='',
transform=ccrs.Geodetic(),
)
desc = '\n'.join(desc for lat,long,desc in self.points[-1:])
#if self.label:
# self.img.remove_widget(self.label)
self.label=label=MDLabel(text=desc)
label.color=rgb(*color) #self.color_label
label.font_name=FONT_PATH
label.font_size='20sp'
# label.size_hint=(1,1)
label.width=Window.size[0]
label.height='25sp'
label.valign='top'
# label.height='400sp'
# label.pos_hint = {'center_y':0.1+(0.1 * len(self.points))}
# label.pos = (0.5,0)
self.label_layout.add_widget(label)
self.last_lat,self.last_long = lat,long
self.ax.set_global()
# wait and show
def open(self,maxwait=666,pulse=0.1):
self.draw()
super().open()
self.opened=True
# await asyncio.sleep(pulse)
# waited=0
# while not self.ok_to_continue:
# await asyncio.sleep(pulse)
# waited+=pulse
# if waited>maxwait: break
# # logger.info(f'waiting for {waited} seconds... {self.ok_to_continue} {self.response}')
# return self.response
default_places = {
'Cambridge':(52.205338,0.121817),
'Sydney':(-33.868820,151.209290),
'New York':(40.712776,-74.005974),
'Hong Kong':(22.278300,114.174700),
'Cape Town':(-33.9249, 18.4241),
'San Francisco':(37.774929,-122.419418),
'Honolulu':(21.306944,-157.858337),
'Tokyo':(35.689487,139.691711),
'Ushuaia':(-54.801910,-68.302948),
'Reykjavik':(64.126518,-21.817438)
}
def test_map():
map = MapWidget()
plt.show()
if __name__=='__main__':
test_map()

@ -28,15 +28,22 @@ class MazeWalker(Handler):
# print('! Found router:',record.msg % record.args)
# print(router.ip,walk)
# print()
f=None
if record.msg.startswith('Connecting to guard node'):
f = self._callbacks.get('torpy_guard_node_connect')
if f: f(router)
elif record.msg.startswith('Extending the circuit'):
f = self._callbacks.get('torpy_extend_circuit')
if f: f(router)
# import asyncio
# if f:
# asyncio.create_task(f(router))
#
if f:
# texec = ThreadExecutor()
# texec(f, router)
# f(router)
import asyncio
asyncio.run(f(router))
pass

@ -68,8 +68,8 @@ class TheTelephone(Operator):
self.log("DIALING THE OPERATOR:",URL)
# phonecall=await self.komrade_request_async(URL)
import asyncio
loop = asyncio.get_event_loop()
# import asyncio
# loop = asyncio.get_event_loop()
texec = ThreadExecutor()
# phonecall=self.komrade_request(URL)

@ -203,4 +203,196 @@ if not 'KOMRADE_USE_CLEARNET' in os.environ or not os.environ['KOMRADE_USE_CLEAR
FONT_PATH = os.path.join(PATH_GUI_ASSETS,'font.otf')
FONT_PATH = os.path.join(PATH_GUI_ASSETS,'font.otf')
#from p2p_api import
PORT_LISTEN = 5969
# NODES_PRIME = [("128.232.229.63",8467), ("68.66.241.111",8467)]
NODES_PRIME = [("128.232.229.63",8467)]
DEFAULT_URI='/login/'
import random,platform
HORIZONTAL = True # random.choice([True,True,True,False])
FACTOR=1
WINDOW_SIZE = (1136*FACTOR,640*FACTOR) if HORIZONTAL else (640*FACTOR,1136*FACTOR)
PLAYING_CARDS = (2.5,3.5)
ASPECT_RATIO = PLAYING_CARDS[0]/PLAYING_CARDS[1]
ASPECT_RATIO = 1/ASPECT_RATIO
HEIGHT = 850
if platform.platform().startswith('Linux'):
HEIGHT *= 1.25
WINDOW_SIZE=int(HEIGHT),int(HEIGHT * ASPECT_RATIO)
BG_IMG='assets/bg-brown.png'
grass=(201,203,163)
russiangreen = (109,140,96)
huntergreen = (67,92,61)
kombugreen = (49,67,45)
pinetreegreen = (29,40,27)
junglegreen = (15, 21, 14)
browncoffee=(77, 42, 34)
rootbeer=(38, 7, 1)
blackbean=(61, 12, 2)
burntumber=(132, 55, 34)
brownsugar=(175, 110, 81)
antiquebrass= (198, 144, 118)
royalbrown=(94, 55, 46)
bole=(113, 65, 55)
liver= (110, 56, 31)
bistre=(58, 33, 14)
bistre2=(43, 21, 7)
skin1=(89, 47, 42)
skin2=(80, 51, 53)
skin3=(40, 24, 26)
grullo=177, 158, 141
smokyblack=33, 14, 0
liverchestnut=148, 120, 96
ashgray=196, 199, 188
livchestnut2=156, 106, 73
beaver=165, 134, 110
rawumber=120, 95, 74
persianred=202,52,51
vermillion=126,25,27
indianred=205,92,92
barnred=124,10,2
maroon=128,0,0
bloodred=98, 23, 8
rust=188, 57, 8
darksienna=34, 9, 1
yellowcrayola=246, 170, 28
darkred=148, 27, 12
rosewood=94, 11, 21
redviolet=144, 50, 61
bone=217, 202, 179
bronze=188, 128, 52
shadow=140, 122, 107
orangered=194, 3, 3
dutchwhite=229,219,181
# black=(0,0,0)
black=15, 15, 15 #5, 8, 13
eerieblack=23, 22, 20
bistre=58, 38, 24
tuscanred=117, 64, 67
grullo2=154, 136, 115
blackolive=55, 66, 61
dogreen=103, 116, 35
sage=187, 193, 145
alabaster2 = 241, 236, 226
coyotebrown = 138, 93, 61
vandykebrown = 90, 62, 41
darksienna2=55, 6, 23
xiketic=3, 7, 30
rossacorsa=208, 0, 0
raisinblack=38, 34, 34
coffee2=67, 58, 58
rufusred=171, 4, 4
darksienna3=56, 22, 13
black2=0, 20, 39
xanadu=112, 141, 129
jasmine=244, 213, 141
ioe=191, 6, 3
dred=141, 8, 1
caputmort1=74, 36, 25
# SCHEME = 'lgreen'
# SCHEME = 'bronze'
SCHEME = 'dark'
# light green theme?
if SCHEME=='lgreen':
COLOR_TOOLBAR= huntergreen #bone #smokyblack #5,5,5 #russiangreen #pinetreegreen #kombugreen #(12,5,5) #russiangreen
COLOR_BG = grass # russiangreen #(0,73,54)
COLOR_LOGO = coyotebrown # grass#russiangreen #(0,0,0) #(0,0,0) #(151,177,140) #(132,162,118) #(109,140,106)
COLOR_TEXT = black #(255,245,200) #(0,0,0,1) #(241,233,203) #COLOR_ICON #(207,219,204) #(239,235,206) # (194,211,187) # (171,189,163) # (222,224,198) # COLOR_LOGO #(223, 223, 212)
COLOR_CARD = bone #(67,92,61) #(12,9,10)
COLOR_CARD_BORDER = COLOR_CARD
COLOR_ICON=COLOR_LOGO
elif SCHEME=='bronze':
COLOR_TOOLBAR= junglegreen
COLOR_BG = bronze
COLOR_LOGO = rufusred #yellowcrayola #0,0,0
COLOR_TEXT = black
COLOR_CARD = bone
COLOR_CARD_BORDER = COLOR_CARD
COLOR_ICON=COLOR_LOGO
else:
# COLOR_TOOLBAR= black
# COLOR_TOOLBAR=bronze
# COLOR_LOGO = black #bronze #0,0,0
# COLOR_BG = black
COLOR_BG=bistre
COLOR_TOOLBAR=black
COLOR_LOGO=bronze
COLOR_TEXT = black
COLOR_CARD = bone
COLOR_CARD_BORDER = COLOR_CARD
COLOR_ICON=COLOR_LOGO
COLOR_ACCENT = huntergreen
COLOR_INACTIVE = COLOR_CARD
COLOR_ACTIVE = russiangreen
ALL_COLORS = list({v for (k,v) in globals().items() if type(v)==tuple and len(v)==3})

Loading…
Cancel
Save