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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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 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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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 ----
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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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 ?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
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!
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.
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....
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
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.
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.
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
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>
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.
Can you post this bug here http://code.google.com/p/lastfmlib/issues/list to avoid polluting the mediatomb forums :-)
No problem.
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
Indeed, I discovered that as well today. Currently rewriting it to use gettimeofday.
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.
Ignore that last post I don't think I've managed to compile MediaTomb with LastFmlib.
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.
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
try configuring lastfmlib like this ./configure --prefix=/usr (assuming all your other inlcudes are located in /usr/include)
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
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
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.
I tried that first and then --prefix=/sw and then --prefix=/opt/local, they're the three locations of my includes.
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 ?
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.