First version of adding users to view

This commit is contained in:
Paul Nameless 2019-02-18 23:29:39 +01:00
parent b19ada8091
commit ac72c5bcb0
4 changed files with 82 additions and 10 deletions

View file

@ -130,6 +130,7 @@ class Controller:
self.view.draw_status() self.view.draw_status()
def refresh_msgs(self): def refresh_msgs(self):
self.view.msgs.users = self.model.users
msgs = self.model.get_current_msgs(limit=self.view.msgs.h) msgs = self.model.get_current_msgs(limit=self.view.msgs.h)
self.view.draw_msgs(self.model.get_current_msg(), msgs) self.view.draw_msgs(self.model.get_current_msg(), msgs)

View file

@ -13,7 +13,7 @@ from view import View
logging.basicConfig( logging.basicConfig(
level=logging.DEBUG, level=logging.DEBUG,
format='%(asctime)s %(message)s', format='%(asctime)s %(levelname)s %(message)s',
handlers=[ handlers=[
logging.handlers.RotatingFileHandler( logging.handlers.RotatingFileHandler(
'./tg.log', './tg.log',
@ -56,6 +56,12 @@ def main():
) )
tg.login() tg.login()
# model = Model(tg)
# print(model.get_me())
# print(model.get_user(246785877))
# print(model.chats.get_chat(77769955))
# return
wrapper(partial(run, tg)) wrapper(partial(run, tg))

View file

@ -12,6 +12,12 @@ class Model:
self.users = UserModel(tg) self.users = UserModel(tg)
self.current_chat = 0 self.current_chat = 0
def get_me(self):
return self.users.get_me()
def get_user(self, user_id):
return self.users.get_user(user_id)
def get_current_chat_id(self): def get_current_chat_id(self):
return self.chats.chat_ids[self.current_chat] return self.chats.chat_ids[self.current_chat]
@ -205,3 +211,27 @@ class UserModel:
def __init__(self, tg): def __init__(self, tg):
self.tg = tg self.tg = tg
self.me = None
self.users = {}
def get_me(self):
if self.me:
return self.me
result = self.tg.get_me()
result.wait()
if result.error:
logger.error(f'get chat ids error: {result.error_info}')
return {}
self.me = result.update
return self.me
def get_user(self, user_id):
if user_id in self.users:
return self.users[user_id]
result = self.tg.call_method('getUser', {'user_id': user_id})
result.wait()
if result.error:
logger.error(f'get chat ids error: {result.error_info}')
return {}
self.users[user_id] = result.update
return result.update

53
view.py
View file

@ -31,6 +31,7 @@ class View:
curses.init_pair(7, -1, curses.COLOR_BLACK) curses.init_pair(7, -1, curses.COLOR_BLACK)
curses.init_pair(8, curses.COLOR_CYAN, curses.COLOR_BLACK) curses.init_pair(8, curses.COLOR_CYAN, curses.COLOR_BLACK)
curses.init_pair(9, curses.COLOR_BLUE, curses.COLOR_BLACK) curses.init_pair(9, curses.COLOR_BLUE, curses.COLOR_BLACK)
curses.init_pair(10, curses.COLOR_MAGENTA, curses.COLOR_BLACK)
self.stdscr = stdscr self.stdscr = stdscr
self.chats = ChatView(stdscr) self.chats = ChatView(stdscr)
@ -146,28 +147,51 @@ class ChatView:
self.win.clear() self.win.clear()
# self.win.vline(0, self.w-1, curses.ACS_VLINE, self.h) # self.win.vline(0, self.w-1, curses.ACS_VLINE, self.h)
for i, chat in enumerate(chats): for i, chat in enumerate(chats):
msg = f' {get_date(chat)} {chat["title"]} [{chat["unread_count"]}]: {get_last_msg(chat)}' # msg = f' {get_date(chat)} {chat["title"]} [{chat["unread_count"]}]: {get_last_msg(chat)}'
date, title, unread, last_msg = get_date(
chat), chat["title"], chat["unread_count"], get_last_msg(chat)
# msg = emoji_pattern.sub(r'', msg)[:self.w-1] # msg = emoji_pattern.sub(r'', msg)[:self.w-1]
msg = emoji_pattern.sub(r'', msg)[:self.w-2] + ' ' # last_msg = emoji_pattern.sub(r'', msg)[:self.w-2] + ' '
last_msg = emoji_pattern.sub(r'', last_msg)
# msg = msg[:self.w-1] # msg = msg[:self.w-1]
if len(msg) < self.w: # if len(msg) < self.w:
msg += ' ' * (self.w - len(msg) - 1) # msg += ' ' * (self.w - len(msg) - 1)
if i == current: if i == current:
colors = [7, 8, 9, 7] colors = [7, 8, 9, 10]
else: else:
colors = [1, 2, 3, 1] colors = [1, 2, 3, 4]
offset = 0 offset = 0
j = 0 j = 0
for color, e in zip(colors, msg.split(' ', maxsplit=3)): # for color, e in zip(colors, msg.split(' ', maxsplit=3)):
for color, e in zip(colors, ['', date, title]):
attr = curses.color_pair(color) attr = curses.color_pair(color)
if offset > self.w:
break
j += 1 j += 1
if j < 4: if j < 4:
e = e + ' ' e = e + ' '
self.win.addstr(i, offset, e, attr) self.win.addstr(i, offset, e[:self.w-offset-1], attr)
offset += len(e) offset += len(e)
if offset >= self.w:
continue
attr = curses.color_pair(colors[0])
msg = last_msg[:self.w-offset-1]
# msg = msg[:self.w-1]
if len(msg) < self.w:
msg += ' ' * (self.w - offset - len(msg) - 1)
self.win.addstr(i, offset, msg, attr)
if unread:
attr = curses.color_pair(colors[-1])
unread = ' ' + str(unread) + ' '
self.win.addstr(i, self.w - len(unread) - 1, unread, attr)
# if i == current: # if i == current:
# # attr = curses.A_REVERSE | curses.color_pair(1) # # attr = curses.A_REVERSE | curses.color_pair(1)
# attr = curses.A_REVERSE # attr = curses.A_REVERSE
@ -265,14 +289,25 @@ class MsgView:
self.win.refresh() self.win.refresh()
def _get_user_by_id(self, user_id):
if user_id == 0:
return ''
user = self.users.get_user(user_id)
if user.get('username'):
return '@' + user['username']
if user["first_name"] and user["last_name"]:
return f'{user["first_name"]} {user["last_name"]}'
return f'{user["first_name"]}'
def _parse_msg(self, msg): def _parse_msg(self, msg):
dt = datetime.fromtimestamp( dt = datetime.fromtimestamp(
msg['date']).strftime("%H:%M:%S") msg['date']).strftime("%H:%M:%S")
_type = msg['@type'] _type = msg['@type']
if _type == 'message': if _type == 'message':
user = self._get_user_by_id(msg['sender_user_id'])
return " {} {}: {}".format( return " {} {}: {}".format(
dt, dt,
msg['sender_user_id'], user,
parse_content(msg['content']) parse_content(msg['content'])
) )
logger.debug('Unknown message type: %s', msg) logger.debug('Unknown message type: %s', msg)