Jump to content

Recommended Posts

  • Replies 199
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted Images

Well I almost have the player done (ZigZagJoe how did you do your time bar (the blue progress bar, GDI?) (yes I am trying to emulate ZigZagJoe's player progress bar :) (but not all of it :)).

Link to post
Share on other sites
Well I almost have the player done (ZigZagJoe how did you do your time bar (the blue progress bar, GDI?) (yes I am trying to emulate ZigZagJoe's player progress bar :) (but not all of it :)).

A custom control (C#). A thread forces an update every few milliseconds (i forget the exact value). Each time, it draws a bunch of slanted lines (45 degrees); the width of each "segment" is controlled by the height of the control. Then the "moving" counter is incremented once (for each time it is updated), and if it goes over height x 2 it is set to 0. I can send you the source if you like, it's a lot simpler than it sounds (i suck at the explaining).

And yes, It's been brought to my attention that the client is a bit ugleh. Working on a pitiful attempt at skinning.

Link to post
Share on other sites

I'd love to see the source :). Also as for ui, I have read some stuff on ui design, and a lot of it is stick with the native look, basically stick what with the user knows and also what is intuitive and simple.

Link to post
Share on other sites
  • 2 weeks later...

Hey there guys,

awesome project! =)

I have been working on something a bit similar (or rather "I am starting to work") and got trouble with the getCommunicationToken procedure.

I am not sure if the POST doesn't work, or if I just misform the JSON object...

(it's in Java so i can't use httplib2 :( )

Is this one ok to be sent to https://cowbell.grooveshark.com/service.php ??

{
"header":{
"session":"24cf16c761dac87ceaa79c706768420f", 
"uuid":"deb37af2-44ca-4ce4-85ce-d71217402827", 
"client":"gslite", 
"clientRevision":"20100211.13"
}, 
"parameters":{
"secretKey":"382a1ebcb74105894ee8ff551e45c9bd"
},
"method":"getCommunicationToken"
}

Don't tell me just to use one of the existing programs, it's not about the program; it's about the programming :D

Thank you though :)

@Zimmer Great Work :)

EDIT: Here the HTTP-Protocoll (with HTTP insetad of HTTPS in order to capture it):

POST http://cowbell.grooveshark.com/service.php HTTP/1.1
Accept-Encoding: identity
Content-type: application/json
Host: cowbell.grooveshark.com
Content-length: 252
Connection: close
User-Agent: Mozilla/5.0
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

{"header":{"session":"94996ccf0e3e8ed65d8918a18524319c", "client":"gslite", "clientRevision":"20100211.16"", "uuid":"5588be94-98f9-4f82-a6db-b650e205c36e}, "parameters":{"secretKey":"59f3474dd112d80149a974002c88b380"}, "method":"getCommunicationToken"}

Edited by mrs_sheep
Link to post
Share on other sites
  • 2 weeks later...

It seems fine from what I can tell (though you have to use https).

Also Just completed the plugin system

Plugin.py

# Plugin Interface

class Plugin(object):
    '''Implement the methods and then put them into a file.'''
    def __init__(self, frame):
        self._author_ = 'Author'
        self._description_ = 'Plugin Description'
        self._name_ = 'Plugin Name'
        self._keywords_ = 'Keywords about Plugin'
        self._other_ = {}# other information; on running iterates through the keys and values and sets them up along with the above
        self.main_frame = frame # main frame that the plugin can acces any attributes, etc
    def render(self):
        '''
        This is the method called and starts up the plugin.
        This sets up the gui panel etc.
        You can set it up by referance to the main frame.
        '''
        raise NotImplmentedError('Error: You need to subclass this or create an instance of it and then modify that.')

Example Plugin

# test plugin
from plugin import Plugin

class Foo(Plugin):
    def __init__(self, frame):
        self._author_ = 'Zimmer'
        self._description_ = 'Example Plugin'
        self._name_ = 'Example Plugin Foo'
        self._keywords_ = 'example; Foo; useless'
        self._other_ = {'other_field': 'Info on other field', 'other field 2': 'other field info 2'}# other information; on running iterates through the keys and values and sets them up along with the above
        self.main_frame = frame # main frame that the plugin can acces any attributes, etc
    def show_message(self, event):
        msg = wx.MessageDialog(self.main_frame, message = 'Hello; this is an example action a plugin can do.\n\nI know that this is such a usefull example')
        msg.ShowModal()
    def render(self):
        print 'rendering controls'
        self.run_plugin_bttn = wx.Button(self.main_frame.panel, -1, label = 'Click Me; I am an example', size = (200, 40), pos = (100,50))
        self.main_frame.Bind(wx.EVT_BUTTON, self.show_message, self.run_plugin_bttn)
if __name__== '__main__':
    # example Frame
    # test frame to display it in the non plugin framework
    import wx
    app = wx.App(redirect = False)
    frame = wx.Frame(None, -1, title = 'Foo Test Window')
    frame.panel = wx.Panel(frame, -1)
    p = Foo(frame)
    p.render()
    frame.Show()
    app.MainLoop()

Link to post
Share on other sites

If you just wanted a song or two or three, you can easilly use FireFox & FlashGot. It works like a charm. (except some songs show up as blah-blah-blah.php.mp3, and if you play them after downloading, they crash your media player for some reason.....)

Link to post
Share on other sites

Here's the relevant information for the recent updates:

Client: gslite

ClientRev: 20100211.13 to 20100412.02

Random String: theColorIsRed to quitStealinMahShit

There may be more changes but I've got most everything working again simply by making the above changes. I'm almost done with a beta version of my grooveshark downloader anroid app :)

Link to post
Share on other sites

I can talk to the API with this data and get a stream key. However the request to stream.php always comes out as a 404. Any sugesstions why this might be?

Edit: Actually I figured it out by now. Quite interesting that there are other people working on this :D

Edited by bugmenot2589944
Link to post
Share on other sites
Sorry Zimmer... I will not post data like that in the future

No reason to be sorry, I just figure better safe than sorry. :)

Be funny if the next 'random' string was pleaseStopZimmer

Ha that would be :)

