Code

code cleanup
authorAndreas Obergrusberger <tradiaz@yahoo.de>
Sat, 26 Aug 2006 12:37:01 +0000 (12:37 +0000)
committerAndreas Obergrusberger <tradiaz@yahoo.de>
Sat, 26 Aug 2006 12:37:01 +0000 (12:37 +0000)
git-svn-id: https://svn.musicpd.org/ncmpc/branches/tradiaz@4695 09075e82-0dd4-0310-85a5-a0d7c8717e4f

src/screen_lyrics.c

index 8a05ccc788aeec51169a9f05cba136614a8c7338..106d439b7f4a44aa2159ff1b865377c07d82c78e 100644 (file)
 #define LEOSLYRICS_CONTENT_URL "http://api.leoslyrics.com/api_lyrics.php?auth=ncmpc&hid=%s"
 
 #define CREDITS "Lyrics provided by www.LeosLyrics.com"
+
 typedef struct _formed_text
 {
-       GString *text;
-       GArray *lines;
+    GString *text;
+    GArray *lines;
        int val;
 } formed_text;
 
 typedef struct _retrieval_spec
 {
-       mpdclient_t *client;
-       int way;
+    mpdclient_t *client;
+    int way;
 } retrieval_spec;
 
+typedef struct _lyrics
+{
+  int header_len;
+  
+  guint8 result
+  char *hid;
+  GTimer *dltime;
+
+  XML_Parser parser;
+  XML_Parser contentp;
+
+  formed_text content;
 
+} lyrics;
 
 XML_Parser parser, contentp;
 static int lyrics_text_rows = -1;
 static list_window_t *lw = NULL;
-guint8 result;
-char *hid;
-GTimer *dltime;
 short int lock;
