Hello community,

here is the log from the commit of package pragha for openSUSE:Factory checked 
in at 2014-05-14 10:44:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pragha (Old)
 and      /work/SRC/openSUSE:Factory/.pragha.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "pragha"

Changes:
--------
--- /work/SRC/openSUSE:Factory/pragha/pragha.changes    2014-02-12 
09:49:41.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.pragha.new/pragha.changes       2014-05-14 
10:44:36.000000000 +0200
@@ -1,0 +2,15 @@
+Wed Apr 30 21:17:19 UTC 2014 - lazy.k...@opensuse.org
+
+- Update to 1.2.1.
+  * Create cache folders when init album-art-cache.
+  * Lastfm: Backport some changes from Pragha 1.3.1.
+    + Better protect tags and time_t on threads.
+    + Use diferents time_id to scrobble and update now playing.
+    + Fix submits multiple entries of one song to LastFM.
+    + Betters function names and declare a lot as static.
+  * Show album arts in cache to all songs. But search in folders
+    only to local songs.
+  * Fix Segfault when edit song tags from systray menu.
+  * Not import empty playlists when scan the library.
+
+-------------------------------------------------------------------

Old:
----
  pragha-1.2.tar.bz2

New:
----
  pragha-1.2.1.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ pragha.spec ++++++
--- /var/tmp/diff_new_pack.yn2b1H/_old  2014-05-14 10:44:37.000000000 +0200
+++ /var/tmp/diff_new_pack.yn2b1H/_new  2014-05-14 10:44:37.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           pragha
-Version:        1.2
+Version:        1.2.1
 Release:        0
 Summary:        Lightweight Music Player
 License:        GPL-3.0+

++++++ pragha-1.2.tar.bz2 -> pragha-1.2.1.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pragha-1.2/NEWS new/pragha-1.2.1/NEWS
--- old/pragha-1.2/NEWS 2014-02-08 21:47:03.000000000 +0100
+++ new/pragha-1.2.1/NEWS       2014-04-30 17:57:33.000000000 +0200
@@ -1,17 +1,32 @@
 ==============================================================
-Overview of changes in Pragha 1.2 since 1.1.2
+Overview of changes in Pragha 1.2.1 since 1.2
+==============================================================
+
+Bugs fixed:
+       Create cache folders when init album-art-cache.
+       Lastfm: Backport some changes from Pragha 1.3.1.
+         * Better protect tags and time_t on threads.
+         * Use diferents time_id to scrobble and update now playing.
+         * Fix submits multiple entries of one song to LastFM.
+         * Betters function names and declare a lot as static.
+       Show album arts in cache to all songs. But search in folders only to 
local songs.
+       Fix Segfault when edit song tags from systray menu.
+       Not import empty playlists when scan the library.
+
+==============================================================
+OTHERS REALESES:
 ==============================================================
 
 Pragha V1.2
 Bugs fixed:
-       Fix thread safety when reading tags. 
+       Fix thread safety when reading tags.
        Explicitly specified use normal fonts in the library.
        Fix seg fault when disable and enable again mpris2.
 
 Updates Translations:
        New Korean (Korea) translation thanks to Smallsnail.
        New Vietnamese translation thanks to Ppanhh.
-       Many other updates.. Thanks to all.
+       Many other updates. Thanks to all.
 
 V1.2.rc
 News:
@@ -54,10 +69,6 @@
        * To compile with libcdio >= 0.90 use: ./configure 
CPPFLAGS="-DHAVE_PARANOIA_NEW_INCLUDES"
        Remove dbus-1 and dbus-glib-1 requirements.
 
-==============================================================
-OTHERS REALESES:
-==============================================================
-
 V1.1.2
 News:
        Improved indexing of the library. Also allows continue listening music 
while analyzing. [1]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pragha-1.2/configure new/pragha-1.2.1/configure
--- old/pragha-1.2/configure    2014-02-08 21:49:43.000000000 +0100
+++ new/pragha-1.2.1/configure  2014-04-30 18:09:39.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for pragha 1.2.
+# Generated by GNU Autoconf 2.69 for pragha 1.2.1.
 #
 # Report bugs to <mati8...@gmail.com>.
 #
