Last.fm integration

Dirk
2008-07-26
2013-05-30
1 2 3 > >> (Page 1 of 3)
  • Dirk
    Dirk
    2008-07-26

    Hi, I have written a c++ library that allows you to submit your songinfo to Last.fm.
    The interface methods that matter look like this:

    void startedPlaying(const SubmissionInfo& info);
    void pausePlaying(bool paused);
    void finishedPlaying();

    Where SubmissionInfo contains the song information(artist, title, ...).

    For testing I want to build a version of mediatomb with last.fm support. Since I'm not familiar with the code, what would be the right place to add these calls? It needs to be in place where I know songs are being started/stopped/paused and I need access to the songs Id3Info.

    Regards,
    Dirk

     
    • Mark Gillespie
      Mark Gillespie
      2008-07-26

      If you get something working, I would be more than happy to give it a fly...  Last.FM is very interesting to me...  I love the concept, but 95% of my music is played via DLNA streaming, so my profile is not representitive of what I actually listen to.  This would fix that!

       
    • Dirk
      Dirk
      2008-08-02

      Small update.

      First steps have been made for Last.fm integration. I'm currently listening to an album through mediatomb and it's being scrobbled to Last.fm :-)

      I still need to fix a number of loose ends though, I'm currently hooked somewhere in the open method in the file_request_handler class, I don't know if this is the best place to do it, but it's the best place I could find. The problem is that this method is also called for files when they need to be shown (i guess for cover art).

      Currently cleaning up my own lastfm library for release.

       
    • Mark Gillespie
      Mark Gillespie
      2008-08-31

      Any news on this?  This is number one in my personal wishlist, and may be the reason I move to MediaTomb as my primary Linux mediaserver....

       
    • Jin
      Jin
      2008-09-02

      Sorry for the late repsonse, I guess I simply missed this post.

      I think that file request handler would indeed be the right place, allthough I'd have to have another look how that would work out with transcoded stuff.

      So how far is your library, did you release it already?

      Kind regards,
      Jin

       
      • Dirk
        Dirk
        2008-09-03

        Well the library is ready, but before I can release it I need to receive an Id from Last.fm so they can recognize my lib and can ban it if it behaves incorrectly. I mailed them for info but haven't got a response yet. I will trigger them again.

         
    • Dirk
      Dirk
      2008-09-07

      I just released the initial version of lastfmlib. It can be downlaoded from this website: http://code.google.com/p/lastfmlib/ . It requires curl to build.

      I added a mediatomb patch to the repository which can be found here:
      http://lastfmlib.googlecode.com/svn/trunk/mediatomb.patch
      Configure should automatically enable lastfmlib support if it is installed correctly.

      I tested the patch against the current trunk (revision 1877) using mp3s. I did not test transcoding.
      You also need to add the folowing to the config section of your mediatom config file:
      <lastfm enabled="yes">
          <username>yourUsername</username>
          <password>yourPassword</password>
      </lastfm>

      Let me know if it works.

       
    • B4tm4n
      B4tm4n
      2008-09-07

      I get an error when trying to compile lastfmlib under Tiger running on a MacBook.

      utils/condition.cpp: In member function 'bool utils::Condition::wait(utils::Mutex&, int)':
      utils/condition.cpp:35: error: 'CLOCK_REALTIME' was not declared in this scope
      utils/condition.cpp:35: error: 'clock_gettime' was not declared in this scope
      make[2]: *** [liblastfm_la-condition.lo] Error 1
      make[1]: *** [all-recursive] Error 1
      make: *** [all-recursive] Error 1

       
      • Dirk
        Dirk
        2008-09-07

        On my system CLOCK_REALTIME is defined in bits/time.h which gets included by time.h.

        You could try defining __USE_POSIX199309 before including the time.h file in condition.cpp

        Like this:

        #define __USE_POSIX199309 1
        #include <sys/time.h>

         
    • B4tm4n
      B4tm4n
      2008-09-07

      No that didn't work.
      I've uploaded my config output and make output, incase that helps.

      http://www.divshare.com/download/5324219-872

      http://www.divshare.com/download/5324220-5c2

      Cheers.

       
      • Dirk
        Dirk
        2008-09-07

        Can you post this bug here http://code.google.com/p/lastfmlib/issues/list to avoid polluting the mediatomb forums :-)

         
    • B4tm4n
      B4tm4n
      2008-09-07

      No problem.

       
    • Jin
      Jin
      2008-09-07

      Dirk, please be careful when using clock_gettime(), I had some real headache with it.

      The problem is that some embedded NAS devices do not have a realtime clock. We made the mistake of not checking the return value of clock_gettime(), as the result our timer implementation was badly misbehaving on such systems.

      After those findings we switched to gettimeofday() which seems to work reliably on all systems. So please have another look at that.

      I now got back from holidays so I will have a look at the patch this week, if all works out I'll integrate it for the next release.

      Thanks!

      Kind regards,
      Jin

       
      • Dirk
        Dirk
        2008-09-07

        Indeed, I discovered that as well today. Currently rewriting it to use gettimeofday.

         
    • B4tm4n
      B4tm4n
      2008-09-07

      I applied the patch with  patch -p0 <mediatomb.patch

      Configured and compiled as usuall and added the extra lines to my config

      <?xml version="1.0" encoding="UTF-8"?>
      <config version="1" xmlns="http://mediatomb.cc/config/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mediatomb.cc/config/1 http://mediatomb.cc/config/1.xsd">
        <server>

          <port>49152</port>
          <ip>192.168.0.11</ip>

          <lastfm enabled="yes">

          <username>NAME</username>

          <password>PASSWORD</password>

          </lastfm>

          <ui enabled="yes" show-tooltips="yes">
            <accounts enabled="no" session-timeout="30">
              <account user="mediatomb" password="mediatomb"/>
            </accounts>
          </ui>

      But it does seem to be working.

       
    • B4tm4n
      B4tm4n
      2008-09-07

      Ignore that last post I don't think I've managed to compile MediaTomb with LastFmlib.

       
      • Dirk
        Dirk
        2008-09-07

        In the summary of ./configure it should say whether lastfm is enabled or not, also the lastm tag needs to be directly under config and under server like it seems to be in your case.

         
    • B4tm4n
      B4tm4n
      2008-09-07

      Can't compile Mediatomb with Lastfm support.

      part of the configure output

      checking for clock_gettime in -lrt... no
      checking for clock_gettime in -lrt... no
      checking for clock_gettime... no
      ....
      checking lastfmlib/lastfmscrobbler.h usability... no
      checking lastfmlib/lastfmscrobbler.h presence... no
      checking for lastfmlib/lastfmscrobbler.h... no
      checking /opt/local/include/lastfmlib/lastfmscrobbler.h usability... no
      checking /opt/local/include/lastfmlib/lastfmscrobbler.h presence... no
      checking for /opt/local/include/lastfmlib/lastfmscrobbler.h... no
      .......
      CONFIGURATION SUMMARY ----

      sqlite3               : yes
      mysql                 : disabled
      libjs                 : yes
      libmagic              : yes
      inotify               : missing
      libexif               : yes
      id3lib                : disabled
      taglib                : yes
      libmp4v2              : yes
      ffmpeg                : yes
      ffmpegthumbnailer     : yes
      external transcoding  : yes
      curl                  : yes
      YouTube               : yes
      SopCast               : disabled
      libextractor          : disabled
      db-autocreate         : yes
      lastfm                : missing

      I've checked and lastfmscrobbler.h has installed in opt/local/include/lastfmlib/

      Cheers

       
      • Dirk
        Dirk
        2008-09-07

        try configuring lastfmlib like this ./configure --prefix=/usr (assuming all your other inlcudes are located in /usr/include)

         
      • Mark Gillespie
        Mark Gillespie
        2008-09-08

        I'm running Gentoo, and using the lastfmlib "make install".  It's put everything here:

        /usr/local/lib/pkgconfig/lastfmlib.pc
        /usr/local/lib/liblastfm.la
        /usr/local/lib/liblastfm.so
        /usr/local/lib/liblastfm.a
        /usr/local/lib/liblastfm.so.1.0.0
        /usr/local/lib/liblastfm.so.1
        /usr/local/include/lastfmlib
        /usr/local/include/lastfmlib/urlclient.h
        /usr/local/include/lastfmlib/log.h
        /usr/local/include/lastfmlib/lastfmclient.h
        /usr/local/include/lastfmlib/mutex.h
        /usr/local/include/lastfmlib/condition.h
        /usr/local/include/lastfmlib/submissioninfo.h
        /usr/local/include/lastfmlib/submissioninfocollection.h
        /usr/local/include/lastfmlib/lastfmexceptions.h
        /usr/local/include/lastfmlib/lastfmscrobbler.h
        /usr/local/include/lastfmlib/thread.h
        /usr/local/include/lastfmlib/scopedlock.h
        /usr/local/include/lastfmlib/nowplayinginfo.h

         
        • Mark Gillespie
          Mark Gillespie
          2008-09-08

          Having the same problem.  Lastfmlib built and installed correctly, but Mediatomb ./configure script cannot find it :-(

          CONFIGURATION SUMMARY ----

          sqlite3               : yes
          mysql                 : yes
          libjs                 : yes
          libmagic              : yes
          inotify               : yes
          libexif               : yes
          id3lib                : disabled
          taglib                : yes
          libmp4v2              : yes
          ffmpeg                : yes
          ffmpegthumbnailer     : missing
          external transcoding  : yes
          curl                  : yes
          YouTube               : yes
          SopCast               : disabled
          libextractor          : disabled
          db-autocreate         : yes
          lastfm                : missing

           
          • Dirk
            Dirk
            2008-09-08

            I'm also running gentoo. I don't know what I did but it just works over here. This evening I'll try to remove all existing files and start from scratch and see what happens.

             
    • B4tm4n
      B4tm4n
      2008-09-07

      I tried that first and then --prefix=/sw and then --prefix=/opt/local, they're the three locations of my includes.

       
    • B4tm4n
      B4tm4n
      2008-09-07

      I've tried using --with-lastfmlib-libs= --with-lastfmlib-h= pointing to the libs and headers, but no luck.
      How do I know lastfmlib compiled correctly ? Can I test it somehow ?

       
      • Dirk
        Dirk
        2008-09-07

        you can compile lastfmlib with the unittests enabled ./conifgure --enable-unittests (this requires unitest++)

        then you can type make check and run the testrunner in the lastfmlib/unittest directory. There is still a small threading issue in the asynchronous tests, but they should pass most of the time.

         
1 2 3 > >> (Page 1 of 3)