Use an existing social graph (Twitter, Facebook, Last.fm) to:
- Passively observe what your friends are doing with Songbird
- Discover/purchase/stream new music directly from friends
Example:

Initial Tasks
Proof of Concept
Presence and Messaging
Set up ejabberd server (stevel)
-
Manually create some accounts to start (mattc) Songbird extension to demonstrate presence and messaging (mattc) Basic service pane integration for buddy list (mattc) Display incoming messages via Growl(mattc) - nsIAlertsService gets us a cheap/easy way to do this with Growl on Mac, and systray popup on Windows (not sure about Linux though?)
- Windows = xul pop up window, we should look at integrating SNARL as optional (also GROWL for windows).
- Linux = xul pop up window, we should look at libnotify.
- OS X = Growl, or fail :( we should have a back up for this if GROWL is not installed, the xul pop up like windows/linux does not work on OS X due to a bug when resizing the window (ends up scrolling off the screen), so using a fade in window like GROWL may be better.
Activity
Set up Laconica server (stevel) Manually create some accounts to start (stevel) Songbird extension to authenticate and push messages (mattc)
Streaming
Ability to consume UDP streams with gstreamer (mikes) Ability to send stream with gstreamer or VLC (mikes) Manual test (mikes) - XMPP listener to initiate streaming
- Protocol handler to initiate remote stream using XMPP
- OR -
For now, just drop in the jshttp server and have it stream all files (mook)
Integration
Hook rating event to push via XMPP and Laconica(mattc) - Might be able to hook the METADATA_CHANGE MediacoreEvent
- Maybe not - looks like it's only hooked up to the GStreamer media core for media-core level metadata changes, but we should add some event dispatches for events like rating-change into the bird. Would be useful in general.
- Make rated track notifications into links that initiate playback
Actually Somewhat Usable
Come up with a reasonable API for pushing notifications (mattc) (still kinda crappy) Push notifications for additional events such as library adds, downloads, add-on installs, etc. (stevel) Style laconica a bit (mattc) - Set up libpjnath for UDP hole punching
- Looking at allpeers code for UPnP and possibly integrating it into ours.
Open for Alpha Testers
Web service for adding a new user. Must prove ownership of an existing account and then import personicon, friends, etc. (mattc) - Hook up email notification
- Add basic invite UI
More Functionality
- Hook up comments, and comment notification
- Add search support
Proposal for notifications
The kitchen sink - need to prioritize. Is the webapp the only place a log of notifications can be displayed? What happens when the user clicks on the growl notification for each of the following? Need string for each notification for webapp and growl.
- play track - $friend listened to $track by $artist
- rate track - $friend rated $track by $artist with $star stars
- share track
- share album
- share playlist
- share artist
- share URL
- friend added friend - $friend is now friends with $friend
- someone added you as a friend - $friend has added you as a friend
- message received from friend
- friend updated status
- added track - string needs to be smart about what was added
- downloaded track
- purchased track
- created playlist - when is a playlist created?
- edited playlist
- add-on installed - $friend installed $addon to $app
- application updated - $friend updated to $app $version
Should notifications prompt for other actions? e.g.
- play track -> $friend listened to $track by $artist (listen to $track, search for more music by $artist, listen to all tracks by $artist in your friends' collective libraries) ?
- Maybe if you have $friend listened to $track by $artist and the $friend is online then
- $friend links to the friend's profile page that includes an option to view their activities and library
- $track links to the track in the friend's library + autoplay?
- $artist links to a filtered view of the friend's library that shows albums and tracks for the given artist
- One thing to consider here is that Growl notifications can't have multiple click behaviors. (right?) The flow would be that you click on the notification which focuses Songbird and then shows a page that displays the notification message with the links.
This might be too much detail at this point but the system should to be able to take raw activity logs and aggregate them into meaningful messages for notifications to be not-so-annoying and more useful. I think we can decide how much smartness is needed later though. Eg:
- "$friend added $track1, $friend added $track2, $friend added $track3" is not as useful as "$friend added 3 tracks" which is not as useful as "$friend added 3 tracks from $album" or something
Proposal for sharing
The kitchen sink - need to prioritize. Drag and drop on friend or contextual menu item? Having support to share with people friends who don't have Songbird will help increase the user base.
- track
- album
- playlist
- artist
- URL
- add-on
I think we should look first at just playlist sharing, so the user should be able to select what playlists they wish to share with friends and then we can display that in the service pane.
Service pane:
> Friends
> DJFail
Happy
Kick Butt
Sad
> Meteor Joe
End of the World
Disaster diverted
Clicking on a playlist under a friend would download the list (from server?) and display it in the media pane, should we hide playlists for friends that are not online, or should we hide friends not online or display both either way?. We could then do things like show tracks the user has and they can play them, or display a link to tracks they can buy, then in the future we could allow them to stream them if the friend is online.
Restrictions
The purpose of this add-on is to discover and ultimately purchase new music. Here are some guidelines to keep in mind:
- This needs to be a service for people who are friends in real life. Music streaming needs to be between friends, and not a public performance.
- Importing from Facebook, or imposing a two way request-accept model is key.
- There also needs to be a reasonable limit on the number of people on your friends list. Say 20-50 at most.
- This is not on demand streaming of anything in a library. The idea is that after a notification event (track rating, playback, etc.) an associated stream would be available to friends for some limited period (from one hour to one day at most).
I was working on something similar myself, being: inviting friends from facebook who also have songbird and then you could stream music via DAAP. Never found the time to finish it.
This would really be a feature that could make the difference for a user to choose songbird instead of player X
If you are interested in working on this let us know. We're just getting started, and haven't even set up a repository yet.
I was actually more or less done with my implementation of a songbird user account and I was trying to change the DAAP protocol to work with user-based permissions. So you could allow friends to only see certain playlists, or see the music, but not stream it, etc. Without losing compatability with other DAAP clients/servers.
I can probably use some of that here.
RJ: playdar is awesome, and there is definitely room for integration. I'll drop by in IRC.
You'll also need the xmpp4moz XPI @ http://whacked.net/scratch/xmpp4moz.xpi
We have the libnotify library, so notifications will come from there. Also, on Ubuntu 9.04 we have a OSD like notification system
Read this: https://wiki.ubuntu.com/NotificationDevelopmentGuidelines
and this (as example for C) https://wiki.ubuntu.com/NotificationDevelopmentGuidelines?action=AttachFile&do=view&target=icon-summary-body.c
I could help if I knew how to start it on C