diff --git a/CursesDownload.py b/CursesDownload.py new file mode 100644 index 0000000..ba31106 --- /dev/null +++ b/CursesDownload.py @@ -0,0 +1,70 @@ +import curses +import Common + + +widths = [ + (126, 1), (159, 0), (687, 1), (710, 0), (711, 1), + (727, 0), (733, 1), (879, 0), (1154, 1), (1161, 0), + (4347, 1), (4447, 2), (7467, 1), (7521, 0), (8369, 1), + (8426, 0), (9000, 1), (9002, 2), (11021, 1), (12350, 2), + (12351, 1), (12438, 2), (12442, 0), (19893, 2), (19967, 1), + (55203, 2), (63743, 1), (64106, 2), (65039, 1), (65059, 0), + (65131, 2), (65279, 1), (65376, 2), (65500, 1), (65510, 2), + (120831, 1), (262141, 2), (1114109, 1), +] + + +def get_width(o): + global widths + if o == 0xe or o == 0xf: + return 0 + for num, wid in widths: + if o <= num: + return wid + return 1 + + +def c_print(handle, y, x, string, style=curses.A_NORMAL): + if type(string) != str: + string = str(string) + for _i in string: + _w = get_width(ord(_i)) + if(_w>1): + handle.addch(y, x+1, " ", style) + handle.addch(y, x, ord(_i), style) + x += _w + + +def render(screen): + _style = curses.A_DIM + if Common.api.isLive: + _style = curses.A_BOLD | curses.A_BLINK | curses.A_ITALIC | curses.A_UNDERLINE + c_print(screen, 1, 3, Common.api.roomLiver, _style) + screen.refresh() + +def main(stdscr): + global screen + screen = stdscr.subwin(23, 79, 0, 0) + screen.timeout(2000) + screen.box() + screen.hline(2, 1, curses.ACS_HLINE, 77) + c_print(screen, 1, 2, " "*45 + " 西瓜录播助手 -- by JerryYan ", curses.A_STANDOUT) + render(screen) + while True: + c = stdscr.getch() + if c == ord("q"): + break + elif c == ord("f"): + render(screen) + + +stdscr = curses.initscr() +curses.noecho() +curses.cbreak() +stdscr.keypad(1) +curses.wrapper(main) +stdscr.keypad(0) +curses.echo() +curses.nocbreak() +curses.endwin() + diff --git a/CursesMain.py b/CursesMain.py new file mode 100644 index 0000000..4a1f513 --- /dev/null +++ b/CursesMain.py @@ -0,0 +1,107 @@ +import curses + +from Struct.Chat import Chat +from Struct.Gift import Gift +from Struct.MemberMsg import MemberMsg +from Struct.User import User +from api import XiGuaLiveApi + + +class Api(XiGuaLiveApi): + danmakuList = [] + def onAd(self, i): + pass + def onChat(self, chat: Chat): + self.danmakuList.append(str(chat)) + def onLike(self, user: User): + pass + def onEnter(self, msg: MemberMsg): + pass + def onJoin(self, user: User): + self.danmakuList.append(str(user)) + def onSubscribe(self, user: User): + self.danmakuList.append(str(user)) + def onPresent(self, gift: Gift): + pass + def onPresentEnd(self, gift: Gift): + self.danmakuList.append(str(gift)) + + +api = Api() +widths = [ + (126, 1), (159, 0), (687, 1), (710, 0), (711, 1), + (727, 0), (733, 1), (879, 0), (1154, 1), (1161, 0), + (4347, 1), (4447, 2), (7467, 1), (7521, 0), (8369, 1), + (8426, 0), (9000, 1), (9002, 2), (11021, 1), (12350, 2), + (12351, 1), (12438, 2), (12442, 0), (19893, 2), (19967, 1), + (55203, 2), (63743, 1), (64106, 2), (65039, 1), (65059, 0), + (65131, 2), (65279, 1), (65376, 2), (65500, 1), (65510, 2), + (120831, 1), (262141, 2), (1114109, 1), +] + + +def get_width(o): + global widths + if o == 0xe or o == 0xf: + return 0 + for num, wid in widths: + if o <= num: + return wid + return 1 + + +def c_print(handle, y, x, string, style=curses.A_NORMAL): + if type(string) != str: + string = str(string) + for _i in string: + _w = get_width(ord(_i)) + if(_w>1): + handle.addch(y, x+1, " ", style) + if _i != " " or style!=curses.A_NORMAL: + handle.addch(y, x, ord(_i), style) + else: + handle.addch(y, x, 0, style) + x += _w + + + + +def render(screen): + screen.erase() + screen.box() + screen.hline(2, 1, curses.ACS_HLINE, 77) + c_print(screen, 1, 2, " "*45 + " 西瓜弹幕助手 -- by JerryYan ", curses.A_STANDOUT) + _style = curses.A_DIM + if api.isLive: + _style = curses.A_BOLD | curses.A_BLINK | curses.A_ITALIC + c_print(screen, 1, 3, api.roomLiver, _style) + _y = 3 + api.getDanmaku() + for i in api.danmakuList[-10:]: + c_print(screen, _y, 2, i) + _y += 1 + screen.move(0,0) + screen.refresh() + +def main(stdscr): + global screen + screen = stdscr.subwin(23, 79, 0, 0) + screen.timeout(2000) + render(screen) + while True: + c = screen.getch() + if c == ord("q"): + break + render(screen) + + +stdscr = curses.initscr() +curses.noecho() +curses.cbreak() +stdscr.keypad(1) +curses.wrapper(main) +stdscr.keypad(0) +curses.echo() +curses.nocbreak() +curses.endwin() +