adding post-writing

separate_pages
quadrismegistus 4 years ago
parent b9897f6b17
commit 59f4410286

@ -0,0 +1,316 @@
#:import get_color_from_hex kivy.utils.get_color_from_hex
#:import images_path kivymd.images_path
#:import colors kivymd.color_definitions.colors
#:import partial functools.partial
#:import NoTransition kivy.uix.screenmanager.NoTransition
# :import MDCarousel kivymd.uix.carousel.MDCarousel
## CLASS DEFS
<MyBoxLayout>:
orientation: "vertical"
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
canvas:
Color:
rgb: 1,0,0,2
Line:
width: 1
rectangle: (self.x, self.y, self.width, self.height)
<MyLabel>:
theme_text_color: 'Custom'
text_color: (1,0,0,1)
pos_hint: {'center_y': 0.5}
halign: 'center'
height: self.texture_size[1]
font_family: 'Courier'
<PostTitle>:
id: post_title
text: ''
size_hint_y: None
height: self.texture_size[1]
font_style: 'H5'
halign: 'center'
height: '25'
size_hint_y: None
<PostImage>:
# height: '25'
size_hint_y: None
<PostGridLayout>:
cols: 1
size_hint: (1,None)
pos_hint: {'center_x':0.5, 'center_y':0}
md_bg_color: 1,1,0,1
height: self.minimum_height
<PostAuthorLayout>:
cols: 2
orientation: 'horizontal'
size_hint: (1,None)
# size_hint:(None,None)
# pos_hint:(None,None)
pos_hint: {'center_x':0.5, 'center_y':0}
# md_bg_color: 1,1,0,1
height: '100dp' #self.minimum_height
# radius:[20,]
# border_radius:20
<PostAuthorAvatar>:
size_hint:(None,None)
pos_hint:{'center_x':1,'x':1}
# padding:'10dp'
# canvas:
# Color:
# rgb: 1,0,0,1
# Line:
# width: 1
# rectangle: (self.x, self.y, self.width, self.height)
<PostAuthorLabel>:
id: post_author_label
text: ''
pos_hint: {'center_y':0.5, 'center_x':0.5}
# font_size:'100dp'
# font_style:'H5'
# font_style: 'custom'
#font_name: "Strengthen"
# height: '400'
size_hint_y: None
# size_hint_x: 100
text_color:1,0,0,1
theme_text_color: 'Custom'
halign: 'left'
padding: ('10dp','0dp')
<PostContent>:
id: post_content
text: ''
pos_hint: {'center_y':1}
font_size:'58dp'
font_style:'H5'
#font_name: "Strengthen"
# height: '400'
size_hint_y: None
text_color:1,0,0,1
theme_text_color: 'Custom'
halign: 'left'
<PostCard>:
id: post
orientation: "vertical"
padding: "20dp"
size_hint: (0.9, None)
pos_hint: {"center_x": .5, "center_y": .5}
md_bg_color: (0,0,0,1)
height: self.minimum_height
radius:[20,]
border_radius:20
# canvas:
# Color:
# rgb: 1,0,0,1
# Line:
# width: 1
# rectangle: (self.x, self.y, self.width, self.height)
# # radius:[20,]
# # border_radius:20
### LAYOUT
MyLayout:
scr_mngr: scr_mngr
orientation: 'vertical'
height: self.minimum_height
canvas:
Color:
rgba: 0.925,0.925,0.925,1 #get_color_from_hex(colors['Gray']['900'])
Rectangle:
pos: self.pos
size: self.size
source: 'assets/komrade2.png'
MDToolbar:
id: toolbar
title: app.title
pos_hint: {'center_x': .5, 'center_y': 0.95}
md_bg_color: 0.1,0.1,0.1,1
background_palette: 'Red'
background_hue: '500'
specific_text_color: 1,0,0,1
# right_action_items: [['radio-tower', partial(root.change_screen, 'feed')], ['account-group', partial(root.change_screen, 'people')], ['calendar', partial(root.change_screen, 'events')], ['message-processing-outline', partial(root.change_screen, 'messages')], ['bell-outline', partial(root.change_screen, 'notifications')]]
right_action_items: [['post-outline', partial(root.change_screen, 'feed')], ['pencil-plus-outline', partial(root.change_screen, 'post')], ['message-processing-outline', partial(root.change_screen, 'messages')], ['bell-outline', partial(root.change_screen, 'notifications')], ['account-circle-outline', partial(root.change_screen, 'notifications')]]
#left_action_items: [[f"assets/fist2.png", partial(root.change_screen, 'feed')]]
font_context: None
font_name: f'assets/Strengthen.ttf'
ScreenManager:
id: scr_mngr
# transition: NoTransition()
###
# LOGIN SCREEN
###
LoginScreen:
name: "login"
# text: "Login"
# icon: "login"
MyBoxLayout:
id: loginbox
size_hint:0.5,0.18
MDTextField:
id: username
hint_text: "username"
required: True
write_tab: False
multiline: False
helper_text_mode: "on_error"
color_mode: 'custom'
line_color_focus: 1,0,0,1
line_color_normal: 1,0,0,1
current_hint_text_color: 1,0,0,1
MDTextField:
id: password
password: True
hint_text: "password"
required: True
write_tab: False
multiline: False
helper_text_mode: "on_error"
color_mode: 'custom'
line_color_focus: 1,0,0,1
line_color_normal: 1,0,0,1
current_hint_text_color: 1,0,0,1
MDBoxLayout:
id: buttonbox
size_hint_y: None
adaptive_width: True
height: '56dp'
spacing: '10dp'
pos_hint: {'center_x': .5}
MDRectangleFlatButton:
text: "login"
on_release:
app.login(username.text, password.text)
#app.root.change_screen("welcome")
theme_text_color: "Custom"
text_color: 1,0,0,1
md_bg_color: 0,0,0,1
MDRectangleFlatButton:
text: "register"
on_release:
app.register(username.text, password.text)
theme_text_color: "Custom"
text_color: 1,0,0,1
md_bg_color: 0,0,0,1
MDLabel:
id: login_status
text:""
theme_text_color: 'Error'
pos_hint:{'center_x':.5}
WelcomeScreen:
name: 'welcome'
MyBoxLayout:
size_hint:0.666,0.666
#MyLabel:
# text: "Welcome!"
# font_style: "H3"
# pos_hint: {'center_y':0.85}
MyLabel:
text: "\n\nTurning and turning in the widening gyre \nThe falcon cannot hear the falconer;\nThings fall apart; the centre cannot hold;\nMere anarchy is loosed upon the world,\nThe blood-dimmed tide is loosed, and everywhere \nThe ceremony of innocence is drowned;\nThe best lack all conviction, while the worst \nAre full of passionate intensity.\n\nSurely some revelation is at hand..."
PeopleScreen:
name: 'people'
ScrollView:
id: scroll
size_hint: (1, 1)
pos_hint: {'center_x': .5, 'y': 0}
do_scroll_x: False
bar_width: 0
scroll_type: ['content']
MDList:
id: container
# size_hint_y: None
# height: '100dp'
#padding: 0, self._list_vertical_padding
FeedScreen:
name: 'feed'
#MyLabel:
# text: "The falcon cannot hear the falconer..."
Carousel:
id: post_carousel
direction: 'right'
AddPostScreen:
name: 'post'
EventsScreen:
name: 'events'
MessagesScreen:
name: 'messages'
NotificationsScreen:
name: 'notifications'