-formed_text lyr_text;
 /* result is a bitset in which the succes when searching 4 lyrics is logged
 countend by position - backwards
 0: lyrics in database
@@ -158,7 +168,7 @@ static void check_content(void *data, const char *name, const char **atts)
        if(strstr(name, "text") != NULL)
        {
 
-               result |= 16;
+               lyrics.result |= 16;
        }
 }
        
@@ -168,22 +178,22 @@ static void check_search_response(void *data, const char *name,
 {
        if(strstr(name, "response") != NULL)
        {
-       result |=2;
+       lyrics.result |=2;
        return;
        }  
        
-       if(result & 4)
+       if(lyrics.result & 4)
        {
-               if(strstr(name, "result") != NULL)
+               if(strstr(name, "lyrics.result") != NULL)
                {
                        if(strstr(atts[2], "hid") != NULL)
                        {
-                               hid = atts[3];
+                               lyrics.hid = atts[3];
                        }
        
                        if(strstr(atts[2], "exactMatch") != NULL)
                        {
-                               result |= 8;
+                               lyrics.result |= 8;
                        }                       
                }
        }
@@ -197,29 +207,31 @@ static void end_tag(void *data, const char *name)
 
   static void check_search_success(void *userData, const XML_Char *s, int len)
     {
-       if(result & 2)  //lets first check whether we're right
+       if(lyrics.result & 2)   //lets first check whether we're right
        {               //we don't really want to search in the wrong string
                if(strstr((char*) s, "SUCCESS"))
                {
-               result |=4;
+               lyrics.result |=4;
                }
        }       
     }
 
-static void fetch_text(void *userData, const XML_Char *s, int len) 
+static void 
+fetch_text(void *userData, const XML_Char *s, int len) 
 {
-       if(result & 16)
+       if(lyrics.result & 16)
        {
-               add_text_line(&lyr_text, s, len); 
+               add_text_line(&lyrics.content, s, len); 
        }
 }
 
-int check_dl_progress(void *clientp, double dltotal, double dlnow,
+int 
+check_dl_progress(void *clientp, double dltotal, double dlnow,
                         double ultotal, double ulnow)
 {
-       if(g_timer_elapsed(dltime, NULL) >= options.lyrics_timeout || lock == 4)
+       if(g_timer_elapsed(lyrics.dltime, NULL) >= options.lyrics_timeout || lock == 4)
        {       
-               formed_text_init(&lyr_text);
+               formed_text_init(&lyrics.content);
                return -1;
        }
 
@@ -227,9 +239,10 @@ int check_dl_progress(void *clientp, double dltotal, double dlnow,
 }      
 
 
-int check_lyr_http(char *artist, char *title, char *url)
+int 
+check_lyr_http(char *artist, char *title, char *url)
 {
-       char url_avail[256];
+        char url_avail[256];
 
        //this replacess the whitespaces with '+'
        g_strdelimit(artist, " ", '+');
@@ -241,9 +254,9 @@ int check_lyr_http(char *artist, char *title, char *url)
        //download that xml!
        easy_download_struct lyr_avail = {NULL, 0,-1};  
        
-       g_timer_start(dltime);
+       g_timer_start(lyrics.dltime);
        if(!easy_download(url_avail, &lyr_avail, check_dl_progress)) return -1;
-       g_timer_stop(dltime);
+       g_timer_stop(lyrics.dltime);
 
        //we gotta parse that stuff with expat
        parser = XML_ParserCreate(NULL);
@@ -254,22 +267,22 @@ int check_lyr_http(char *artist, char *title, char *url)
        XML_Parse(parser, lyr_avail.data, strlen(lyr_avail.data), 0);   
        XML_ParserFree(parser); 
 
-       if(!(result & 4)) return -1; //check whether lyrics found
-       snprintf(url, 512, LEOSLYRICS_CONTENT_URL, hid);
+       if(!(lyrics.result & 4)) return -1; //check whether lyrics found
+       snprintf(url, 512, LEOSLYRICS_CONTENT_URL, lyrics.hid);
 
        return 0;
 }
 int get_lyr_http(char *artist, char *title)
 {
        char url_hid[256];
-       if(dltime == NULL) dltime = g_timer_new();
+       if(lyrics.dltime == NULL) lyrics.dltime = g_timer_new();
 
        if(check_lyr_http(artist, title, url_hid) != 0) return -1;
        
        easy_download_struct lyr_content = {NULL, 0,-1};  
-       g_timer_continue(dltime);               
+       g_timer_continue(lyrics.dltime);                
        if(!(easy_download(url_hid, &lyr_content, check_dl_progress))) return -1;
-       g_timer_stop(dltime);
+       g_timer_stop(lyrics.dltime);
        
        contentp = XML_ParserCreate(NULL);
        XML_SetUserData(contentp, NULL);
@@ -283,219 +296,220 @@ int get_lyr_http(char *artist, char *title)
 }
 FILE *create_lyr_file(char *artist, char *title)
 {
-               char path[1024];
+    char path[1024];
 
-               snprintf(path, 1024, "%s/.lyrics", 
-                       getenv("HOME"));
-               if(g_access(path, W_OK) != 0) if(mkdir(path, S_IRWXU) != 0) return NULL;
+    snprintf(path, 1024, "%s/.lyrics", 
+               getenv("HOME"));
+    if(g_access(path, W_OK) != 0) if(mkdir(path, S_IRWXU) != 0) return NULL;
        
-               snprintf(path, 1024, "%s/.lyrics/%s", 
-                               getenv("HOME"), artist);
-               if(g_access(path, W_OK) != 0) if(mkdir(path, S_IRWXU) != 0) return NULL;        
+    snprintf(path, 1024, "%s/.lyrics/%s", 
+               getenv("HOME"), artist);
+
+    if(g_access(path, W_OK) != 0) if(mkdir(path, S_IRWXU) != 0) return NULL;   
        
-               snprintf(path, 1024, "%s/.lyrics/%s/%s.lyric", 
-                               getenv("HOME"), artist, title);
+    snprintf(path, 1024, "%s/.lyrics/%s/%s.lyric", 
+               getenv("HOME"), artist, title);
 
-           return fopen(path, "w");
+    return fopen(path, "w");
 }      
 
 char *check_lyr_hd(char *artist, char *title, int how)
 { //checking whether for lyrics file existence and proper access
-       static char path[1024];
-       snprintf(path, 1024, "%s/.lyrics/%s/%s.lyric", 
-                       getenv("HOME"), artist, title);
+    static char path[1024];
+    snprintf(path, 1024, "%s/.lyrics/%s/%s.lyric", 
+               getenv("HOME"), artist, title);
     
     if(g_access(path, how) != 0) return NULL;
                 
-       return path;
+    return path;
 }              
 
 
 int get_lyr_hd(char *artist, char *title)
 {
-       char *path = check_lyr_hd(artist, title, R_OK);
-       if(path == NULL) return -1;
+    char *path = check_lyr_hd(artist, title, R_OK);
+    if(path == NULL) return -1;
        
-       FILE *lyr_file; 
-       lyr_file = fopen(path, "r");
-       if(lyr_file == NULL) return -1;
+    FILE *lyr_file;    
+    lyr_file = fopen(path, "r");
+    if(lyr_file == NULL) return -1;
        
-       char *buf = NULL;
-       char **line = &buf;
-       size_t n = 0;
+    char *buf = NULL;
+    char **line = &buf;
+    size_t n = 0;
        
-       while(1)
-       {
+    while(1)
+    {
         n = getline(line, &n, lyr_file); 
         if( n < 1 || *line == NULL || feof(lyr_file) != 0 ) return 0;
-        add_text_line(&lyr_text, *line, n);
+        add_text_line(&lyrics.content, *line, n);
         free(*line);
         *line = NULL; n = 0;
-       }
+    }
        
-       return 0;
+    return 0;
 }      
     
 int store_lyr_hd()
 {
-       char artist[512];
-       char title[512];
-       static char path[1024];
-       FILE *lyr_file;
+    char artist[512];
+    char title[512];
+    static char path[1024];
+    FILE *lyr_file;
        
-       get_text_line(&lyr_text, 0, artist, 512);
-       get_text_line(&lyr_text, 1, title, 512);
-       artist[strlen(artist)-1] = '\0';
-       title[strlen(title)-1] = '\0';
+    get_text_line(&lyrics.content, 0, artist, 512);
+    get_text_line(&lyrics.content, 1, title, 512);
+    artist[strlen(artist)-1] = '\0';
+    title[strlen(title)-1] = '\0';
        
-       snprintf(path, 1024, "%s/.lyrics/%s/%s.lyric", 
-                       getenv("HOME"), artist, title);
-       lyr_file = create_lyr_file(artist, title);
-       if(lyr_file == NULL) return -1;
-       int i;
-       char line_buf[1024];
+    snprintf(path, 1024, "%s/.lyrics/%s/%s.lyric", 
+                       getenv("HOME"), artist, title);
+    lyr_file = create_lyr_file(artist, title);
+    if(lyr_file == NULL) return -1;
+    int i;
+    char line_buf[1024];
        
-       for(i = 3; i <= lyr_text.text->len; i++)
-       {
-               if(get_text_line(&lyr_text, i, line_buf, 1024) == -1);
-               fputs(line_buf, lyr_file);
-       }
-       fclose(lyr_file);
-       return 0;
+     for(i = 3; i <= lyrics.content.text->len; i++)
+     {
+         if(get_text_line(&lyrics.content, i, line_buf, 1024) == -1);
+         fputs(line_buf, lyr_file);
+     }
+     fclose(lyr_file);
+     return 0;
 }
                                
        
 void check_repaint()
 {
-       if(screen_get_id("lyrics") == get_cur_mode_id())lyrics_paint(NULL, NULL);
+    if(screen_get_id("lyrics") == get_cur_mode_id())lyrics_paint(NULL, NULL);
 }
 
 
 gpointer get_lyr(void *c)
 {
-       mpd_Status *status = ((retrieval_spec*)c)->client->status;
-       mpd_Song *cur = ((retrieval_spec*)c)->client->song; 
-       //mpdclient_update((mpdclient_t*)c);
+    mpd_Status *status = ((retrieval_spec*)c)->client->status;
+    mpd_Song *cur = ((retrieval_spec*)c)->client->song; 
+    //mpdclient_update((mpdclient_t*)c);
        
-       if(!(IS_PAUSED(status->state)||IS_PLAYING(status->state)))
-       {
-               formed_text_init(&lyr_text);                    
-               return NULL;
-       }
+    if(!(IS_PAUSED(status->state)||IS_PLAYING(status->state)))
+    {
+               formed_text_init(&lyrics.content);                      
+               return NULL;
+    }
        
 
-       char artist[MAX_SONGNAME_LENGTH];
-       char title[MAX_SONGNAME_LENGTH];
-       lock = 2;
-       result = 0;
+    char artist[MAX_SONGNAME_LENGTH];
+    char title[MAX_SONGNAME_LENGTH];
+    lock = 2;
+    lyrics.result = 0;
        
-       formed_text_init(&lyr_text);
+    formed_text_init(&lyrics.content);
        
-       strfsong(artist, MAX_SONGNAME_LENGTH, "%artist%", cur);
-       strfsong(title, MAX_SONGNAME_LENGTH, "%title%", cur);
+    strfsong(artist, MAX_SONGNAME_LENGTH, "%artist%", cur);
+    strfsong(title, MAX_SONGNAME_LENGTH, "%title%", cur);
        
-       //write header..
-       formed_text_init(&lyr_text);
-       add_text_line(&lyr_text, artist, 0);
-       add_text_line(&lyr_text, title, 0);
-       add_text_line(&lyr_text, "", 0);
-       add_text_line(&lyr_text, "", 0);
+    //write header..
+    formed_text_init(&lyrics.content);
+    add_text_line(&lyrics.content, artist, 0);
+    add_text_line(&lyrics.content, title, 0);
+    add_text_line(&lyrics.content, "", 0);
+    add_text_line(&lyrics.content, "", 0);
        
-       if (((retrieval_spec*)c)->way == 1)
-       {
-                if(get_lyr_http(artist, title) != 0) return NULL;
-       }
-       else{
-               if(get_lyr_hd(artist, title) != 0) 
-               {
-               if(get_lyr_http(artist, title) != 0) return NULL;
-               }
-               else result |= 1;
+    if (((retrieval_spec*)c)->way == 1)
+    {
+                if(get_lyr_http(artist, title) != 0) return NULL;
+    }
+    else{
+            if(get_lyr_hd(artist, title) != 0) 
+                   {
+               if(get_lyr_http(artist, title) != 0) return NULL;
+           }
+           else lyrics.result |= 1;
        }
        
-       lw->start = 0;
-       check_repaint();
-       lock = 1;
-       return &lyr_text;
+    lw->start = 0;
+    check_repaint();
+    lock = 1;
+    return &lyrics.content;
 }      
 
 static char *
 list_callback(int index, int *highlight, void *data)
 {
-       static char buf[512];
+    static char buf[512];
        
     //i think i'ts fine to write it into the 1st line...
-  if((index == lyr_text.lines->len && lyr_text.lines->len > 4)||
-         ((lyr_text.lines->len == 0 
-         ||lyr_text.lines->len == 4) && index == 0))
-  {
-    *highlight=3; 
-       return CREDITS;
-  }
+    if((index == lyrics.content.lines->len && lyrics.content.lines->len > 4)||
+         ((lyrics.content.lines->len == 0 
+         ||lyrics.content.lines->len == 4) && index == 0))
+    {
+        *highlight=3; 
+        return CREDITS;
+    }
     
-  if(index < 2 && lyr_text.lines->len > 4) *highlight=3;
-  else if(index >=  lyr_text.lines->len ||
-       ( index < 4 && index != 0 && lyr_text.lines->len < 5))
-  {
-         return "";
-  }
+    if(index < 2 && lyrics.content.lines->len > 4) *highlight=3;
+    else if(index >=  lyrics.content.lines->len ||
+          ( index < 4 && index != 0 && lyrics.content.lines->len < 5))
+    {
+        return "";
+    }
  
-  get_text_line(&lyr_text, index, buf, 512);
-  return buf;
+    get_text_line(&lyrics.content, index, buf, 512);
+    return buf;
 } 
 
 
 static void
 lyrics_init(WINDOW *w, int cols, int rows)
 {
-  lw = list_window_init(w, cols, rows);
-  lw->flags = LW_HIDE_CURSOR;
-  //lyr_text.lines = g_array_new(FALSE, TRUE, 4);
-  formed_text_init(&lyr_text);
-  if (!g_thread_supported()) g_thread_init(NULL);
+    lw = list_window_init(w, cols, rows);
+    lw->flags = LW_HIDE_CURSOR;
+    //lyrics.content.lines = g_array_new(FALSE, TRUE, 4);
+    formed_text_init(&lyrics.content);
+    if (!g_thread_supported()) g_thread_init(NULL);
   
 }
 
 static void
 lyrics_resize(int cols, int rows)
 {
-  lw->cols = cols;
-  lw->rows = rows;
+    lw->cols = cols;
+    lw->rows = rows;
 }
 
 static void
 lyrics_exit(void)
 {
-  list_window_free(lw);
+    list_window_free(lw);
 }
 
 
 static char *
 lyrics_title(char *str, size_t size)
 {
-       if(lyr_text.lines->len == 4)
-       {
-               if(lock == 1)
-               {
-                       if(!(result & 1))
-                       {
-                               if(!(result & 2)) return _("Lyrics  [No connection]");
-                               if(!(result & 4)) return _("Lyrics  [Not found]"); 
-                       }
-               }
-               if(lock == 2) return _("Lyrics  [retrieving]");
-       }
-       /*if(lyr_text.lines->len > 2) 
-       {
-               static char buf[512];
-               char artist[512];
-               char title[512];
-               get_text_line(&lyr_text, 0, artist, 512);
-               get_text_line(&lyr_text, 1, artist, 512);
-               snprintf(buf, 512, "Lyrics  %s - %s", artist, title);
-               return buf;
-       }*/
-       return "Lyrics";
+    if(lyrics.content.lines->len == 4)
+    {
+       if(lock == 1)
+       {
+               if(!(lyrics.result & 1))
+               {
+                       if(!(lyrics.result & 2)) return _("Lyrics  [No connection]");
+                       if(!(lyrics.result & 4)) return _("Lyrics  [Not found]"); 
+               }
+       }
+       if(lock == 2) return _("Lyrics  [retrieving]");
+    }
+    /*if(lyrics.content.lines->len > 2) 
+    {
+       static char buf[512];
+       char artist[512];
+       char title[512];
+               get_text_line(&lyrics.content, 0, artist, 512);
+               get_text_line(&lyrics.content, 1, artist, 512);
+               snprintf(buf, 512, "Lyrics  %s - %s", artist, title);
+               return buf;
+    }*/
+    return "Lyrics";
 }
 
 static void 
