Greetings Everyone, I've modified the Play Queue GUI to display the total play list time. When there are no tracks queued, the default is displayed as it was previously: Play Queue When there are tracks queued, rather than displaying something like this... Play Queue (8) ...it now displays... Play Queue (8): 39 minutes, 28 seconds I am receptive to criticism and I'd appreciate it if one of the maintainers could look over my patch for consideration to apply against svn head in trunk. Thanks. -- Kip Warner -- Software Engineer OpenPGP encrypted/signed mail preferred http://www.thevertigo.com
Index: sources/rb-play-queue-source.c
===================================================================
--- sources/rb-play-queue-source.c (revision 5821)
+++ sources/rb-play-queue-source.c (working copy)
@@ -457,28 +457,89 @@
GtkTreeModel *model,
gint offset)
{
- gint count = gtk_tree_model_iter_n_children (model, NULL) + offset;
- RBPlayQueueSourcePrivate *priv = RB_PLAY_QUEUE_SOURCE_GET_PRIVATE (source);
- char *name = _("Play Queue");
- GtkAction *action;
- /* update source name */
- if (count > 0)
- name = g_strdup_printf ("%s (%d)", name, count);
+ gint count = gtk_tree_model_iter_n_children (model, NULL) + offset;
+ RBPlayQueueSourcePrivate *priv = RB_PLAY_QUEUE_SOURCE_GET_PRIVATE (source);
+ char *name = _("Play Queue");
+ char *pszTemp = NULL;
+ GtkAction *action;
- g_object_set (G_OBJECT (source), "name", name, NULL);
- gtk_tree_view_column_set_title (priv->sidebar_column, name);
+ // There are items available, update name to reflect this...
+ if (count > 0) {
- if (count > 0)
- g_free (name);
+ // Compute and format components of total duration needed later...
+ // Total duration...
+ glong const lTotalDuration =
+ rhythmdb_query_model_get_duration(RHYTHMDB_QUERY_MODEL(model));
+
+ /* I think I am doing something wrong in the call above here,
+ since removing a track from the play queue doesn't always
+ result in the correct duration being returned here when this
+ function is invoked - Kip (kip thevertigo com) */
+
+ // Days...
+ glong const lDays = lTotalDuration / (60 * 60 * 24);
+ char *pszDays = g_strdup_printf(
+ ngettext ("%ld day", "%ld days", lDays), lDays);
+
+ // Hours...
+ gint const nHours = (lTotalDuration / (60 * 60)) - (lDays * 24);
+ char *pszHours = g_strdup_printf(
+ ngettext ("%d hour", "%d hours", nHours), nHours);
+
+ // Minutes...
+ gint const nMinutes = (lTotalDuration / 60) - ((lDays * 24 * 60) + (nHours * 60));
+ char *pszMinutes = g_strdup_printf(
+ ngettext ("%d minute", "%d minutes", nMinutes), nMinutes);
+
+ // Seconds...
+ gint const nSeconds = lTotalDuration % 60;
+ char *pszSeconds = g_strdup_printf(
+ ngettext ("%d second", "%d seconds", nSeconds), nSeconds);
+
+ // Long enough to mention days, hours, minutes, and seconds...
+ if (lDays > 0)
+ pszTemp = g_strjoin(", ", pszDays, pszHours, pszMinutes, pszSeconds, NULL);
+
+ // Long enough to mention hours, minutes, and seconds...
+ else if (nHours > 0)
+ pszTemp = g_strjoin(", ", pszHours, pszMinutes, pszSeconds, NULL);
+
+ // Long enough to mention minutes and seconds...
+ else if (nMinutes > 0)
+ pszTemp = g_strjoin(", ", pszMinutes, pszSeconds, NULL);
+
+ // Too short to mention anything other than seconds...
+ else
+ pszTemp = g_strdup(pszSeconds);
+
+ // Format the final string to display...
+ name = g_strdup_printf(
+ "%s (%d): %s", _("Play Queue"), count, pszTemp);
+
+ // Cleanup...
+ g_free (pszTemp);
+ g_free (pszDays);
+ g_free (pszHours);
+ g_free (pszMinutes);
+ g_free (pszSeconds);
+ }
+
+ g_object_set (G_OBJECT (source), "name", name, NULL);
+ gtk_tree_view_column_set_title (priv->sidebar_column, name);
+
+ // Cleanup...
+ if (count > 0)
+ g_free (name);
+
/* make 'clear queue' and 'shuffle queue' actions sensitive when there are entries in the queue */
- action = gtk_action_group_get_action (priv->action_group,
- "ClearQueue");
- g_object_set (G_OBJECT (action), "sensitive", (count > 0), NULL);
+ action = gtk_action_group_get_action (
+ priv->action_group, "ClearQueue");
+ g_object_set (G_OBJECT (action), "sensitive", (count > 0), NULL);
- action = gtk_action_group_get_action (priv->action_group, "ShuffleQueue");
- g_object_set (G_OBJECT (action), "sensitive", (count > 0), NULL);
+ action = gtk_action_group_get_action (priv->action_group, "ShuffleQueue");
+ g_object_set (G_OBJECT (action), "sensitive", (count > 0), NULL);
}
static void
Attachment:
signature.asc
Description: This is a digitally signed message part