Passed
Push — main ( 2c4d8b...1c3107 )
by Yohann
01:53 queued 11s
created

ui.App.send_message()   A

Complexity

Conditions 1

Size

Total Lines 6
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 6
rs 10
c 0
b 0
f 0
cc 1
nop 1
1
import pygame
2
3
pygame.init()
4
pygame.key.set_repeat(500, 50)
5
6
7
class App:
8
9
    def __init__(self, client):
10
        self.client = client
11
        pygame.display.set_caption("PyChat v2.0")
12
13
        self.screen = pygame.display.set_mode((1280, 720))
14
15
        self.update_event = pygame.USEREVENT + 1
16
        pygame.time.set_timer(self.update_event, 1000)
17
18
        self.font = pygame.font.Font("oxygen.ttf", 12)
19
20
        self.message = ''
21
        self.history = []
22
23
        self.is_running = True
24
25
    def run(self):
26
        pygame.event.set_blocked(None)
27
        pygame.event.set_allowed(
28
            (self.update_event, pygame.KEYDOWN, pygame.TEXTINPUT, pygame.QUIT)
29
        )
30
31
        while self.is_running:
32
            self.draw()
33
            self.handle_event(pygame.event.wait())
34
35
    def draw(self):
36
        self.screen.fill(0)
37
38
        text = self.font.render(f">>>   {self.message}", True, (255, 255, 255))
39
        self.screen.blit(text, (20, 680))
40
41
        history = self.history[-15:]
42
        length_history = len(history)
43
44
        c_gain = 255 // (length_history + 1)
45
46
        for c, message in enumerate(history):
47
            color = ((c + 1) * c_gain, (c + 1) * c_gain, (c + 1) * c_gain)
48
49
            info = self.font.render(message['author'], True, color)
50
            self.screen.blit(info, (20, (c + 1) * 40))
51
52
            text = self.font.render(message['content'], True, color)
53
            self.screen.blit(text, (20, (c + 1) * 40 + 15))
54
55
        pygame.display.update()
56
57
    def update(self):
58
        new_messages = self.client.fetch_new_messages()
59
60
        if not len(new_messages):
61
            return
62
63
        self.history.extend(new_messages)
64
65
    def send_message(self):
66
        self.client.send_message = self.message
67
        self.client.send()
68
69
        self.history.append({"author": "you", "content": self.message})
70
        self.message = ''
71
72
    def handle_event(self, event):
73
        if event.type == pygame.QUIT:
74
            self.is_running = False
75
            return
76
77
        if event.type == self.update_event:
78
            self.update()
79
            return
80
81
        self.handle_typing(event)
82
83
    def handle_typing(self, event):
84
        if event.type == pygame.TEXTINPUT:
85
            self.message += event.text
86
            return
87
88
        if event.type != pygame.KEYDOWN:
89
            return
90
91
        if event.key == pygame.K_BACKSPACE:
92
            self.message = self.message[:-1]
93
94
        if event.key == pygame.K_RETURN and len(self.message):
95
            self.send_message()
96