guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02/03: installer: Simplify "network" page implementation.


From: Danny Milosavljevic
Subject: 02/03: installer: Simplify "network" page implementation.
Date: Fri, 7 Jul 2017 01:02:58 -0400 (EDT)

dannym pushed a commit to branch wip-installer-2
in repository guix.

commit 3462b85983620b124e9d8b8f02254b4fef4be054
Author: Danny Milosavljevic <address@hidden>
Date:   Fri Jul 7 06:44:17 2017 +0200

    installer: Simplify "network" page implementation.
    
    * gnu/system/installer/network.scm (network-page-activate-focused-item):
    New variable.
    (make-network-page): Use it here.
    (network-page-mouse-handler): Delete variable.
    (network-page-key-handler): Delete variable.
    (network-page-init): Add status.
---
 gnu/system/installer/network.scm | 119 ++++++++++++++-------------------------
 1 file changed, 43 insertions(+), 76 deletions(-)

diff --git a/gnu/system/installer/network.scm b/gnu/system/installer/network.scm
index 6dbcc41..4f8cf44 100644
--- a/gnu/system/installer/network.scm
+++ b/gnu/system/installer/network.scm
@@ -47,8 +47,7 @@
              title
              network-page-refresh
              0
-             network-page-key-handler
-             network-page-mouse-handler))
+             #:activator network-page-activate-focused-item))
 
 (define (interfaces)
   (map (lambda (ifce)
@@ -71,13 +70,14 @@
 (define (name->description name)
   (if (string=? name "lo")
       "Loop back interface"
-      (let ((m (string-match 
"^..(P[[:digit:]]+)?(p[[:digit:]]+)(s[[:digit:]]+)(f[[:digit:]]+)?" name)))
+      (let ((m (string-match 
"^..(P[[:digit:]]+)?(p[[:digit:]]+)(s[[:digit:]]+)(f[[:digit:]]+)?(u[[:digit:]]+)?"
 name)))
         (if (not m)
             name
-            (let ((domain  (match->elem m 1))
-                  (bus     (match->elem m 2))
-                  (slot    (match->elem m 3))
-                  (func    (match->elem m 4)))
+            (let ((domain   (match->elem m 1))
+                  (bus      (match->elem m 2))
+                  (slot     (match->elem m 3))
+                  (func     (match->elem m 4))
+                  (usb-slot (match->elem m 5)))
               (assoc-ref
                (slurp
                 (format #f "lspci -v -mm -s~x:~x:~x.~x"
@@ -92,71 +92,38 @@
 (define my-buttons `((continue ,(M_ "_Continue") #t)
                      (test     ,(M_ "_Test") #t)))
 
-(define (network-page-mouse-handler page device-id x y z button-state)
-  'ignored)
-
-(define (network-page-key-handler page ch)
-  (let ((menu (page-datum page 'menu))
-       (nav  (page-datum page 'navigation)))
-
+(define (network-page-activate-focused-item page)
+  (let* ((menu (page-datum page 'menu))
+         (nav (page-datum page 'navigation))
+         (item (menu-get-current-item menu))
+         (item-name (and item (assq-ref item 'name)))
+         (item-class (and item (assq-ref item 'class))))
     (cond
-     ((eq? ch KEY_RIGHT)
-      (menu-set-active! menu #f)
-      (buttons-select-next nav))
-
-     ((eq? ch #\tab)
-      (cond
-       ((menu-active menu)
-        (menu-set-active! menu #f)
-        (buttons-select nav 0))
-
-       ((eqv? (buttons-selected nav) (1- (buttons-n-buttons nav)))
-       (menu-set-active! menu #t)
-       (buttons-unselect-all nav))
-
-       (else
-       (buttons-select-next nav))))
-
-     ((eq? ch KEY_LEFT)
-      (menu-set-active! menu #f)
-      (buttons-select-prev nav))
-
-     ((eq? ch KEY_UP)
-      (buttons-unselect-all nav)
-      (menu-set-active! menu #t))
-
-     ((and (select-key? ch)
-           (eq? 'wireless (assq-ref (menu-get-current-item menu) 'class)))
-
-      (let ((next (make-wireless-page page (M_ "Wireless interface setup")
-                                      (assq-ref (menu-get-current-item menu) 
'name))))
-        (page-enter next)))
-
-     ((select-key? ch)
-      (let ((item (menu-get-current-item menu)))
-        (when (eq? (assq-ref item 'class) 'ethernet)
-          (and (zero? (system* "ip" "link" "set" (assq-ref item 'name) "up"))
-               (dhclient (assq-ref item 'name))))))
-
-     ((buttons-key-matches-symbol? nav ch 'test)
-      (let ((next  (make-page (page-surface page)
-                              "Ping"
-                              ping-page-refresh
-                              0
-                              ping-page-key-handler
-                              ping-page-mouse-handler)))
-        (page-enter next)))
-
-     ((buttons-key-matches-symbol? nav ch 'continue)
-
-      ;; Cancel the timer
-      (setitimer ITIMER_REAL 0 0 0 0)
-
-      (page-leave)))
-
-    (std-menu-key-handler menu ch))
-  #f)
-
+     ((menu-active menu)
+      (match item-class
+       ('wireless
+        (let ((next (make-wireless-page page (M_ "Wireless interface setup")
+                                        item-name)))
+          (page-enter next)))
+       ('ethernet
+        (and (zero? (system* "ip" "link" "set" item-name "up"))
+             (dhclient item-name)))
+       (_ 'ignored)))
+     (else
+       (match (buttons-selected-symbol nav)
+        ('test
+         (let ((next  (make-page (page-surface page)
+                                 "Ping"
+                                 ping-page-refresh
+                                 0
+                                 ping-page-key-handler
+                                 ping-page-mouse-handler)))
+           (page-enter next)))
+        ('continue
+          ;; Cancel the timer
+          (setitimer ITIMER_REAL 0 0 0 0)
+          (page-leave))
+        (_ #f))))))
 
 (define (network-page-refresh page)
   (when (not (page-initialised? page))
@@ -203,12 +170,12 @@
                         (interfaces))
                #:disp-proc
                (lambda (datum row)
-                     (format #f "~55a ~a"
+                     (format #f "~55a (~a) (status: ~a)"
                              (name->description (assq-ref datum 'name))
-                             (if (zero? (logand IFF_RUNNING
-                                                (if-flags datum)))
-                                 (gettext "Down")
-                                 (gettext "Running")))))))
+                             (assq-ref datum 'class)
+                             (if (network-interface-running? (assq-ref datum 
'name))
+                                 (gettext "Running")
+                                 (gettext "Down")))))))
 
     (addstr*   text-window  (format #f
                                     (gettext



reply via email to

[Prev in Thread] Current Thread [Next in Thread]