@@ -593,8 +593,8 @@
 # Identity of this package.
 PACKAGE_NAME='pragha'
 PACKAGE_TARNAME='pragha'
-PACKAGE_VERSION='1.2'
-PACKAGE_STRING='pragha 1.2'
+PACKAGE_VERSION='1.2.1'
+PACKAGE_STRING='pragha 1.2.1'
 PACKAGE_BUGREPORT='mati8...@gmail.com'
 PACKAGE_URL=''
 
@@ -1472,7 +1472,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures pragha 1.2 to adapt to many kinds of systems.
+\`configure' configures pragha 1.2.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1542,7 +1542,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of pragha 1.2:";;
+     short | recursive ) echo "Configuration of pragha 1.2.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1693,7 +1693,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-pragha configure 1.2
+pragha configure 1.2.1
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2065,7 +2065,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by pragha $as_me 1.2, which was
+It was created by pragha $as_me 1.2.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2931,7 +2931,7 @@
 
 # Define the identity of the package.
  PACKAGE='pragha'
- VERSION='1.2'
+ VERSION='1.2.1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -17778,7 +17778,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by pragha $as_me 1.2, which was
+This file was extended by pragha $as_me 1.2.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -17844,7 +17844,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-pragha config.status 1.2
+pragha config.status 1.2.1
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pragha-1.2/configure.ac new/pragha-1.2.1/configure.ac
--- old/pragha-1.2/configure.ac 2014-02-08 21:47:27.000000000 +0100
+++ new/pragha-1.2.1/configure.ac       2014-04-30 18:08:58.000000000 +0200
@@ -6,7 +6,8 @@
 dnl Version information
 m4_define([pragha_version_major], [1])
 m4_define([pragha_version_minor], [2])
-m4_define([pragha_version], [pragha_version_major().pragha_version_minor()])
+m4_define([pragha_version_micro], [1])
+m4_define([pragha_version], 
[pragha_version_major().pragha_version_minor().pragha_version_micro()])
 
 dnl Initialize autoconf
 AC_COPYRIGHT([Copyright (c) 2009-2014
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pragha-1.2/data/pragha.1 
new/pragha-1.2.1/data/pragha.1
--- old/pragha-1.2/data/pragha.1        2014-02-08 21:00:22.000000000 +0100
+++ new/pragha-1.2.1/data/pragha.1      2014-04-30 16:23:59.000000000 +0200
@@ -1,4 +1,4 @@
-.TH "pragha" "1" "1.2.rc" "Matias De lellis" ""
+.TH "pragha" "1" "1.2" "Matias De lellis" ""
 .SH "NAME"
 .LP 
 pragha \- A lightweight music player, forked of Consonance Music Manager
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pragha-1.2/src/pragha-art-cache.c 
new/pragha-1.2.1/src/pragha-art-cache.c
--- old/pragha-1.2/src/pragha-art-cache.c       2014-02-08 21:00:22.000000000 
+0100
+++ new/pragha-1.2.1/src/pragha-art-cache.c     2014-04-30 16:28:23.000000000 
+0200
@@ -16,6 +16,8 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <glib/gstdio.h>
+
 #include "pragha-art-cache.h"
 #include "pragha-utils.h"
 
@@ -28,6 +30,9 @@
 {
        PraghaArtCache *cache = g_slice_new (PraghaArtCache);
        cache->cache_dir = g_build_path (G_DIR_SEPARATOR_S, 
g_get_user_cache_dir (), "pragha", NULL);
+
+       g_mkdir_with_parents (cache->cache_dir, S_IRWXU);
+
        return cache;
 }
 
@@ -43,7 +48,7 @@
 {
        gchar *artist_escaped = pragha_escape_slashes (artist);
        gchar *album_escaped = pragha_escape_slashes (album);
-       gchar *result = g_strdup_printf ("%s/album-%s-%s.jpeg", 
cache->cache_dir, artist_escaped, album_escaped);
+       gchar *result = g_strdup_printf ("%s%salbum-%s-%s.jpeg", 
cache->cache_dir, G_DIR_SEPARATOR_S, artist_escaped, album_escaped);
        g_free (album_escaped);
        g_free (artist_escaped);
        return result;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pragha-1.2/src/pragha-lastfm.c 
new/pragha-1.2.1/src/pragha-lastfm.c
--- old/pragha-1.2/src/pragha-lastfm.c  2014-02-08 21:00:22.000000000 +0100
+++ new/pragha-1.2.1/src/pragha-lastfm.c        2014-04-30 17:30:39.000000000 
+0200
@@ -41,18 +41,21 @@
 #include <clastfm.h>
 
 struct _PraghaLastfm {
+       PraghaApplication        *pragha;
+
        /* Last session status. */
        LASTFM_SESSION           *session_id;
        enum LASTFM_STATUS_CODES  status;
        gboolean                  has_user;
        gboolean                  has_pass;
 
-       /* Elapsed Time*/
-       time_t playback_started;
+       /* Song status */
+       PRAGHA_MUTEX              (data_mutex);
+       time_t                    playback_started;
+       PraghaMusicobject        *current_mobj;
+       PraghaMusicobject        *updated_mobj;
 
-       GtkWidget         *ntag_lastfm_button;
-       PraghaMusicobject *nmobj;
-       PRAGHA_MUTEX      (nmobj_mutex);
+       GtkWidget                *ntag_lastfm_button;
 
        /* Menu options */
        GtkActionGroup *action_group_main_menu;
@@ -61,10 +64,8 @@
        GtkActionGroup *action_group_playlist;
        guint merge_id_playlist;
 
-       guint           timeout_id;
-
-       /* Future PraghaAplication */
-       PraghaApplication *pragha;
+       guint                     update_timeout_id;
+       guint                     scrobble_timeout_id;
 };
 
 #define LASTFM_API_KEY "ecdc2d21dbfe1139b1f0da35daca9309"
@@ -219,7 +220,7 @@
        gtk_action_set_sensitive (action, sensitive);
 }
 
-void
+static void
 pragha_lastfm_update_menu_actions (PraghaLastfm *clastfm)
 {
        PraghaBackend *backend;
@@ -365,7 +366,7 @@
 }
 
 static void
-edit_tags_corrected_by_lastfm (GtkButton *button, PraghaLastfm *clastfm)
+pragha_lastfm_tags_corrected_dialog (GtkButton *button, PraghaLastfm *clastfm)
 {
        PraghaBackend *backend;
        PraghaMusicobject *tmobj, *nmobj;
@@ -393,9 +394,9 @@
 
        /* Get all info of suggestions
         * Temp Musicobject to not block tag edit dialog */
-       pragha_mutex_lock (clastfm->nmobj_mutex);
-       nmobj = pragha_musicobject_dup(clastfm->nmobj);
-       pragha_mutex_unlock (clastfm->nmobj_mutex);
+       pragha_mutex_lock (clastfm->data_mutex);
+       nmobj = pragha_musicobject_dup(clastfm->updated_mobj);
+       pragha_mutex_unlock (clastfm->data_mutex);
 
        g_object_get(nmobj,
                     "title", &ntitle,
@@ -441,14 +442,14 @@
                                    _("Last.fm suggested a tag correction"));
 
        g_signal_connect(G_OBJECT(ntag_lastfm_button), "clicked",
-                        G_CALLBACK(edit_tags_corrected_by_lastfm), clastfm);
+                        G_CALLBACK(pragha_lastfm_tags_corrected_dialog), 
clastfm);
 
        return ntag_lastfm_button;
 }
 
 /* Love and unlove music object */
 
-gpointer
+static gpointer
 do_lastfm_love_mobj (PraghaLastfm *clastfm, const gchar *title, const gchar 
*artist)
 {
        gint rv;
@@ -465,7 +466,7 @@
                return NULL;
 }
 
-gpointer
+static gpointer
 do_lastfm_unlove_mobj (PraghaLastfm *clastfm, const gchar *title, const gchar 
*artist)
 {
        gint rv;
@@ -485,7 +486,7 @@
 
 /* Functions related to current playlist. */
 
-gpointer
+static gpointer
 do_lastfm_current_playlist_love (gpointer data)
 {
        PraghaPlaylist *playlist;
@@ -519,7 +520,7 @@
                             clastfm);
 }
 
-gpointer
+static gpointer
 do_lastfm_current_playlist_unlove (gpointer data)
 {
        PraghaPlaylist *playlist;
@@ -610,7 +611,7 @@
        return FALSE;
 }
 
-gpointer
+static gpointer
 do_lastfm_get_similar (PraghaLastfm *clastfm, const gchar *title, const gchar 
*artist)
 {
        LFMList *results = NULL, *li;
@@ -645,7 +646,7 @@
        return data;
 }
 
-gpointer
+static gpointer
 do_lastfm_get_similar_current_playlist_action (gpointer user_data)
 {
        PraghaPlaylist *playlist;
@@ -783,7 +784,7 @@
        gtk_widget_show_all (dialog);
 }
 
-gpointer
+static gpointer
 do_lastfm_add_favorites_action (gpointer user_data)
 {
        PraghaPreferences *preferences;
@@ -971,32 +972,32 @@
 }
 
 static gpointer
-do_lastfm_scrob (gpointer data)
+pragha_lastfm_scrobble_thread (gpointer data)
 {
-       gint rv;
        gchar *title = NULL, *artist = NULL, *album = NULL;
-       gint track_no, length;
-
-       PraghaLastfmAsyncData *lastfm_async_data = data;
+       gint track_no, length, rv;
+       time_t last_time;
 
-       PraghaLastfm *clastfm   = lastfm_async_data->clastfm;
-       PraghaMusicobject *mobj = lastfm_async_data->mobj;
+       PraghaLastfm *clastfm = data;
 
        CDEBUG(DBG_LASTFM, "Scrobbler thread");
 
-       g_object_get(mobj,
-                    "title", &title,
-                    "artist", &artist,
-                    "album", &album,
-                    "track-no", &track_no,
-                    "length", &length,
-                    NULL);
+       pragha_mutex_lock (clastfm->data_mutex);
+       g_object_get (clastfm->current_mobj,
+                     "title", &title,
+                     "artist", &artist,
+                     "album", &album,
+                     "track-no", &track_no,
+                     "length", &length,
+                     NULL);
+       last_time = clastfm->playback_started;
+       pragha_mutex_unlock (clastfm->data_mutex);
 
        rv = LASTFM_track_scrobble (clastfm->session_id,
                                    title,
                                    album,
                                    artist,
-                                   clastfm->playback_started,
+                                   last_time,
                                    length,
                                    track_no,
                                    0, NULL);
@@ -1004,7 +1005,6 @@
        g_free(title);
        g_free(artist);
        g_free(album);
-       pragha_lastfm_async_data_free(lastfm_async_data);
 
        if (rv != LASTFM_STATUS_OK)
                return _("Last.fm submission failed");
@@ -1012,32 +1012,8 @@
                return _("Track scrobbled on Last.fm");
 }
 
-gboolean
-lastfm_scrob_handler(gpointer data)
-{
-       PraghaBackend *backend;
-       PraghaLastfm *clastfm = data;
-
-       CDEBUG(DBG_LASTFM, "Scrobbler Handler");
-
-       backend = pragha_application_get_backend (clastfm->pragha);
-       if(pragha_backend_get_state (backend) == ST_STOPPED)
-               return FALSE;
-
-       if (clastfm->status != LASTFM_STATUS_OK) {
-               pragha_lastfm_no_connection_advice ();
-               return FALSE;
-       }
-
-       pragha_async_launch (do_lastfm_scrob,
-                            pragha_async_set_idle_message,
-                            pragha_lastfm_async_data_new (clastfm));
-
-       return FALSE;
-}
-
 static gboolean
-show_lastfm_sugest_corrrection_button (gpointer user_data)
+pragha_lastfm_show_corrrection_button (gpointer user_data)
 {
        PraghaToolbar *toolbar;
        PraghaBackend *backend;
@@ -1061,11 +1037,11 @@
                     "file", &cfile,
                     NULL);
 
-       pragha_mutex_lock (clastfm->nmobj_mutex);
-       g_object_get (clastfm->nmobj,
+       pragha_mutex_lock (clastfm->data_mutex);
+       g_object_get (clastfm->updated_mobj,
                      "file", &nfile,
                      NULL);
-       pragha_mutex_unlock (clastfm->nmobj_mutex);
+       pragha_mutex_unlock (clastfm->data_mutex);
 
        if(g_ascii_strcasecmp(cfile, nfile) == 0)
                gtk_widget_show (clastfm->ntag_lastfm_button);
@@ -1077,29 +1053,26 @@
 }
 
 static gpointer
-do_lastfm_now_playing (gpointer data)
+pragha_lastfm_now_playing_thread (gpointer data)
 {
-       PraghaMusicobject *tmobj;
-       gchar *title = NULL, *artist = NULL, *album = NULL;
+       gchar *title = NULL, *artist = NULL, *album = NULL;;
        gint track_no, length;
        LFMList *list = NULL;
        LASTFM_TRACK_INFO *ntrack = NULL;
        gint changed = 0, rv;
 
-       PraghaLastfmAsyncData *lastfm_async_data = data;
-
-       PraghaLastfm *clastfm   = lastfm_async_data->clastfm;
-       PraghaMusicobject *mobj = lastfm_async_data->mobj;
+       PraghaLastfm *clastfm = data;
 
        CDEBUG(DBG_LASTFM, "Update now playing thread");
-
-       g_object_get(mobj,
+       pragha_mutex_lock (clastfm->data_mutex);
+       g_object_get(clastfm->current_mobj,
                     "title", &title,
                     "artist", &artist,
                     "album", &album,
                     "track-no", &track_no,
                     "length", &length,
                     NULL);
+       pragha_mutex_unlock (clastfm->data_mutex);
 
        rv = LASTFM_track_update_now_playing (clastfm->session_id,
                                              title,
@@ -1123,30 +1096,26 @@
                }
 
                if (changed) {
-                       tmobj = g_object_ref(mobj);
+                       g_mutex_lock (&clastfm->data_mutex);
+                       g_object_unref (clastfm->updated_mobj);
+                       clastfm->updated_mobj = pragha_musicobject_dup 
(clastfm->current_mobj);
 
                        if(changed & TAG_TITLE_CHANGED)
-                               pragha_musicobject_set_title(tmobj, 
ntrack->name);
+                               
pragha_musicobject_set_title(clastfm->updated_mobj, ntrack->name);
                        if(changed & TAG_ARTIST_CHANGED)
-                               pragha_musicobject_set_artist(tmobj, 
ntrack->artist);
+                               
pragha_musicobject_set_artist(clastfm->updated_mobj, ntrack->artist);
                        if(changed & TAG_ALBUM_CHANGED)
-                               pragha_musicobject_set_album(tmobj, 
ntrack->album);
+                               
pragha_musicobject_set_album(clastfm->updated_mobj, ntrack->album);
+                       pragha_mutex_unlock (clastfm->data_mutex);
 
-                       pragha_mutex_lock (clastfm->nmobj_mutex);
-                       g_object_unref (clastfm->nmobj);
-                       clastfm->nmobj = tmobj;
-                       pragha_mutex_unlock (clastfm->nmobj_mutex);
-
-                       g_idle_add (show_lastfm_sugest_corrrection_button, 
clastfm);
+                       g_idle_add (pragha_lastfm_show_corrrection_button, 
clastfm);
                }
        }
-
        LASTFM_free_track_info_list(list);
 
        g_free(title);
        g_free(artist);
        g_free(album);
-       pragha_lastfm_async_data_free(lastfm_async_data);
 
        if (rv != LASTFM_STATUS_OK)
                return _("Update current song on Last.fm failed.");
@@ -1154,74 +1123,57 @@
                return NULL;
 }
 
-void
-lastfm_now_playing_handler (PraghaLastfm *clastfm)
+static gboolean
+pragha_lastfm_now_playing_handler (gpointer data)
 {
        PraghaBackend *backend;
-       gchar *title = NULL, *artist = NULL;
-       gint length;
+       PraghaMusicobject *mobj = NULL;
+
+       PraghaLastfm *clastfm = data;
 
        CDEBUG(DBG_LASTFM, "Update now playing Handler");
 
+       clastfm->update_timeout_id = 0;
+
+       /* Set current song info */
        backend = pragha_application_get_backend (clastfm->pragha);
+       mobj = pragha_backend_get_musicobject (backend);
 
-       if(pragha_backend_get_state (backend) == ST_STOPPED)
-               return;
+       g_mutex_lock (&clastfm->data_mutex);
+       if (clastfm->current_mobj)
+               g_object_unref (clastfm->current_mobj);
+       clastfm->current_mobj = pragha_musicobject_dup (mobj);
 
-       if (!clastfm->has_user || !clastfm->has_pass)
-               return;
+       if (clastfm->updated_mobj)
+               g_object_unref (clastfm->updated_mobj);
+       clastfm->updated_mobj = NULL;
 
-       if (clastfm->status != LASTFM_STATUS_OK) {
-               pragha_lastfm_no_connection_advice ();
-               return;
-       }
+       time(&clastfm->playback_started);
+       g_mutex_unlock (&clastfm->data_mutex);
 
-       g_object_get(pragha_backend_get_musicobject (backend),
-                    "title", &title,
-                    "artist", &artist,
-                    "length", &length,
-                    NULL);
-
-       if (string_is_empty(title) || string_is_empty(artist) || (length < 30))
-               goto exit;
-
-       pragha_async_launch (do_lastfm_now_playing,
+       pragha_async_launch (pragha_lastfm_now_playing_thread,
                             pragha_async_set_idle_message,
-                            pragha_lastfm_async_data_new (clastfm));
-
-       /* Kick the lastfm scrobbler on
-        * Note: Only scrob if tracks is more than 30s.
-        * and scrob when track is at 50% or 4mins, whichever comes
-        * first */
-
-       if((length / 2) > (240 - WAIT_UPDATE)) {
-               length = 240 - WAIT_UPDATE;
-       }
-       else {
-               length = (length / 2) - WAIT_UPDATE;
-       }
-
-       clastfm->timeout_id = g_timeout_add_seconds_full 
(G_PRIORITY_DEFAULT_IDLE, length,
-                                                         lastfm_scrob_handler, 
clastfm, NULL);
-exit:
-       g_free(title);
-       g_free(artist);
+                            clastfm);
 
-       return;
+       return FALSE;
 }
 
 static gboolean
-update_related_handler (gpointer data)
+pragha_lastfm_scrobble_handler (gpointer data)
 {
-       PraghaPreferences *preferences;
-
        PraghaLastfm *clastfm = data;
 
-       CDEBUG(DBG_INFO, "Updating Lastm depending preferences");
+       CDEBUG(DBG_LASTFM, "Scrobbler Handler");
 
-       preferences = pragha_application_get_preferences (clastfm->pragha);
-       if (pragha_preferences_get_lastfm_support (preferences))
-               lastfm_now_playing_handler (clastfm);
+       clastfm->scrobble_timeout_id = 0;
+       if (clastfm->status != LASTFM_STATUS_OK) {
+               pragha_lastfm_no_connection_advice ();
+               return FALSE;
+       }
+
+       pragha_async_launch (pragha_lastfm_scrobble_thread,
+                            pragha_async_set_idle_message,
+                            clastfm);
 
        return FALSE;
 }
@@ -1229,8 +1181,11 @@
 static void
 backend_changed_state_cb (PraghaBackend *backend, GParamSpec *pspec, gpointer 
user_data)
 {
+       PraghaPreferences *preferences;
+       PraghaMusicobject *mobj = NULL;
        PraghaMusicType file_type = FILE_NONE;
        PraghaBackendState state = 0;
+       gint length = 0, dalay_time = 0;
 
        PraghaLastfm *clastfm = user_data;
 
@@ -1244,9 +1199,13 @@
 
        /* Update thread. */
 
-       if (clastfm->timeout_id) {
-               g_source_remove (clastfm->timeout_id);
-               clastfm->timeout_id = 0;
+       if (clastfm->update_timeout_id) {
+               g_source_remove (clastfm->update_timeout_id);
+               clastfm->update_timeout_id = 0;
+       }
+       if (clastfm->scrobble_timeout_id) {
+               g_source_remove (clastfm->scrobble_timeout_id);
+               clastfm->scrobble_timeout_id = 0;
        }
 
        if (state != ST_PLAYING) {
@@ -1255,16 +1214,43 @@
                return;
        }
 
-       file_type = pragha_musicobject_get_file_type 
(pragha_backend_get_musicobject (backend));
+       /*
+        * Check settings, status, file-type, title, artist and length before 
update.
+        */
+       preferences = pragha_application_get_preferences (clastfm->pragha);
+       if (!pragha_preferences_get_lastfm_support (preferences))
+               return;
+
+       if (!clastfm->has_user || !clastfm->has_pass)
+               return;
+
+       if (clastfm->status != LASTFM_STATUS_OK)
+               return;
+
+       mobj = pragha_backend_get_musicobject (backend);
 
+       file_type = pragha_musicobject_get_file_type (mobj);
        if (file_type == FILE_NONE || file_type == FILE_HTTP)
                return;
 
-       if (clastfm->status == LASTFM_STATUS_OK)
-               time(&clastfm->playback_started);
+       length = pragha_musicobject_get_length (mobj);
+       if (length < 30)
+               return;
+
+       if (string_is_empty(pragha_musicobject_get_title(mobj)))
+               return;
+       if (string_is_empty(pragha_musicobject_get_artist(mobj)))
+               return;
 
-       clastfm->timeout_id = g_timeout_add_seconds_full 
(G_PRIORITY_DEFAULT_IDLE, WAIT_UPDATE,
-                                                         
update_related_handler, clastfm, NULL);
+       /* Now playing delayed handler */
+       clastfm->update_timeout_id =
+               g_timeout_add_seconds_full (G_PRIORITY_DEFAULT_IDLE, 
WAIT_UPDATE,
+                                           pragha_lastfm_now_playing_handler, 
clastfm, NULL);
+       /* Scrobble delayed handler */
+       dalay_time = ((length / 2) > 240) ? 240 : (length / 2);
+       clastfm->scrobble_timeout_id =
+               g_timeout_add_seconds_full (G_PRIORITY_DEFAULT_IDLE, dalay_time,
+                                           pragha_lastfm_scrobble_handler, 
clastfm, NULL);
 }
 
 static void
@@ -1425,14 +1411,18 @@
 
        clastfm->session_id = NULL;
        clastfm->status = LASTFM_STATUS_INVALID;
-       clastfm->nmobj = pragha_musicobject_new();
-       pragha_mutex_create (clastfm->nmobj_mutex);
+
+       pragha_mutex_create (clastfm->data_mutex);
+       clastfm->updated_mobj = pragha_musicobject_new ();
+       clastfm->current_mobj = pragha_musicobject_new ();
+
        clastfm->ntag_lastfm_button = NULL;
 
        clastfm->has_user = FALSE;
        clastfm->has_pass = FALSE;
 
-       clastfm->timeout_id = 0;
+       clastfm->update_timeout_id = 0;
+       clastfm->scrobble_timeout_id = 0;
 
        clastfm->pragha = pragha;
 
@@ -1461,8 +1451,10 @@
 {
        pragha_lastfm_disconnect (clastfm);
 
-       g_object_unref(clastfm->nmobj);
-       pragha_mutex_free(clastfm->nmobj_mutex);
+       g_object_unref (clastfm->updated_mobj);
+       g_object_unref (clastfm->current_mobj);
+
+       pragha_mutex_free(clastfm->data_mutex);
 
        g_slice_free(PraghaLastfm, clastfm);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pragha-1.2/src/pragha-playback.c 
new/pragha-1.2.1/src/pragha-playback.c
--- old/pragha-1.2/src/pragha-playback.c        2014-02-08 21:00:22.000000000 
+0100
+++ new/pragha-1.2.1/src/pragha-playback.c      2014-04-30 17:34:33.000000000 
+0200
@@ -220,9 +220,6 @@
        if (G_UNLIKELY(!mobj))
                return;
 
-       if (!pragha_musicobject_is_local_file(mobj))
-               return;
-
        preferences = pragha_application_get_preferences (pragha);
        if (!pragha_preferences_get_show_album_art (preferences))
                return;
@@ -233,6 +230,9 @@
                                           pragha_musicobject_get_album(mobj));
 
        if (album_path == NULL) {
+               if (!pragha_musicobject_is_local_file(mobj))
+                       return;
+
                path = g_path_get_dirname(pragha_musicobject_get_file(mobj));
 
                album_path = get_pref_image_path_dir (preferences, path);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pragha-1.2/src/pragha-scanner.c 
new/pragha-1.2.1/src/pragha-scanner.c
--- old/pragha-1.2/src/pragha-scanner.c 2014-02-08 21:00:22.000000000 +0100
+++ new/pragha-1.2.1/src/pragha-scanner.c       2014-04-30 17:42:41.000000000 
+0200
@@ -160,9 +160,9 @@
        list = pragha_pl_parser_parse_from_file_by_extension (playlist_file);
 #endif
 
-       playlist_id = pragha_database_add_new_playlist (database, playlist);
-       if(list) {
-               for (i=list; i != NULL; i = i->next) {
+       if (list) {
+               playlist_id = pragha_database_add_new_playlist (database, 
playlist);
+               for (i = list; i != NULL; i = i->next) {
                        pragha_database_add_playlist_track (database, 
playlist_id, i->data);
                        g_free(i->data);
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pragha-1.2/src/pragha-statusicon.c 
new/pragha-1.2.1/src/pragha-statusicon.c
--- old/pragha-1.2/src/pragha-statusicon.c      2014-02-08 21:00:22.000000000 
+0100
+++ new/pragha-1.2.1/src/pragha-statusicon.c    2014-04-30 17:37:13.000000000 
+0200
@@ -49,6 +49,7 @@
 static void systray_stop_action         (GtkAction *action, PraghaStatusIcon 
*status_icon);
 static void systray_prev_action         (GtkAction *action, PraghaStatusIcon 
*status_icon);
 static void systray_next_action         (GtkAction *action, PraghaStatusIcon 
*status_icon);
+static void systray_edit_action         (GtkAction *action, PraghaStatusIcon 
*status_icon);
 static void systray_quit                (GtkAction *action, PraghaStatusIcon 
*status_icon);
 
 static const gchar *systray_menu_xml =
@@ -88,9 +89,9 @@
         "", "Stop", G_CALLBACK(systray_stop_action)},
        {"Next", GTK_STOCK_MEDIA_NEXT, N_("Next Track"),
         "", "Next Track", G_CALLBACK(systray_next_action)},
-       {"Edit tags", GTK_STOCK_EDIT, N_("Edit track information"),
-        "", "Edit information of current track", 
G_CALLBACK(edit_tags_playing_action)},
-       {"Quit", GTK_STOCK_QUIT, N_("_Quit"),
+       {"Edit tags", NULL, N_("Edit track information"),
+        "", "Edit information of current track", 
G_CALLBACK(systray_edit_action)},
+       {"Quit", "application-exit", N_("_Quit"),
         "", "Quit", G_CALLBACK(systray_quit)}
 };
 
@@ -234,6 +235,12 @@
 }
 
 static void
+systray_edit_action (GtkAction *action, PraghaStatusIcon *status_icon)
+{
+       edit_tags_playing_action (NULL, status_icon->pragha);
+}
+
+static void
 systray_quit (GtkAction *action, PraghaStatusIcon *status_icon)
 {
        pragha_application_quit (status_icon->pragha);

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to