Link to post
Share on other sites

Zimmer, any chance you can post your updated code? Do you have a repository somewhere?

I got the gui you posted at the start of this thread almost working, but I thought it'd be nice to use your current code instead of reinventing the wheel.

Great work everyone, by the way. I stumpled upon this thread when searching for projects similar to what I was doing. I was using the api and pretending to be a mobile phone. This was working, but I seem to be severely rate limited.

Link to post
Share on other sites
  • 2 weeks later...

If anyone has an Android phone please check out my app I just released in the Android Market... Song Storm Lite... A free version will be release in the next couple days... I have to work out some screen orientation change issues yet and add some more error handling but it works pretty well so far. Just thought I'd let everyone know in case their interested.

post-18774-1272902873_thumb.jpg

Link to post
Share on other sites
  • 2 weeks later...
If anyone has an Android phone please check out my app I just released in the Android Market... Song Storm Lite... A free version will be release in the next couple days... I have to work out some screen orientation change issues yet and add some more error handling but it works pretty well so far. Just thought I'd let everyone know in case their interested.

So did your app get removed or something? I tried to find it in the market and through a QR code to the app and nothing. If they are removing it are you going to just post it here? Thanks! Ready to try the app...

Link to post
Share on other sites

I thought that the new secret was aimed at me.

I'm writing a Ruby-based CLI client, which uses a lot less RAM and CPU than their flash client. I can control it with media keys, typed commands, or even my iPod (it acts as a MPD server). I use mplayer to actually play audio.

When I got the new code, I googled it to see what idiot posted it... and ended up here. Good job :D

In my latest change, the secret/clientid was changed, "country" was added, and getStreamKeyFromSongID was replaced with getStreamKeyFromSongIDEx.

Link to post
Share on other sites

New Release of Sharky

Download here for all systems (note for mac replace mplayer.exe with mplayer.app and for linux replace mplayer.exe with whatever mplayer binary you use (and name it mplayer, no extenstion (cause unlike windows or mac I don't know the executable extension (plus they probably vary))

http://www.mediafire.com/download.php?ti3njknyuwy

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...