Browse Source

mostra numeri da stdin

boyska 2 years ago
parent
commit
6ce715c761
1 changed files with 32 additions and 6 deletions
  1. 32 6
      schermetto/num_display.py

+ 32 - 6
schermetto/num_display.py

@@ -1,5 +1,7 @@
 #!/usr/bin/env python3
 
+import os
+import sys
 import argparse
 import random
 
@@ -13,13 +15,20 @@ from gi.repository import Gtk, Gio, cairo, Pango, Gdk, PangoCairo, GLib
 
 
 def get_parser():
-    p = argparse.ArgumentParser()
+    p = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
     p.add_argument(
         "--read-only",
         action="store_true",
         dest="readonly",
         help="Display but dont change the number",
     )
+    p.add_argument(
+        "--stdin",
+        action="store_true",
+        default=True,
+        dest="stdin",
+        help="stdin is read and shown",
+    )
     p.add_argument("--fullscreen", action="store_true", default=True, dest="fullscreen")
     p.add_argument(
         "--no-fullscreen", action="store_false", default=True, dest="fullscreen"
@@ -84,7 +93,8 @@ class AppWindow(Gtk.ApplicationWindow):
     def __init__(self, *args, **kwargs):
         self.app = kwargs["application"]
         super().__init__(*args, **kwargs)
-        self.text = "666"
+        self.text = ""
+        self.buffer = ""
         self.rotation = 0
         self.invert_colors = False
         self.drawing_area = Gtk.DrawingArea()
@@ -96,17 +106,33 @@ class AppWindow(Gtk.ApplicationWindow):
         if self.app.cli_args.fullscreen:
             self.fullscreen()
         self.show_all()
-        GLib.timeout_add(1000, self.refresh_number)
+        if self.app.cli_args.stdin:
+            os.set_blocking(sys.stdin.fileno(), False)
+            GLib.io_add_watch(sys.stdin.fileno(), GLib.IO_IN, self._on_stdin_data)
         if self.app.cli_args.invert_every > 0:
             GLib.timeout_add(self.app.cli_args.invert_every * 1000, self.swap_colors)
 
     def force_redraw(self):
         self.drawing_area.queue_draw()
-    def refresh_number(self):
-        self.text = str(random.randint(1, 150))
-        self.force_redraw()
+
+    def _on_stdin_data(self, *args, **kwargs):
+        max_line_length = 16
+        incoming_data = sys.stdin.read(max_line_length)
+        if not incoming_data:
+            return True
+        self.buffer += incoming_data
+        if len(self.buffer) == max_line_length:
+            self.buffer += '\n'
+        if "\n" in self.buffer:
+            parts = self.buffer.split("\n")
+            self.buffer = parts[-1]
+            self.change_text(parts[-2])
         return True
 
+    def change_text(self, text: str):
+        self.text = text
+        self.force_redraw()
+
     def swap_colors(self):
         self.invert_colors = not self.invert_colors
         self.force_redraw()