Change wyebuntil to run on idle
This commit is contained in:
		
							parent
							
								
									257c0a893c
								
							
						
					
					
						commit
						49555db038
					
				
							
								
								
									
										51
									
								
								wyebrun.c
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								wyebrun.c
									
									
									
									
									
								
							|  | @ -364,44 +364,53 @@ void wyebsend(char *exe, char *req) | ||||||
| { | { | ||||||
| 	request(exe, CSdata, NULL, req); | 	request(exe, CSdata, NULL, req); | ||||||
| } | } | ||||||
| void wyebuntil(char *exe, int sec) | typedef struct { | ||||||
|  | 	char *exe; | ||||||
|  | 	int   sec; | ||||||
|  | } wyebsst; | ||||||
|  | static void wsfree(wyebsst *ss) | ||||||
|  | { | ||||||
|  | 	g_free(ss->exe); | ||||||
|  | 	g_free(ss); | ||||||
|  | } | ||||||
|  | static gboolean untilcb(wyebsst *ss) | ||||||
| { | { | ||||||
| 	if (!lastsec) | 	if (!lastsec) | ||||||
| 		lastsec = g_hash_table_new(g_str_hash, g_str_equal); | 		lastsec = g_hash_table_new(g_str_hash, g_str_equal); | ||||||
| 
 | 
 | ||||||
| 	g_hash_table_replace(lastsec, exe, GINT_TO_POINTER(sec)); | 	g_hash_table_replace(lastsec, ss->exe, GINT_TO_POINTER(ss->sec)); | ||||||
| 
 | 
 | ||||||
| 	char *str = g_strdup_printf("%d", sec); | 	char *str = g_strdup_printf("%d", ss->sec); | ||||||
| 	request(exe, CSuntil, NULL, str); | 	request(ss->exe, CSuntil, NULL, str); | ||||||
| 	g_free(str); | 	g_free(str); | ||||||
|  | 
 | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  | void wyebuntil(char *exe, int sec) | ||||||
|  | { | ||||||
|  | 	wyebsst *ss = g_new(wyebsst, 1); | ||||||
|  | 	ss->exe = g_strdup(exe); | ||||||
|  | 	ss->sec = sec; | ||||||
|  | 	g_idle_add_full(G_PRIORITY_DEFAULT, (GSourceFunc)untilcb, | ||||||
|  | 			ss, (GDestroyNotify)wsfree); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| typedef struct { | static gboolean loopcb(wyebsst *ss) | ||||||
| 	char *exe; |  | ||||||
| 	int   sec; |  | ||||||
| } wyebloopt; |  | ||||||
| static void wlfree(wyebloopt *wl) |  | ||||||
| { | { | ||||||
| 	g_free(wl->exe); | 	untilcb(ss); | ||||||
| 	g_free(wl); |  | ||||||
| } |  | ||||||
| static gboolean loopcb(wyebloopt *wl) |  | ||||||
| { |  | ||||||
| 	wyebuntil(wl->exe, wl->sec); |  | ||||||
| 	return true; | 	return true; | ||||||
| } | } | ||||||
| guint wyebloop(char *exe, int sec, int loopsec) | guint wyebloop(char *exe, int sec, int loopsec) | ||||||
| { | { | ||||||
| 	wyebloopt *wl = g_new(wyebloopt, 1); | 	wyebsst *ss = g_new(wyebsst, 1); | ||||||
| 	wl->exe = g_strdup(exe); | 	ss->exe = g_strdup(exe); | ||||||
| 	wl->sec = sec; | 	ss->sec = sec; | ||||||
| 
 | 
 | ||||||
| 	loopcb(wl); | 	loopcb(ss); | ||||||
| 	return g_timeout_add_full(G_PRIORITY_DEFAULT, | 	return g_timeout_add_full(G_PRIORITY_DEFAULT, | ||||||
| 			loopsec * 1000, | 			loopsec * 1000, | ||||||
| 			(GSourceFunc)loopcb, | 			(GSourceFunc)loopcb, | ||||||
| 			wl, | 			ss, (GDestroyNotify)wsfree); | ||||||
| 			(GDestroyNotify)wlfree); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static gboolean tcinputcb(GIOChannel *ch, GIOCondition c, char *exe) | static gboolean tcinputcb(GIOChannel *ch, GIOCondition c, char *exe) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user