@@ -509,24 +523,24 @@ lyrics_paint(screen_t *screen, mpdclient_t *c)
 static void 
 lyrics_update(screen_t *screen, mpdclient_t *c)
 {  
-  if( lw->repaint )
-    {
-      list_window_paint(lw, list_callback, NULL);
-      wrefresh(lw->w);
-      lw->repaint = 0;
-    }
+    if( lw->repaint )
+     {
+        list_window_paint(lw, list_callback, NULL);
+        wrefresh(lw->w);
+        lw->repaint = 0;
+     }
 }
 
 
 static int 
 lyrics_cmd(screen_t *screen, mpdclient_t *c, command_t cmd)
 {
-  lw->repaint=1;
-  static retrieval_spec spec;
-  switch(cmd)
+    lw->repaint=1;
+    static retrieval_spec spec;
+    switch(cmd)
     {
     case CMD_LIST_NEXT:
-      if( lw->start+lw->rows < lyr_text.lines->len+1 )
+      if( lw->start+lw->rows < lyrics.content.lines->len+1 )
        lw->start++;
       return 1;
     case CMD_LIST_PREVIOUS:
@@ -543,8 +557,8 @@ lyrics_cmd(screen_t *screen, mpdclient_t *c, command_t cmd)
       return 1;
     case CMD_LIST_NEXT_PAGE:
       lw->start = lw->start + lw->rows-1;
-      if( lw->start+lw->rows >= lyr_text.lines->len+1 )
-       lw->start = lyr_text.lines->len-lw->rows+1;
+      if( lw->start+lw->rows >= lyrics.content.lines->len+1 )
+       lw->start = lyrics.content.lines->len-lw->rows+1;
       if( lw->start<0 )
        lw->start = 0;
        return 1;
@@ -552,26 +566,27 @@ lyrics_cmd(screen_t *screen, mpdclient_t *c, command_t cmd)
       lw->start = lw->start - lw->rows;
       if( lw->start<0 )
        lw->start = 0;
-      return 1;
-       case CMD_SELECT:
-         spec.client = c;
-         spec.way = 0;
-         g_thread_create(get_lyr, &spec, FALSE, NULL); 
-         return 1;
-       case CMD_INTERRUPT:
-         if(lock > 1) lock = 4;
-         return 1;     
-       case CMD_ADD:
-         if(lock > 0 && lock != 4)
-         {
-                if(store_lyr_hd() == 0) screen_status_message (_("Lyrics saved!"));
-         }
-         return 1;
-       case CMD_LYRICS_UPDATE:
-         spec.client = c;
-         spec.way = 1;
-         g_thread_create(get_lyr, &spec, FALSE, NULL);
-       default:
+       return 1;
+    case CMD_SELECT:
+      spec.client = c;
+      spec.way = 0;
+      g_thread_create(get_lyr, &spec, FALSE, NULL);    
+       return 1;
+    case CMD_INTERRUPT:
+       if(lock > 1) lock = 4;
+       return 1;       
+    case CMD_ADD:
+       if(lock > 0 && lock != 4)
+       {
+                if(store_lyr_hd() == 0) screen_status_message (_("Lyrics saved!"));
+       }
+       return 1;
+    case CMD_LYRICS_UPDATE:
+        spec.client = c;
+        spec.way = 1;
+        g_thread_create(get_lyr, &spec, FALSE, NULL);
+      
+    default:
       break;
     }
 
@@ -595,26 +610,26 @@ lyrics_cmd(screen_t *screen, mpdclient_t *c, command_t cmd)
 static list_window_t *
 lyrics_lw(void)
 {
-  return lw;
+   return lw;
 }
 
 screen_functions_t *
 get_screen_lyrics(void)
 {
-  static screen_functions_t functions;
-
-  memset(&functions, 0, sizeof(screen_functions_t));
-  functions.init   = lyrics_init;
-  functions.exit   = lyrics_exit;
-  functions.open   = NULL;
-  functions.close  = NULL;
-  functions.resize = lyrics_resize;
-  functions.paint  = lyrics_paint;
-  functions.update = lyrics_update;
-  functions.cmd    = lyrics_cmd;
-  functions.get_lw = lyrics_lw;
-  functions.get_title = lyrics_title;
-
-  return &functions;
+    static screen_functions_t functions;
+
+    memset(&functions, 0, sizeof(screen_functions_t));
+    functions.init   = lyrics_init;
+    functions.exit   = lyrics_exit;
+    functions.open   = NULL;
+    functions.close  = NULL;
+    functions.resize = lyrics_resize;
+    functions.paint  = lyrics_paint;
+    functions.update = lyrics_update;
+    functions.cmd    = lyrics_cmd;
+    functions.get_lw = lyrics_lw;
+    functions.get_title = lyrics_title;
+
+    return &functions;
 }
 #endif /* ENABLE_LYRICS_SCREEN */