@ -0,0 +1,259 @@
from kivy.uix.screenmanager import Screen,ScreenManager
from kivymd.app import MDApp
from kivymd.uix.button import MDFillRoundFlatButton, MDIconButton
from kivymd.uix.toolbar import MDToolbar
from kivymd.uix.screen import MDScreen
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivymd.theming import ThemeManager
from kivy.properties import ObjectProperty,ListProperty
import time
from collections import OrderedDict
from functools import partial
from kivy.uix.screenmanager import NoTransition
from kivymd.uix.label import MDLabel
from kivy.uix.widget import Widget
from kivymd.uix.list import OneLineListItem
from kivymd.uix.card import MDCard, MDSeparator
from kivymd.uix.boxlayout import MDBoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.metrics import dp
from kivy.properties import NumericProperty
from kivymd.uix.list import * #MDList, ILeftBody, IRightBody, ThreeLineAvatarListItem, TwoLineAvatarListItem, BaseListItem, ImageLeftWidget
from kivy.uix.image import Image, AsyncImage
import requests,json
from kivy.storage.jsonstore import JsonStore
from kivy.core.window import Window
from kivy.core.text import LabelBase
Window.size = (640, 1136) #(2.65 * 200, 5.45 * 200)
root = None
app = None
def log(x):
with open('log.txt','a+') as of:
of.write(str(x)+'\n')
class MyLayout(MDBoxLayout):
scr_mngr = ObjectProperty(None)
def change_screen(self, screen, *args):
self.scr_mngr.current = screen
class MyBoxLayout(MDBoxLayout): pass
class MyLabel(MDLabel): pass
### POST CODE
class PostTitle(MDLabel): pass
class PostGridLayout(GridLayout): pass
class PostImage(AsyncImage): pass
class PostContent(MDLabel):
def __init__(self,**kwargs):
super().__init__(**kwargs)
self.bind(width=lambda s, w: s.setter('text_size')(s, (w, None)))
self.bind(texture_size=self.setter('size'))
self.font_name='assets/overpass-mono-regular.otf'
#pass
class PostAuthorLayout(MDBoxLayout): pass
class PostAuthorLabel(MDLabel):
def __init__(self,**kwargs):
super().__init__(**kwargs)
self.bind(width=lambda s, w: s.setter('text_size')(s, (w, None)))
self.bind(texture_size=self.setter('size'))
self.font_name='assets/overpass-mono-regular.otf'
pass
class PostAuthorAvatar(AsyncImage): pass
class PostCard(MDCard):
def __init__(self, author = None, title = None, img_src = None, content = None):
super().__init__()
self.author = author
self.title = title
self.img_src = img_src
self.content = content
self.bind(minimum_height=self.setter('height'))
# pieces
author_section_layout = PostAuthorLayout()
author_label = PostAuthorLabel(text=self.author)
author_label.font_size = '28dp'
author_avatar = PostAuthorAvatar(source=self.img_src)
author_section_layout.add_widget(author_avatar)
author_section_layout.add_widget(author_label)
# author_section_layout.add_widget(author_avatar)
self.add_widget(author_section_layout)
title = PostTitle(text=self.title)
# image = PostImage(source=self.img_src)
content = PostContent(text=self.content)
#content = PostContent()
# add to screen
self.add_widget(title)
# self.add_widget(image)
self.add_widget(content)
#self.add_widget(layout)
#####
#### LOGIN
class ProtectedScreen(MDScreen):
def on_pre_enter(self):
global app
if not app.is_logged_in():
app.root.change_screen('login')
class WelcomeScreen(ProtectedScreen): pass
class LoginScreen(MDScreen):
#def on_pre_enter(self):
# global app
# if app.is_logged_in():
# app.root.change_screen('feed')
pass
class PeopleScreen(ProtectedScreen): pass
class AddPostScreen(ProtectedScreen): pass
class EventsScreen(ProtectedScreen): pass
class MessagesScreen(ProtectedScreen): pass
class NotificationsScreen(ProtectedScreen): pass
class FeedScreen(ProtectedScreen):
def on_enter(self):
i=0
lim=5
with open('tweets.txt') as f:
for ln in f:
if ln.startswith('@') or ln.startswith('RT '): continue
i+=1
if i>lim: break
#post = Post(title=f'Marx Zuckerberg', content=ln.strip())
post = PostCard(
author='Marx Zuckerberg',
title='',
img_src='avatar.jpg',
content=ln.strip())
print(post)
root.ids.post_carousel.add_widget(post)
def get_tor_proxy_session():
session = requests.session()
# Tor uses the 9050 port as the default socks port
session.proxies = {'http': 'socks5://127.0.0.1:9050',
'https': 'socks5://127.0.0.1:9050'}
return session
def get_tor_python_session():
from torpy.http.requests import TorRequests
with TorRequests() as tor_requests:
with tor_requests.get_session() as s:
return s
from kivymd.font_definitions import theme_font_styles
class MainApp(MDApp):
title = 'Komrade'
#api = 'http://localhost:5555/api'
api = 'http://128.232.229.63:5555/api'
#api = 'http://komrades.net:5555/api'
logged_in=False
store = JsonStore('komrade.json')
login_expiry = 60 * 60 * 24 * 7 # once a week
#login_expiry = 5 # 5 seconds
def get_session(self):
return get_tor_proxy_session()
#return get_tor_python_session()
def build(self):
# bind
global app,root
app = self
self.root = root = Builder.load_file('main.kv')
# edit logo
logo=root.ids.toolbar.ids.label_title
logo.font_name='assets/Strengthen.ttf'
logo.font_size='58dp'
logo.pos_hint={'center_y':0.43}
# icons
icons=root.ids.toolbar.ids.right_actions.children
for icon in icons:
#log(dir(icon))
#icon.icon='android' #user_font_size='200sp'
icon.font_size='58dp'
icon.user_font_size='58dp'
icon.width='58dp'
icon.size_hint=(None,None)
icon.height='58dp'
if not self.is_logged_in():
self.root.change_screen('login')
else:
self.root.change_screen('feed')
return self.root
def is_logged_in(self):
if self.logged_in: return True
if not self.store.exists('user'): return False
if self.store.get('user')['logged_in']:
if time.time() - self.store.get('user')['logged_in_when'] < self.login_expiry:
self.logged_in=True
return True
return False
def do_login(self):
self.logged_in=True
self.store.put('user',logged_in=True,logged_in_when=time.time())
self.root.change_screen('feed')
def login(self,un,pw):
url = self.api+'/login'
with self.get_session() as sess:
#res = requests.post(url, json={'name':un, 'passkey':pw})
res = sess.post(url, json={'name':un, 'passkey':pw})
if res.status_code==200:
self.do_login()
else:
self.root.ids.login_status.text=res.text
def register(self,un,pw):
url = self.api+'/register'
with self.get_session() as sess:
#res = requests.post(url, json={'name':un, 'passkey':pw})
res = sess.post(url, json={'name':un, 'passkey':pw})
if res.status_code==200:
self.do_login()
else:
self.root.ids.login_status.text=res.text
if __name__ == '__main__':
App = MainApp()
App.run()

