[vlc-devel] [RFC v2] audioscrobbler: submit the currently playing track

Jonas Lundqvist jonas at gannon.se
Wed Nov 4 18:59:29 CET 2015


Hi Hugo,

On Wed, Nov 04, 2015 at 01:55:37PM +0100, Hugo Beauzée-Luyssen wrote:
> >@@ -22,11 +22,10 @@
> >   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
> >   *****************************************************************************/
> >
> >-/* audioscrobbler protocol version: 1.2
> >- * http://www.audioscrobbler.net/development/protocol/
> >+/* Last.fm Submissions protocol version: 1.2
> >+ * http://www.last.fm/api/submissions
> >   *
> >- * TODO:    "Now Playing" feature (not mandatory)
> >- *          Update to new API? http://www.lastfm.fr/api
> >+ * TODO:    Update to new API? http://www.last.fm/api/scrobbling
> >   */
> 
> This should be in a separate patch

Sure, I'll split the changes into smaller patches.

> >@@ -88,11 +87,8 @@ struct intf_sys_t
> >      vlc_url_t               p_submit_url;       /**< where to submit data   */
> >
> >      /* submission of playing song */
> >-#if 0 //NOT USED
> >-    char                    *psz_nowp_host;     /**< where to submit data   */
> >-    int                     i_nowp_port;        /**< port to which submit   */
> >-    char                    *psz_nowp_file;     /**< file to which submit   */
> >-#endif
> 
> Removal of dead code should be in another patch as well.


Ok, I'll fix it.

> >@@ -216,8 +212,11 @@ static void ReadMetaData(intf_thread_t *p_this, input_thread_t *p_input)
> >
> >      msg_Dbg(p_this, "Meta data registered");
> >
> >+    vlc_cond_signal(&p_sys->wait);
> >+
> >  end:
> >      vlc_mutex_unlock(&p_sys->lock);
> >+
> 
> Extra whitespace change

Ok, I'll fix it.

> >@@ -389,6 +388,7 @@ static int ItemChange(vlc_object_t *p_this, const char *psz_var,
> >      p_sys->p_input = vlc_object_hold(p_input);
> >      var_AddCallback(p_input, "intf-event", PlayingChange, p_intf);
> >
> >+
> 
> extra whitespace

Ok, I'll fix it.

> >@@ -449,10 +450,7 @@ static void Close(vlc_object_t *p_this)
> >      for (i = 0; i < p_sys->i_songs; i++)
> >          DeleteSong(&p_sys->p_queue[i]);
> >      vlc_UrlClean(&p_sys->p_submit_url);
> >-#if 0 //NOT USED
> >-    free(p_sys->psz_nowp_host);
> >-    free(p_sys->psz_nowp_file);
> >-#endif
> 
> ditto

Ok, I'll fix it.

> >+        else
> >+        {
> >+            url = &p_sys->p_submit_url;
> >+            audioscrobbler_song_t *p_song;
> >+            for (int i_song = 0 ; i_song < p_sys->i_songs ; i_song++)
> >+            {
> >+                p_song = &p_sys->p_queue[i_song];
> >+                if (asprintf(&psz_submit_song,
> >+                        "&a%%5B%d%%5D=%s"
> >+                        "&t%%5B%d%%5D=%s"
> >+                        "&i%%5B%d%%5D=%u"
> >+                        "&o%%5B%d%%5D=P"
> >+                        "&r%%5B%d%%5D="
> >+                        "&l%%5B%d%%5D=%d"
> >+                        "&b%%5B%d%%5D=%s"
> >+                        "&n%%5B%d%%5D=%s"
> >+                        "&m%%5B%d%%5D=%s",
> >+                        i_song, p_song->psz_a,
> >+                        i_song, p_song->psz_t,
> >+                        i_song, (unsigned)p_song->date, /* HACK: %ju (uintmax_t) unsupported on Windows */
> >+                        i_song,
> >+                        i_song,
> >+                        i_song, p_song->i_l,
> >+                        i_song, p_song->psz_b,
> >+                        i_song, p_song->psz_n,
> >+                        i_song, p_song->psz_m
> >+                       ) == -1)
> >+                {   /* Out of memory */
> >+                        vlc_mutex_unlock(&p_sys->lock);
> >+                        goto out;
> >+                }
> >              }
> >-            free(psz_submit_song);
> >+        }
> >+
> >+        psz_submit_tmp = psz_submit;
> >+        if (asprintf(&psz_submit, "%s%s",
> >+                    psz_submit_tmp, psz_submit_song) == -1)
> >+        {   /* Out of memory */
> >              free(psz_submit_tmp);
> >+            free(psz_submit_song);
> >+            vlc_mutex_unlock(&p_sys->lock);
> >+            goto out;
> >          }
> 
> You could free those unconditionally, and then check for asprintf error

How do you mean?

int ret = asprintf(&psz_submit, "%s%s", ...)
free(psz_submit_tmp);
free(psz_submit_song);
vlc_mutex_unlock(&p_sys->lock);
if (ret == -1) {
	goto out;
}

Or?

> 
> >+        free(psz_submit_song);
> >+        free(psz_submit_tmp);
> >+
> >          vlc_mutex_unlock(&p_sys->lock);
> >
> >-        int i_post_socket = net_ConnectTCP(p_intf, p_sys->p_submit_url.psz_host,
> >-                                        p_sys->p_submit_url.i_port);
> >+        int i_post_socket = net_ConnectTCP(p_intf, url->psz_host,
> >+                                        url->i_port);
> >
> 
> You didn't check for vlc_UrlParse success in Handshake, so host/url could be
> NULL here.

Basically I just looked at the current code for the p_submit_url and there is no check for vlc_UrlParse errors there either.

So I assume that you want the check for that (old) piece of code also?

Best regards
Jonas
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20151104/d0a0f1aa/attachment.sig>


More information about the vlc-devel mailing list