49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Vala
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Vala
		
	
	
	
	
	
| namespace GAuthenticator {
 | |
|     [GtkTemplate (ui = "/eu/polonkai/gergely/gauthenticator/gauth-window.ui")]
 | |
|     class Window : Gtk.ApplicationWindow {
 | |
|         [GtkChild]
 | |
|         private Gtk.ProgressBar countdown;
 | |
| 
 | |
|         [GtkChild]
 | |
|         private Gtk.ListBox auth_list;
 | |
| 
 | |
|         private List<OTPRow> rows = null;
 | |
| 
 | |
|         private void update_totps(bool first = false) {
 | |
|             foreach (var row in rows) {
 | |
|                 row.update(first);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void check_update_totps() {
 | |
|             var now = new GLib.DateTime.now_utc();
 | |
|             var remaining = 30.0 - (now.get_seconds() % 30.0);
 | |
| 
 | |
|             if (remaining <= 1.0 / 24.0) {
 | |
|                 update_totps();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private bool update_countdown() {
 | |
|             var timestamp = new GLib.DateTime.now_local();
 | |
|             var current_seconds = timestamp.get_seconds();
 | |
|             var start_seconds = (current_seconds > 30.0) ? 30.0 : 0.0;
 | |
| 
 | |
|             countdown.fraction = 1.0 - ((current_seconds - start_seconds) / 30.0);
 | |
| 
 | |
|             check_update_totps();
 | |
| 
 | |
|             return true;
 | |
|         }
 | |
| 
 | |
|         public Window(GAuthenticator.App app) {
 | |
|             Object(application: app);
 | |
| 
 | |
|             // Roughly 1/24 second, for a smooth(ish) update
 | |
|             GLib.Timeout.add(41, update_countdown);
 | |
| 
 | |
|             update_totps(true);
 | |
|         }
 | |
|     }
 | |
| }
 |