@ -170,7 +170,7 @@ MyLayout:
background_hue: '500'
specific_text_color: 1,0,0,1
# right_action_items: [['radio-tower', partial(root.change_screen, 'feed')], ['account-group', partial(root.change_screen, 'people')], ['calendar', partial(root.change_screen, 'events')], ['message-processing-outline', partial(root.change_screen, 'messages')], ['bell-outline', partial(root.change_screen, 'notifications')]]
right_action_items: [['post-outline', partial(root.change_screen, 'feed')], ['message-processing-outline', partial(root.change_screen, 'messages')], ['bell-outline', partial(root.change_screen, 'notifications')], ['account-circle-outline', partial(root.change_screen, 'notifications')]]
right_action_items: [['post-outline', partial(root.change_screen, 'feed')], ['pencil-plus-outline', partial(root.change_screen, 'post')], ['message-processing-outline', partial(root.change_screen, 'messages')], ['bell-outline', partial(root.change_screen, 'notifications')], ['account-circle-outline', partial(root.change_screen, 'notifications')]]
#left_action_items: [[f"assets/fist2.png", partial(root.change_screen, 'feed')]]
font_context: None
font_name: f'assets/Strengthen.ttf'
@ -300,7 +300,9 @@ MyLayout:
id: post_carousel
direction: 'right'
AddPostScreen:
name: 'post'
EventsScreen:

@ -127,6 +127,7 @@ class LoginScreen(MDScreen):
pass
class PeopleScreen(ProtectedScreen): pass
class AddPostScreen(ProtectedScreen): pass
class EventsScreen(ProtectedScreen): pass
class MessagesScreen(ProtectedScreen): pass
class NotificationsScreen(ProtectedScreen): pass
@ -143,7 +144,11 @@ class FeedScreen(ProtectedScreen):
if i>lim: break
#post = Post(title=f'Marx Zuckerberg', content=ln.strip())
post = PostCard(author='Marx Zuckerberg',title='',img_src='avatar.jpg',content=ln.strip())
post = PostCard(
author='Marx Zuckerberg',
title='',
img_src='avatar.jpg',
content=ln.strip())
print(post)
root.ids.post_carousel.add_widget(post)
@ -198,6 +203,9 @@ class MainApp(MDApp):
#icon.icon='android' #user_font_size='200sp'
icon.font_size='58dp'
icon.user_font_size='58dp'
icon.width='58dp'
icon.size_hint=(None,None)
icon.height='58dp'
if not self.is_logged_in():
self.root.change_screen('login')

Loading…
Cancel
Save