Code

go to root/parent dir key added
[ncmpc.git] / src / screen_utils.c
index 7e2ba146c632077de285a626ef87cf3edbaa53ee..43d57e142d8a5633d20954603d0ab79d1a7c3b7e 100644 (file)
@@ -63,7 +63,7 @@ screen_getch(WINDOW *w, char *prompt)
   curs_set(1);
   timeout(-1);
 
-  while( (key=wgetch(w)) == ERR )
+  while( (key=my_wgetch(w)) == ERR )
     ;
 
 #ifdef HAVE_GETMOUSE
@@ -72,11 +72,6 @@ screen_getch(WINDOW *w, char *prompt)
     return screen_getch(w, prompt);
 #endif
 
-  if( key==KEY_RESIZE )
-    {
-      screen_resize();
-    }
-
   noecho();
   curs_set(0);
   timeout(SCREEN_TIMEOUT);
@@ -107,6 +102,54 @@ screen_getstr(WINDOW *w, char *prompt)
   return screen_readln(w, prompt, NULL, NULL, NULL);
 }
 
+char *
+screen_getstr_masked(WINDOW *w, char *prompt)
+{
+  return screen_readln(w, prompt, NULL, NULL, NULL);
+}
+
+
+char *
+screen_read_password(WINDOW *w, char *prompt)
+{
+  if(w == NULL)
+    {
+      int rows, cols;
+      getmaxyx(stdscr, rows, cols);
+      /* create window for input */
+      w = newwin(1,  cols, rows-1, 0);
+      leaveok(w, FALSE);
+      keypad(w, TRUE);  
+    } 
+  wmove(w, 0,0);
+  curs_set(1);
+  colors_use(w, COLOR_STATUS_ALERT);
+  if(prompt == NULL)
+    return wreadln_masked(w, _("Password: "), NULL, COLS, NULL, NULL);
+  else
+    return wreadln_masked(w, prompt, NULL, COLS, NULL, NULL);
+  curs_set(0);
+}
+    
+gint
+_screen_auth(mpdclient_t *c, gint recursion)
+{
+   mpd_clearError(c->connection);
+  if(recursion > 2) return 1;
+  mpd_sendPasswordCommand(c->connection,  screen_read_password(NULL, NULL));   
+  mpd_finishCommand(c->connection);
+   mpdclient_update(c);
+   if(  c->connection->errorCode == MPD_ACK_ERROR_PASSWORD ) return  _screen_auth(c, ++recursion);
+   return 0;
+}
+
+gint
+screen_auth(mpdclient_t *c)
+{
+  _screen_auth(c, 0);
+  mpdclient_update(c);
+  curs_set(0);
+}
 
 /* query user for a string and find it in a list window */
 int 
@@ -115,11 +158,13 @@ screen_find(screen_t *screen,
            list_window_t *lw, 
            int rows,
            command_t findcmd,
-           list_window_callback_fn_t callback_fn)
+           list_window_callback_fn_t callback_fn,
+           void *callback_data)
 {
   int reversed = 0;
   int retval   = 0;
   char *prompt = FIND_PROMPT;
+  char *value = options.find_show_last_pattern ? (char *) -1 : NULL;
 
   if( findcmd==CMD_LIST_RFIND ||findcmd==CMD_LIST_RFIND_NEXT ) 
     {
@@ -142,7 +187,7 @@ screen_find(screen_t *screen,
       if( !screen->findbuf )
        screen->findbuf=screen_readln(screen->status_window.w,
                                      prompt,
-                                     (char *) -1, //NULL,
+                                     value,
                                      &screen->find_history,
                                      NULL);
       if( !screen->findbuf || !screen->findbuf[0] )
@@ -150,14 +195,14 @@ screen_find(screen_t *screen,
       if( reversed )
        retval = list_window_rfind(lw, 
                                   callback_fn,
-                                  c, 
+                                  callback_data
                                   screen->findbuf,
                                   options.find_wrap,
                                   rows);
       else
        retval = list_window_find(lw,
                                  callback_fn,
-                                 c,
+                                 callback_data,
                                  screen->findbuf,
                                  options.find_wrap);
       if( retval == 0 )
@@ -228,13 +273,14 @@ set_xterm_title(char *format, ...)
     {
       if( g_getenv("WINDOWID") )
        {
-         char buffer[512];
+         char *msg;
          va_list ap;
          
          va_start(ap,format);
-         vsnprintf(buffer,sizeof(buffer),format,ap);
+         msg = g_strdup_vprintf(format,ap);
          va_end(ap);
-         printf("%c]0;%s%c", '\033', buffer, '\007'); 
+         printf("%c]0;%s%c", '\033', msg, '\007'); 
+         g_free(msg);
        }
       else
        options.enable_xterm_title = FALSE;