Code

po: improved translatable strings for easier translation
[ncmpc.git] / src / screen_lyrics.c
index 6d9c6e4af03ab96a700c0dc647f9d8ed0d114423..93a47cc8d3f3bae0b3a45094c5e7f7aa225e4a61 100644 (file)
@@ -27,7 +27,6 @@
 #include "strfsong.h"
 #include "lyrics.h"
 #include "charset.h"
-#include "gcc.h"
 
 #define _GNU_SOURCE
 #include <stdlib.h>
@@ -41,7 +40,7 @@ static list_window_t *lw = NULL;
 static const struct mpd_song *next_song;
 
 static struct {
-       const struct mpd_song *song;
+       struct mpd_song *song;
 
        char *artist, *title;
 
@@ -68,7 +67,10 @@ screen_lyrics_abort(void)
                current.artist = NULL;
        }
 
-       current.song = NULL;
+       if (current.song != NULL) {
+               mpd_freeSong(current.song);
+               current.song = NULL;
+       }
 }
 
 static void
@@ -76,6 +78,8 @@ screen_lyrics_clear(void)
 {
        guint i;
 
+       list_window_reset(lw);
+
        for (i = 0; i < current.lines->len; ++i)
                g_free(g_ptr_array_index(current.lines, i));
 
@@ -152,7 +156,7 @@ screen_lyrics_set(const GString *str)
 }
 
 static void
-screen_lyrics_callback(const GString *result, mpd_unused void *data)
+screen_lyrics_callback(const GString *result, G_GNUC_UNUSED void *data)
 {
        assert(current.loader != NULL);
 
@@ -175,7 +179,7 @@ screen_lyrics_load(const struct mpd_song *song)
        screen_lyrics_abort();
        screen_lyrics_clear();
 
-       current.song = song;
+       current.song = mpd_songDup(song);
 
        strfsong(buffer, sizeof(buffer), "%artist%", song);
        current.artist = g_strdup(buffer);
@@ -219,7 +223,8 @@ static int store_lyr_hd(void)
 }
 
 static const char *
-list_callback(unsigned idx, mpd_unused int *highlight, mpd_unused void *data)
+list_callback(unsigned idx, G_GNUC_UNUSED int *highlight,
+             G_GNUC_UNUSED void *data)
 {
        static char buffer[256];
        char *value;
@@ -268,7 +273,9 @@ lyrics_open(mpdclient_t *c)
        if (next_song == NULL)
                next_song = c->song;
 
-       if (next_song != NULL && next_song != current.song)
+       if (next_song != NULL &&
+           (current.song == NULL ||
+            strcmp(next_song->file, current.song->file) != 0))
                screen_lyrics_load(next_song);
 
        next_song = NULL;
@@ -278,15 +285,18 @@ lyrics_open(mpdclient_t *c)
 static const char *
 lyrics_title(char *str, size_t size)
 {
-       if (current.loader != NULL)
-               return "Lyrics (loading)";
-       else if (current.artist != NULL && current.title != NULL &&
-                current.lines->len > 0) {
-               snprintf(str, size, "Lyrics: %s - %s",
+       if (current.loader != NULL) {
+               snprintf(str, size, "%s (%s)",
+                        _("Lyrics"), _("loading..."));
+               return str;
+       } else if (current.artist != NULL && current.title != NULL &&
+                  current.lines->len > 0) {
+               snprintf(str, size, "%s: %s - %s",
+                        _("Lyrics"),
                         current.artist, current.title);
                return str;
        } else
-               return "Lyrics";
+               return _("Lyrics");
 }
 
 static void
@@ -295,12 +305,12 @@ lyrics_paint(void)
        list_window_paint(lw, list_callback, NULL);
 }
 
-static int
+static bool
 lyrics_cmd(mpdclient_t *c, command_t cmd)
 {
        if (list_window_scroll_cmd(lw, current.lines->len, cmd)) {
                lyrics_repaint();
-               return 1;
+               return true;
        }
 
        switch(cmd) {
@@ -309,18 +319,37 @@ lyrics_cmd(mpdclient_t *c, command_t cmd)
                        screen_lyrics_abort();
                        screen_lyrics_clear();
                }
-               return 1;
+               return true;
        case CMD_ADD:
                if (current.loader == NULL && current.artist != NULL &&
                    current.title != NULL && store_lyr_hd() == 0)
-                       screen_status_message (_("Lyrics saved!"));
-               return 1;
+                       screen_status_message (_("Lyrics saved"));
+               return true;
        case CMD_LYRICS_UPDATE:
                if (c->song != NULL) {
                        screen_lyrics_load(c->song);
                        lyrics_repaint();
                }
-               return 1;
+               return true;
+
+#ifdef ENABLE_SONG_SCREEN
+       case CMD_VIEW:
+               if (current.song != NULL) {
+                       screen_song_switch(c, current.song);
+                       return true;
+               }
+
+               break;
+#endif
+
+       case CMD_LOCATE:
+               if (current.song != NULL) {
+                       screen_file_goto_song(c, current.song);
+                       return true;
+               }
+
+               return false;
+
        default:
                break;
        }
@@ -331,10 +360,10 @@ lyrics_cmd(mpdclient_t *c, command_t cmd)
                /* center the row */
                list_window_center(lw, current.lines->len, lw->selected);
                lyrics_repaint();
-               return 1;
+               return true;
        }
 
-       return 0;
+       return false;
 }
 
 const struct screen_functions screen_lyrics = {