Jump to content

Zimmer

Dedicated Members
  • Posts

    670
  • Joined

  • Last visited

Posts posted by Zimmer

  1. Ok try this replace all of Grooveshark GUI with this...

    If there is still an error paste app.log here.

    So Sorry about the errors :-(

    #!/usr/bin/python

    import os

    import sys

    grooveshark_error = False

    try:

    import json

    except ImportError:

    try:

    import simplejson as json

    except ImportError:

    error = '''Neither json nor simplejson could be imported. Try installing python 2.6 (directions and binaries on python.prg/download) With python 2.6 json will be installed to.'''

    grooveshark_error = True

    try:

    import ConfigParser

    import subprocess

    import time

    except:

    error = 'Error can not import python standard libary modules, please re-install python, preferably python 2.6, from python.org/download'

    grooveshark_error = True

    try:

    import httplib2

    except:

    error = 'Could not import httplib2. Please install it from http://httplib2.googlecode.com/files/httplib2-0.5.0.zip'

    grooveshark_error = True

    try:

    import wx

    from wx.lib.mixins.listctrl import CheckListCtrlMixin, ListCtrlAutoWidthMixin

    except ImportError:

    error = '''Error: wxPython is not installed or was not found. Please download and install from wxPython.org/download.php

    WIN32:

    -Python 2.4: http://downloads.sourceforge.net/wxpython/...8.10.1-py24.exe

    -Python 2.5: http://downloads.sourceforge.net/wxpython/...8.10.1-py25.exe

    -Python 2.6: http://downloads.sourceforge.net/wxpython/...8.10.1-py26.exe

    MacOSX:

    -Python 2.4: http://downloads.sourceforge.net/wxpython/...ersal-py2.4.dmg

    -Python 2.5: http://downloads.sourceforge.net/wxpython/...ersal-py2.5.dmg

    -Python 2.6: http://downloads.sourceforge.net/wxpython/...ersal-py2.6.dmg

    Linux:

    See wxPython.org/download.php then goto Debian/Ubuntu (even if you run another distro it has directions)'''

    print error

    grooveshark_session_error = True

    try:

    from Grooveshark import Grooveshark

    from Mplayer import MPlayer

    from Player import Player

    except ImportError:

    error = 'Error: Either Grooveshark.py, Mplayer.py, or Player.py where not found... please make sure they are in the SAME directory as this file and have the correct names'

    grooveshark_session_error = True

    class Logger(object):

    def __init__(self):

    self.log_ = open('app.log', 'ab')

    self.log_.write('\n\n\n STARTING LOG \n\n')

    def write(self, string):

    self.log_.write(string+'\n')

    def close(self):

    self.log_.write('---Closing Log---')

    self.log_.close()

    settings_default = '''/

    [settings]

    mplayer =

    save_path =

    '''

    class Settings(object):

    '''Stores settings'''

    def __init__(self):

    self.config = ConfigParser.RawConfigParser()

    cf = self.config.read('settings.cfg')

    if cf == []:

    print 'No settings.cfg'

    print 'Creating default'

    f = open('settings.cfg')

    f.write(settings_default)

    f.close()

    cf = self.config.read('settings.cfg')

    try:

    self.path = self.config.get('Settings', 'save_path')

    self.path.replace('\\', '/')

    if self.path[-1] == '/':

    self.path = self.path[:-1] + '/'

    except ConfigParser.NoOptionError:

    self.path = ''

    try:

    self.eula = self.config.get('Settings', 'eula')

    except ConfigParser.NoOptionError:

    self.eula = False

    try:

    self.mplayer = self.config.get('Settings', 'mplayer')

    self.mplayer.replace('\\', '/')

    except ConfigParser.NoOptionError:

    self.mplayer = ''

    self.buffer_time = 10

    #self.eula = self.config.get('Settings', 'mplayer_path')

    self.stream_files = []

    log.write('Save Path: %s ' % self.path)

    log.write('MPlayer Path: %s ' % self.mplayer)

    def setPath(self, path):

    self.path = path.replace('\\', '/')

    log.write('Path Changed To: %s' % self.path)

    class GUI_Stream(object):

    def OnPlay(self, event, audio_listings, grooveshark_results):

    log.write('Called: OnPlay')

    items = audio_listings.GetItemCount()

    if not items < 1:

    self.count = 0

    self.songKeys = []

    self.songServers = []

    for i in range(items):

    if audio_listings.IsChecked(i):

    log.write('OnPlay, iterating though items')

    try:

    index_number = int(audio_listings.GetItemText(i).replace('.', ''))-1#Takes the number (1st col.) and gets the index number

    songID = grooveshark_results[index_number]['SongID']

    self.songKeys.append( g.songKeyfromID(songID))

    self.songServers.append(g.reply['result']['streamServer'])

    print 'Song is ' + grooveshark_results[index_number]['Name']

    print 'Album is ' + grooveshark_results[index_number]['AlbumName']

    print 'Artist is ' + grooveshark_results[index_number]['ArtistName']

    except httplib2.ServerNotFoundError:

    frame.Connection_Problem()

    break#break the for loop

    if not self.songKeys == []:

    self.mp = MPlayer(settings.mplayer)#Crreates mplayer inst

    self.stream()#start recurcion check

    else:

    pass

    def stream(self):

    log.write('Called: stream')

    #Sends it to Groovehsarks stream method

    g.stream(json.dumps([self.songKeys[0]]), json.dumps([self.songServers[0]]), settings.path+'streamsupport'+str(self.count)+'.mp3')#Creates a instance for all, _inc_ is a special key string that gets reaplce by a incremented number

    self.count = self.count + 1

    #Adds it to the files we have to delete

    for n,i in enumerate(self.songKeys[0]):

    settings.stream_files.append(settings.path+'streamsupport'+str(n)+'.mp3')#For cleanup

    f = open(settings.path+'streamsupport'+str(n)+'.mp3', 'wb')#Create a empty container

    f.close()

    wx.CallLater((settings.buffer_time + 5) * 1000, self.check_stream)

    wx.CallLater((settings.buffer_time * 1000), self.play_audio)#waits settings.buffer seconds then begins playing audio

    self.player = Player((350,150), 'Player', self.mp, len(self.songKeys), settings, g)# +1 for the removed item (the one playing)

    self.player.ShowModal()

    def check_stream(self):

    log.write('Called: check_stream')

    p_id = g.stream_process.poll()

    print 'Process: %s' % p_id

    if p_id == None:

    wx.CallLater(10000, self.check_stream)

    else:

    if p_id == 2:

    self.player.SetInfoText('Error retrieving mp3. Going to next song')

    print 'Starting next download'

    try:

    g.stream(json.dumps([self.songKeys[(self.count)]]), json.dumps([self.songServers[self.count]]), settings.path+'streamsupport'+str(self.count)+'.mp3')#Creates a instance for all, _inc_ is a special key string that gets reaplce by a incremented number

    except IndexError:

    print 'Done with downloads'

    else:

    self.count = self.count + 1

    wx.CallLater((settings.buffer_time + 5) * 1000, self.check_stream)

    def play_audio(self):

    print 'play_audio called'

    log.write('Called: Play Audio')

    for n,i in enumerate(self.songKeys):

    self.mp.files.append(settings.path + 'streamsupport'+str(n)+'.mp3')

    print self.mp.files

    self.mp.file('"'+settings.path + 'streamsupport'+str(n)+'.mp3'+'"'+' 1') #Runs loadfile path:/streamsupport,mp3, 1 (adds that file to current playlist)

    class MainFrame(wx.Frame):

    def __init__(self, title):

    #Initailize Frame

    wx.Frame.__init__(self, None, -1, title, size = (515, 315), style = wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN | wx.FULL_REPAINT_ON_RESIZE)

    #Create Backround Frame

    #p = AboutPanel(self, -1)

    p = wx.Panel(self)

    nb = wx.Notebook(p)

    sp = SearchPanel(nb, -1)

    ab = AboutPanel(nb, -1)

    rp = PopularPanel(nb, -1)

    op = OptionsPanel(nb, -1)

    nb.AddPage(ab, 'About')

    nb.AddPage(sp, 'Search')

    nb.AddPage(rp, 'Popular')

    nb.AddPage(op, 'Settings')

    sizer = wx.BoxSizer()

    sizer.Add(nb, 1, wx.EXPAND)

    p.SetSizer(sizer)

    def Connection_Problem(self):

    log.write('Connection Problem')

    con_dialog = wx.MessageDialog(None, 'There was a problem connecting to the internet, please check your connection (go to google.com or another website) and if you can\'t restart your computer. \n This is NOT a problem with this application, but your internet connection. \n Sorry for the inconvience.')

    con_dialog.ShowModal()

    def Error(self, error, quit = True):

    log.write('Connection Problem')

    error_dialog = wx.MessageDialog(None, 'Error: '+error+'\n\nIf you have seen this error multiple times please post the app.log (in this program\'s directory)to hak5.org for help.', 'Error', wx.OK | wx.ICON_ERROR)

    error_dialog.ShowModal()

    if quit == True:

    self.Destroy()

    sys.exit(1)

    class OptionsPanel(wx.Panel):

    def __init__(self, parent, id):

    wx.Panel.__init__(self, parent, id)

    self.path = settings.path

    #Save Path

    self.change_path_text = wx.StaticText(self, -1, 'Change Save Path:', pos = (20,3))

    self.display_path = wx.TextCtrl(self, -1, self.path, pos = (110,21), size = (300, -1))

    self.save_button = wx.Button(self, -1, 'Change', pos = (20,20))

    #Mplayer

    self.change_mplayer_text = wx.StaticText(self, -1, 'Change MPlayer Path:', pos = (20,45))

    self.display_mplayer_path = wx.TextCtrl(self, -1, settings.mplayer, pos = (110,66), size = (300, -1))

    self.mplayer_button = wx.Button(self, -1, 'Change', pos = (20,65))

    #Buffer Time

    # self.change_path_text = wx.StaticText(self, -1, 'Change Save Path:', pos = (20,3))

    # self.display_buffer_time = wx.TextCtrl(self, -1, settings.buffer_time, pos = (110,21), size = (300, -1))

    # self.change_buffer = wx.Button(self, -1, 'Change', pos = (20,20))

    #Binds

    self.Bind(wx.EVT_BUTTON, self.change_save_path, self.save_button)

    self.Bind(wx.EVT_BUTTON, self.change_mplayer_path, self.mplayer_button)

    # self.Bind(wx.EVT_BUTTON, self.change_buffer, self.change_buffer)

    def change_save_path(self, event):

    self.save_dlg = wx.DirDialog(self, 'Select save folder.', 'C:/', name = 'save_dialog')

    result = self.save_dlg.ShowModal()

    if result == wx.ID_OK:

    print 'Changed Path; OK'

    settings.setPath(self.save_dlg.GetPath()+'/')

    self.display_path.SetValue(settings.path)

    settings.config.set('Settings', 'save_path', settings.path)

    if result == wx.ID_CANCEL:

    pass #User did not select a path, or they select the path and then hit cancel

    def change_mplayer_path(self, event):

    self.mplayer_dlg = wx.FileDialog(self, 'Select MPlayer executable.', 'C:/')

    result = self.mplayer_dlg.ShowModal()

    if result == wx.ID_OK:

    print 'Changed MPlayer; OK'

    input_path = self.mplayer_dlg.GetDirectory().replace('\\', '/') + '/' + self.mplayer_dlg.GetFilename()

    print os.path.exists(input_path)

    if os.path.exists(input_path):

    print 'Path exists'

    settings.mplayer = input_path

    self.display_mplayer_path.SetValue(settings.mplayer)

    settings.config.set('Settings', 'mplayer', settings.mplayer)

    else:

    print 'Path does not exist'

    if result == wx.ID_CANCEL:

    pass #User did not select a path, or they select the path and then hit cancel

    class PopularPanel(wx.Panel):

    def __init__(self, parent, id):

    wx.Panel.__init__(self, parent, id)

    self.results = PopularResultsPanel(self, -1, pos = (0, 0))

    play = wx.Button(self, -1, 'Play Checked', pos = (240, 233))

    download = wx.Button(self, -1, 'Download Checked', pos = (330, 233))

    self.Bind(wx.EVT_BUTTON, self.OnStream, play)

    self.Bind(wx.EVT_BUTTON, self.OnDownload, download)

    def OnDownload(self, event):

    log.write('Download Called - Popular')

    items = self.results.result_listings.GetItemCount()

    if items > 0:

    self.songKeys = []

    self.songServers = []

    self.songTitles = []

    #We have to spawn a process or thread of some sort! - Spawning seperate process (safer )

    for i in range(items):

    if self.results.result_listings.IsChecked(i):

    index_number = int(self.results.result_listings.GetItemText(i).replace('.', ''))-1#Takes the number (1st col.) and gets the index number

    songID = self.results.popular_results[index_number]['SongID']

    self.songKeys.append( g.songKeyfromID(songID))

    self.songServers.append(g.reply['result']['streamServer'])

    self.songTitles.append(self.results.popular_results[index_number]['Name'])

    print 'Song is ' + self.results.popular_results[index_number]['Name']

    print 'Album is ' + self.results.popular_results[index_number]['AlbumName']

    print 'Artist is ' + self.results.popular_results[index_number]['ArtistName']

    #Start Downloading...

    subprocess.Popen('python download.py %s %s %s %s' % (json.dumps(json.dumps(self.songKeys)), json.dumps(json.dumps(self.songServers)), json.dumps(json.dumps(self.songTitles)), json.dumps(json.dumps(settings.path))))

    else:

    pass

    def OnStream(self, event):

    stream = GUI_Stream()

    stream.OnPlay(event, self.results.result_listings, self.results.popular_results)

    class PopularResultsPanel(wx.Panel):

    def __init__(self, parent, id, pos):

    wx.Panel.__init__(self, parent, id, pos)

    self.vbox = wx.BoxSizer(wx.VERTICAL)

    self.hbox = wx.BoxSizer(wx.HORIZONTAL)

    self.result_listings = CheckListCtrl(self, (500,230), (0,0))

    self.result_listings.InsertColumn(0, ' ', width = 40)

    self.result_listings.InsertColumn(1, 'Song')

    self.result_listings.InsertColumn(2, 'Artist')

    self.result_listings.InsertColumn(3, 'Album')

    self.hbox.Add(self.result_listings, 1, wx.ALL | wx.CENTER)

    self.vbox.Add(self.hbox, 1, wx.ALL | wx.CENTER)

    self.SetSizer(self.vbox)

    self.vbox.Fit(self)

    #Get and Display Most Popular Songs

    #self.displaySearch()

    def displaySearch(self):

    self.popular_results = g.popular()

    for n,i in enumerate(self.popular_results):

    index = self.result_listings.InsertStringItem(n+1, str(n+1)+'.')

    try:

    self.result_listings.SetStringItem(index, 1, i['Name'])

    except UnicodeEncodeError:

    self.result_listings.SetStringItem(index, 1, repr(i['Name'])[2:-1])

    self.result_listings.SetStringItem(index, 2, i['ArtistName'])

    try:

    self.result_listings.SetStringItem(index, 3, i['AlbumName'])

    except TypeError:

    self.result_listings.SetStringItem(index, 1, ' ')

    class SearchPanel(wx.Panel):

    def __init__(self, parent, id):

    wx.Panel.__init__(self, parent, id)

    #Encapsulation and data transfer between the Input and Results Search Frames

    self.searchResults = SearchResultsPanel(self, -1, pos = (0, 0))

    self.searchInput = SearchInputPanel(self, -1, pos = (30, 0))

    sizer = wx.BoxSizer(wx.VERTICAL)

    sizer.Add(self.searchInput, 0, wx.EXPAND, 1)

    sizer.Add(self.searchResults, 0, wx.EXPAND, 3)

    self.SetSizer(sizer)

    sizer.Fit(self)

    self.Bind(wx.EVT_BUTTON, self.OnPlay, self.searchResults.play)

    self.Bind(wx.EVT_BUTTON, self.OnDownload, self.searchResults.download)

    def OnDownload(self, event):

    log.write('Download Called - Search')

    items = self.searchResults.result_listings.GetItemCount()

    if items > 0:

    self.songKeys = []

    self.songServers = []

    self.songTitles = []

    #We have to spawn a process or thread of some sort!

    for i in range(items):

    if self.searchResults.result_listings.IsChecked(i):

    index_number = int(self.searchResults.result_listings.GetItemText(i).replace('.', ''))-1#Takes the number (1st col.) and gets the index number

    songID = self.searchResults.search_results[index_number]['SongID']

    self.songKeys.append( g.songKeyfromID(songID))

    self.songServers.append(g.reply['result']['streamServer'])

    self.songTitles.append(self.searchResults.search_results[index_number]['Name'])

    print 'Song is ' + self.searchResults.search_results[index_number]['Name']

    print 'Album is ' + self.searchResults.search_results[index_number]['AlbumName']

    print 'Artist is ' + self.searchResults.search_results[index_number]['ArtistName']

    #Start Downloading...

    download_log = open("download.log","a")

    try:

    subprocess.Popen('python download.py %s %s %s %s' % (json.dumps(json.dumps(self.songKeys)), json.dumps(json.dumps(self.songServers)), json.dumps(json.dumps(self.songTitles)), json.dumps(json.dumps(settings.path))), stdout = download_log, stderr = download_log)

    except:

    print 'Error downloading'

    download_log.write('error.\n')

    traceback.print_exc(file=download_log)

    download_log.close()

    download_log.close()

    else:

    pass

    def OnPlay(self, event):

    gui_stream = GUI_Stream()

    gui_stream.OnPlay(event, self.searchResults.result_listings, self.searchResults.search_results)

    class SearchInputPanel(wx.Panel):

    def __init__(self, parent, id, pos):

    wx.Panel.__init__(self, parent, id, pos)

    #Controls to occupy frame

    self.searchBttn = wx.Button(self, -1, "Search")

    self.searchText = wx.StaticText(self, -1, 'Search:')

    self.searchTextBox = wx.TextCtrl(self, -1, 'Search for music')

    searchInputSizer = wx.BoxSizer(wx.HORIZONTAL)

    searchAreaSizer = wx.BoxSizer(wx.VERTICAL)

    searchInputSizer.AddSpacer((10,10))

    searchInputSizer.AddSpacer((10,10))

    searchInputSizer.Add(self.searchText, 0, wx.ALL, 10)

    searchInputSizer.AddSpacer((10,0))

    searchInputSizer.Add(self.searchTextBox, 1, wx.EXPAND|wx.ALL, 10)

    searchInputSizer.AddSpacer((10,0))

    searchInputSizer.Add(self.searchBttn, 0, wx.ALL, 10)

    searchAreaSizer.Add(searchInputSizer, 0, wx.EXPAND)

    self.SetSizer(searchAreaSizer)

    searchAreaSizer.Fit(self)

    self.parent = self.GetParent()

    self.Bind(wx.EVT_BUTTON, self.OnSearch, id=self.searchBttn.GetId())

    def OnSearch(self, event):

    search_string = self.searchTextBox.GetValue()

    self.parent.searchResults.displaySearch(event, search_string)

    class SearchResultsPanel(wx.Panel):

    def __init__(self, parent, id, pos):

    self.search_results = None

    wx.Panel.__init__(self, parent, id, pos)

    self.vbox = wx.BoxSizer(wx.VERTICAL)

    self.result_listings = CheckListCtrl(self, (455,155), (0,10))

    self.result_listings.InsertColumn(0, ' ', width = 40)

    self.result_listings.InsertColumn(1, 'Song')

    self.result_listings.InsertColumn(2, 'Artist')

    self.result_listings.InsertColumn(3, 'Album')

    self.vbox.Add(self.result_listings, 1, wx.ALL | wx.CENTER, 5)

    self.play = wx.Button(self, -1, 'Play Checked', pos = (240, 170))

    self.download = wx.Button(self, -1, 'Download Checked', pos = (330, 170))

    def displaySearch(self, event, search_string):

    search_string = search_string.replace('"', '')

    try:

    self.search_results = g.search(search_string)

    except httplib2.ServerNotFoundError:

    frame.Connection_Problem()

    event.Skip()

    for n,i in enumerate(self.search_results):

    index = self.result_listings.InsertStringItem(n+1, str(n+1)+'.')

    try:

    self.result_listings.SetStringItem(index, 1, i['Name'])

    except UnicodeEncodeError:

    self.result_listings.SetStringItem(index, 1, repr(i['Name'])[2:-1])

    self.result_listings.SetStringItem(index, 2, i['ArtistName'])

    self.result_listings.SetStringItem(index, 3, i['AlbumName'])

    def loading(self):

    vbox = wx.BoxSizer(wx.VERTICAL)

    hbox = wx.BoxSizer(wx.HORIZONTAL)

    hbox.Add(wx.StaticText(self, -1, 'LOADING', (20,20)), 1, wx.CENTER|wx.ALL)

    vbox.Add(hbox, 1, wx.CENTER|wx.ALL)

    self.SetSizer(vbox)

    #Next two Class are both for the about panel... (for the sizers to work with an image I has to encapsulate the Image in a panel)

    class Image(wx.Panel):

    """ class Panel1 creates a panel with an image on it, inherits wx.Panel """

    def __init__(self, parent, id):

    # create the panel

    wx.Panel.__init__(self, parent, id)

    try:

    # pick a .jpg file you have in the working folder

    imageFile = 'g8831.png'

    if not os.path.exists(imageFile):

    raise IOError('Image does not exists!')

    jpg1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY)

    height = jpg1.GetHeight()

    width = jpg1.GetWidth()

    scaled_version = jpg1.Scale(height/10, width/10)

    author_text = wx.StaticText(self, -1, 'By: Zimmer', (0,scaled_version.GetWidth()+10))

    author_text = wx.StaticText(self, -1, 'Grooveshark Explorer', (0,scaled_version.GetWidth()+25))

    author_text.Show()

    # bitmap upper left corner is in the position tuple (x, y) = (5, 5)

    bitmap = wx.StaticBitmap(self, -1, scaled_version.ConvertToBitmap())

    except IOError:

    print "Image file %s not found" % imageFile

    raise SystemExit

    class AboutPanel(wx.Panel):

    def __init__(self, parent, id):

    # create the panel

    wx.Panel.__init__(self, parent, id)

    ImagePane = Image(self, -1)

    sizer = wx.BoxSizer(wx.HORIZONTAL)

    sizer2 = wx.BoxSizer(wx.VERTICAL)

    sizer.Add(ImagePane, 1, wx.CENTER|wx.ALL)

    sizer2.Add(sizer, 1, wx.CENTER|wx.ALL)

    self.SetSizer(sizer2)

    sizer2.Fit(self)

    class CheckListCtrl(wx.ListCtrl, CheckListCtrlMixin, ListCtrlAutoWidthMixin):

    def __init__(self, parent, size, pos):

    wx.ListCtrl.__init__(self, parent, -1, style=wx.LC_REPORT, size = size, pos = pos)

    CheckListCtrlMixin.__init__(self)

    ListCtrlAutoWidthMixin.__init__(self)

    vbox = wx.BoxSizer(wx.VERTICAL)

    self.SetSizer(vbox)

    vbox.Add(self, 1, wx.ALL)

    vbox.Fit(self)

    if __name__ == '__main__':

    try:

    #Set Folder

    if len('/'.join(os.path.abspath(__file__).replace('\\', '/').split('/')[:-1])) == 1:

    folder = os.path.abspath(__file__).replace('\\', '/').split('/')[:-1][0] + '/'

    else:

    folder = '/'.join(os.path.abspath(__file__).replace('\\', '/').split('/')[:-1])

    print folder

    os.chdir(folder)

    print 'Current Dir: %s' % os.getcwd()

    #Start logger

    print 'Starting Log'

    log = Logger()

    #Set the folder to the Grooveshark GUI.py folder

    log.write('Current Folder After: %s' % os.getcwd())

    log.write('------Directory-----------')

    log.write('Folder: %s' % folder)

    for n, i in enumerate(os.listdir(folder)):

    log.write('%i. %s' % (n+1, i))

    try:

    g = Grooveshark()

    except:

    grooveshark_error = True

    print 'Could not start vital component'

    try:

    g.sessionData()

    except httplib2.ServerNotFoundError:

    grooveshark_error = True

    error = 'Error could not contact grooveshark.com. Please check your internet connection'

    log.write('Setting current directory as %s' % folder)

    settings = Settings()

    app = wx.App(redirect = False)

    frame = MainFrame("Grooveshark")

    frame.Show(True)

    #Set this windows on top of any others.

    app.SetTopWindow(frame)

    if grooveshark_error:

    print 'Grooveshark Error'

    frame.Error(error)

    else:

    log.write('All import are good.')

    app.MainLoop()

    #After the GUI is exited

    #Kill the stream process

    log.write('GUI has been exited')

    #if g.stream_process.poll() == None:#PRocess has not shut down we need to kill it

    # g.stream_process.terminate()

    log.write('Removing stream files')

    for i in settings.stream_files:

    log.write(' - File: %s' % i)

    os.remove(i)#Remove all stream files

    print 'closing log'

    finally:

    download_content = open('download.log', 'rb').read()

    log.write('\n---------------------------download errors---------------------------\n')

    log.write(download_content)

    log.close()

    f = open('settings.cfg', 'wb')

    settings.config.write(f)

    f.close()

  2. Does the program still error or is it now working?

    Ok if the music downloads and you can't find it. Go into your settings.cfg and change

    save_path = /Music

    to

    save_path = /Music/

    even if you are on windows use "/"

  3. Huh seems to be a LOT of problems. I will look at the code and also try to make it so you don't have to install everything... basically install httplib2 in you site-packages and also install wxPython in the site packages. If that doesn't work then go back to the text for now. I am working on rewriting it with twisted so should be better all around. As for the errors make sure you can run python then type import httplib2 and also import wx. See if those error and if they don't you have them correctly installed.

    Or copy the install contents of httplib2 and wx into the programs folder.

  4. Just watch any movie where they use the command "Upload Virus" (aka Live Free or Die Hard)!

    Anyone with half a brain can recognize that it was for pure entertainment not education. (I don't get those who always analyze movies, these movies are not to educate you but for some good entertainment).

  5. No if you don't play music then you don't have to

    Also see if in a terminal you can start python by just typing python from any directory (if not add it to your path).

    Also make sure all the .py files are in the SAME folder

  6. zigzagjoe I have the blowfish stuff in js I'll post it..

    js

    /*
     JavaScript encryption module ver. 2.0 by Daniel Rench
    
     Based on existing code:
     Copyright © 2003 by Andre Mueller.
     Init of blowfish constants with a function (init/backup errors)
     Copyright © 2003 by Rainer Wollmann
     This Object is open source. You can redistribute it and/or modify
     it under the terms of the Universal General Public License (UGPL).
    http://www.ugpl.de/
    */
    function Blowfish(k){
    	if (k.length==0) throw "0 length key";
    	this.bf_P=this.Fbf_P();
    	this.bf_S0=this.Fbf_S0();
    	this.bf_S1=this.Fbf_S1();
    	this.bf_S2=this.Fbf_S2();
    	this.bf_S3=this.Fbf_S3();
    	this.escape=function(t){
    		var r='';
    		for(var i=0;i&lt;t.length;i++){
    			var c=t.charCodeAt(i);
    			var t1=Math.floor(c/16);
    			var t2=c%16;
    			if (t1&lt;10) t1+=48;
    			else t1+=55;
    			if (t2&lt;10) t2+=48;
    			else t2+=55;
    			r+=String.fromCharCode(t1)+String.fromCharCode(t2);
    		}
    		return r;
    	};
    	this.wordbyte0=function(w){return Math.floor(Math.floor(Math.floor(w/256)/256)/256)%256};
    	this.wordbyte1=function(w){return Math.floor(Math.floor(w/256)/256)%256};
    	this.wordbyte2=function(w){return Math.floor(w/256)%256};
    	this.wordbyte3=function(w){return w%256};
    	this.xor=function(w1,w2){var r=w1^w2;if (r&lt;0) r=0xffffffff+1+r; return r};
    	this.key=(k.length&gt;56)?k.substr(0,56):k;
    	var j=0;
    	for(var i=0;i&lt;18;++i){
    		var d=((this.key.charCodeAt(j%this.key.length)*256+this.key.charCodeAt((j+1)%this.key.length))*256+this.key.charCodeAt((j+2)%this.key.length))*256+this.key.charCodeAt((j+3)%this.key.length);
    		this.bf_P[i]=this.xor(this.bf_P[i],d);
    		j=(j+4)%this.key.length;
    	}
    	this.key=this.escape(this.key);
    	this.xl_par=0x00000000;
    	this.xr_par=0x00000000;
    	for(var i=0;i&lt;18;i+=2){
    		this.encipher();
    		this.bf_P[i]=this.xl_par;
    		this.bf_P[i+1]=this.xr_par;
    	}
    	for(j=0;j&lt;256;j+=2){
    		this.encipher();
    		this.bf_S0[j]=this.xl_par;
    		this.bf_S0[j+1]=this.xr_par;
    	}
    	for(j=0;j&lt;256;j+=2){
    		this.encipher();
    		this.bf_S1[j]=this.xl_par;
    		this.bf_S1[j+1]=this.xr_par;
    	}
    	for(j=0;j&lt;256;j+=2){
    		this.encipher();
    		this.bf_S2[j]=this.xl_par;
    		this.bf_S2[j+1]=this.xr_par;
    	}
    	for (j=0;j&lt;256;j+=2){
    		this.encipher();
    		this.bf_S3[j]=this.xl_par;
    		this.bf_S3[j+1]=this.xr_par;
    	}
    	this.unescape=function(t){
    		var r='';
    		for(i=0;i&lt;t.length;i++){
    			var t1=t.charCodeAt(i++);
    			var t2=t.charCodeAt(i);
    			if (t1&lt;58) t1-=48;
    			else {
    				if (t1&gt;96) t1-=87;
    				else t1-=55;
    			}
    			if (t2&lt;58) t2-=48;
    			else {
    				if (t2&gt;96) t2-=87;
    				else t2-=55;
    			}
    			r+=String.fromCharCode(t1*16+t2);
    		}
    		return r;
    	};
    }
    Blowfish.prototype.Fbf_P=function(){return [
    0xc10590ec,
    0xba979ee1,
    0x4eee520,
    0x759c8c59,
    0x22804ba7,
    0x7c46eb7a,
    0x21acf684,
    0xb9a7b8e7,
    0xbeed610a,
    0xdb325139,
    0xdf84ad90,
    0x31fb85c8,
    0xa5468088,
    0x7241bc17,
    0xd6e88a88,
    0xa375f4a4,
    0x223bf5ef,
    0xeda2cdb5,
    ];};
    Blowfish.prototype.Fbf_S0=function(){return [
    0x9654c859,
    0x909bc929,
    0x6c13ea8e,
    0xfb78c4f8,
    0xa1dd8c99,
    0x9c04168a,
    0x2a43d4a9,
    0x52be439b,
    0x10040365,
    0x422c267d,
    0x5210312e,
    0xad6d8ec,
    0x14814e6f,
    0xab8a7e9f,
    0x981a1dba,
    0x6c7ec03d,
    0xa4dbeb04,
    0x1bec8694,
    0x30fdf157,
    0x5c903dd3,
    0xfec8d421,
    0x32949bee,
    0x89c0351,
    0xf678350,
    0xd71deb51,
    0x3dc9f297,
    0xd0ad6f45,
    0x909cb0e,
    0x37ee1700,
    0xf1522308,
    0x7a117a9a,
    0x21606dde,
    0xf69ed07,
    0x1d2a8fe0,
    0xef95f5ad,
    0xa1f8c13c,
    0x10480d0d,
    0x2b1914be,
    0x19071638,
    0xc75af34f,
    0x65cabbb2,
    0x4ca28f5e,
    0xa6264839,
    0x7623bea7,
    0x24dfbda6,
    0x7cfc1117,
    0xdf916c8f,
    0x6abf9e8f,
    0x2c9e8f85,
    0x3b9ecf6,
    0x39cffd8f,
    0x302a0460,
    0xe28543c0,
    0x37ea897b,
    0x36e025e3,
    0xd4620943,
    0x4f5ca829,
    0x8f33310f,
    0x730f4503,
    0x8052db67,
    0x2e0b8a1d,
    0x91195ffb,
    0x2a49b357,
    0x3578d2ec,
    0x8f2bc8ce,
    0x197d2ed1,
    0xbb5b1b11,
    0x3b02f424,
    0x8de5d13a,
    0x2f4c7f70,
    0xe66ab0cf,
    0xdf93c57b,
    0x48b52549,
    0x735cb3fc,
    0x6fa34c40,
    0xeabd8238,
    0xd5fb57d5,
    0xb574befa,
    0x7af7d0e9,
    0x30d82d91,
    0x3dc52795,
    0x9a66f1c5,
    0x1014d6d7,
    0x1619b896,
    0xa465e2d6,
    0xdef33ed,
    0x213bb77d,
    0x65b1a904,
    0x964751b0,
    0x5335c857,
    0xf72060e0,
    0x579458db,
    0xa33556fe,
    0x8d41dd66,
    0x7165d4f8,
    0x261d183e,
    0xd55ff261,
    0xbfc3852b,
    0xeb4050c3,
    0xf500fc86,
    0x19e25b41,
    0x5a366b1a,
    0xdebcb9ac,
    0xf3e2d6d0,
    0x4de3ee3a,
    0x2579418d,
    0xe94c1bc9,
    0x39abd007,
    0xeebf9405,
    0x3e091753,
    0x8757a7e7,
    0x66456984,
    0xe1ad1e6b,
    0xc76a1b8,
    0xdfbfa09e,
    0x67431807,
    0x9b8e1496,
    0x38fde39,
    0xa9656ff5,
    0x48a6c2f9,
    0x2a531f33,
    0xe6213074,
    0xe1e98733,
    0x42bece69,
    0xd1f77ad7,
    0xc8ee6c6c,
    0x221f337f,
    0x37d93ce7,
    0x94e6954f,
    0x98557669,
    0xb78adea9,
    0xc97db869,
    0x99bb9ff9,
    0x7b245a04,
    0xb56e2f44,
    0x6de4945e,
    0xd5c550e9,
    0xe2406878,
    0x9178bec4,
    0xa1ceef70,
    0x6a543d9b,
    0x5df98e33,
    0x1801a7b3,
    0x1e9b8c86,
    0x5501fbe1,
    0xc7e53071,
    0x94855ad1,
    0x550e1997,
    0x260c8e5a,
    0xa40f1e26,
    0x55cde2b4,
    0x55c7850c,
    0x5a6fc9d3,
    0x8ed207bf,
    0x3ba77dfe,
    0x2505ded6,
    0xcf49779,
    0x57f557c6,
    0x59474010,
    0x638ba8a2,
    0x4d82f6eb,
    0x677d6829,
    0x44c2cfc1,
    0xd2c006a7,
    0x21d5be8e,
    0x5d8442d1,
    0x6174f23f,
    0xe2aa0ef3,
    0x54328e77,
    0x46a7983,
    0x6523470b,
    0x2cccdb19,
    0x6683aba1,
    0x191b22a4,
    0x53131029,
    0x1be73145,
    0x27c1f557,
    0xa819bda8,
    0x3e47b139,
    0xbe3c46ac,
    0x42c59203,
    0x92c6fd74,
    0x491aa43a,
    0x1ad367c3,
    0x628a99c8,
    0x3051e88e,
    0x67c54a0d,
    0xaa278070,
    0x35776a31,
    0x97557de3,
    0x4b84e68f,
    0x187a039f,
    0xfd0db4bc,
    0xf4c4286,
    0xba4f54fc,
    0xcbbc90c3,
    0xf269800,
    0xb78ec21b,
    0x1c97fe3a,
    0xa808792c,
    0x7b658426,
    0x81590c6c,
    0xc7890561,
    0x8a07080e,
    0x9d99e5e4,
    0xc3929bc4,
    0x31e5d06a,
    0x97a82a07,
    0xc7a53a0e,
    0x68596faf,
    0x2f8d609,
    0x14e256eb,
    0xffe202e1,
    0xfb13e18f,
    0x21b1db15,
    0x354080d6,
    0x777fed00,
    0xe6c89dc5,
    0x711a18f6,
    0x40c8e33b,
    0x709e7e2d,
    0x359c6507,
    0x56cb9f2c,
    0x92b8a949,
    0x87e360f2,
    0xc19ccb2e,
    0x623b905c,
    0x19f36d0,
    0x7ae0ec6b,
    0x2c903f89,
    0xdb621170,
    0x2ef6b8c6,
    0x6656ba25,
    0xf915180c,
    0xcdee1bd7,
    0x85e38edb,
    0x7a9ac026,
    0xca917632,
    0xfcfddc64,
    0x5c3a7d51,
    0x71da7223,
    0xa8d48e72,
    0x2a3ba8e0,
    0x710919d3,
    0xab50a080,
    0xd6228237,
    0xb41b7a76,
    0xd82b39f5,
    0x1e922c3f,
    0x6656d136,
    0x4a8473a7,
    0xa82aee63,
    0xdf451c42,
    0x62e2ae0e,
    0xeca484f3,
    0x1ebf64b5,
    ];};
    Blowfish.prototype.Fbf_S1=function(){return [0xf5cf4fef,
    0xa6eaedc5,
    0x3e59980d,
    0xc8f3911c,
    0x9490f545,
    0x53579eb,
    0x5645e167,
    0x2015a54b,
    0xea2f52d0,
    0xbb28b315,
    0x1b907ef4,
    0x9c841317,
    0xd03f498f,
    0x57045c47,
    0x992d554d,
    0x9d801a54,
    0x1638d6b3,
    0x88c1854,
    0xa74d1549,
    0xfd2b5787,
    0xfbe12709,
    0x432bb66,
    0x880bcd01,
    0xb9065d9e,
    0x1c2fb7b5,
    0xd27da333,
    0x8a3d4436,
    0x7310f49e,
    0x128be54f,
    0x772b8a37,
    0x55579a3c,
    0xbc75f552,
    0x38eb2e19,
    0x7c356617,
    0x1de8d4c2,
    0xd0e43cdf,
    0xd46044dd,
    0x252685ef,
    0x24051ee5,
    0x5b6bd82e,
    0x495b6f47,
    0x39e52934,
    0x31b81cdd,
    0x1487d6,
    0xc2b8b92b,
    0x8b8a0f1b,
    0xdb763075,
    0xe8fc685f,
    0x9c3bd739,
    0x60e6a1fc,
    0xb628a9a6,
    0xcd27caa,
    0x950a56f4,
    0x88691d4e,
    0xfcb51d66,
    0xdeb6d9b1,
    0xb25625f6,
    0x75c1d492,
    0x36d4a98c,
    0x9c5ac60d,
    0xf2ad970b,
    0x7e096239,
    0x6c5d1c4e,
    0x440bef8,
    0x2855e769,
    0x35442feb,
    0x525d6f15,
    0xa0d85345,
    0x14ac130f,
    0x640b6db5,
    0x15ff503e,
    0x7375b927,
    0x48ce4829,
    0xeedef8e8,
    0x223ad535,
    0xfa97618c,
    0xda086cc5,
    0xa9020e63,
    0x89a828ff,
    0x757f0bfd,
    0xead8e38f,
    0x864e3f9,
    0xeff82819,
    0xd7de2bad,
    0x2183d925,
    0x1c10ea2b,
    0xd4405fb2,
    0x24562242,
    0xb56178f8,
    0xd1682bbf,
    0xcde0ff93,
    0xb135f2c6,
    0x6e95f144,
    0x215484a8,
    0xb335ada4,
    0x10752b,
    0xe7126eb1,
    0x2f30aa95,
    0x73c04d5b,
    0xebf14789,
    0x5be0ff05,
    0xb2c3129f,
    0x6d115378,
    0x8a0c4623,
    0xe716afeb,
    0x6b3f36c0,
    0x71d23f25,
    0xdef919a5,
    0x9b1cc604,
    0x4e708139,
    0x1d206bf9,
    0x8c9c2be3,
    0xac43a8f3,
    0xcfb11067,
    0xf741b5e,
    0x1ea6c0f3,
    0x86d5cc7e,
    0x21189475,
    0x88e9460,
    0x6f91d8ab,
    0x2d8c61c5,
    0x45360e78,
    0xe4a226d5,
    0x5c769ab6,
    0x2b67a136,
    0x6f8adf6f,
    0xade04340,
    0x55fe66db,
    0xc334ef8a,
    0x61460c50,
    0x8da1ff40,
    0x75824980,
    0x721fefc9,
    0x948c22ba,
    0x661e3c96,
    0xfc1cdee7,
    0x4c6c3abe,
    0x67f1a2f5,
    0xe5ea0ccb,
    0xb58e9977,
    0x13a78f94,
    0x32921073,
    0xa9bee311,
    0x5b9d7ca1,
    0x8681d048,
    0x43e439b2,
    0x4e80b689,
    0x6a9b1125,
    0x268e3fab,
    0xf39e12f7,
    0xeec77123,
    0xd7b98ade,
    0xb525de74,
    0xd067f1d7,
    0x5b341ade,
    0xc16e27bc,
    0xb61bc08e,
    0xe8a0856,
    0x8318dc09,
    0x9c02b9db,
    0xc6734b93,
    0x8c1cdb58,
    0xf729a76d,
    0x71288bc1,
    0x7d4685d0,
    0xcca95f1,
    0xfcdb8b5d,
    0xde1eb92b,
    0xe6cc8bc2,
    0xc78d5b70,
    0xd73387e8,
    0x5676050a,
    0x71d0c54,
    0x4ed3ed2,
    0x3ff4ecf5,
    0x971ef95d,
    0x367d0085,
    0x633e3555,
    0x78a90717,
    0xd52d7bd6,
    0x81f57041,
    0x3ccef4af,
    0x5a2ecfe9,
    0x19b81054,
    0x837c3482,
    0x78db4bcb,
    0xb7e7a2fc,
    0xebc3ac19,
    0x955eceec,
    0x9af50f17,
    0x4c62335,
    0xd548a8c,
    0x174d4064,
    0x5801584f,
    0x1c16e012,
    0xcd1742c1,
    0x97a4e3b1,
    0x4df37c91,
    0x4169a93a,
    0x9b726c3b,
    0x886d38cf,
    0x1062ddf,
    0x45b14b7,
    0xf4a333b8,
    0x64f0981b,
    0x17a139c8,
    0x660678f8,
    0x3268cec7,
    0xf60a6dac,
    0x98c455df,
    0x493bffa5,
    0x927c471,
    0x1523d52d,
    0x32aca049,
    0x9d59f95,
    0x82b8d198,
    0x66e92cb0,
    0x268ef78,
    0x9ccb850a,
    0x6aaabed7,
    0xc2d7f5f3,
    0x1e4c4e8,
    0x5fdb4266,
    0xd83a3752,
    0x9ca64941,
    0x3f2f3efa,
    0x2077cbbf,
    0x4b046864,
    0x33c040e9,
    0xb17a057f,
    0xc2cebf84,
    0x92a3d3b3,
    0x3b803fc2,
    0x2fbaacf5,
    0xcd08a0a7,
    0xa61efac3,
    0x369f85ae,
    0x9614009b,
    0x1481932d,
    0x279e2645,
    0xdd2f2f91,
    0xb5ab540d,
    0x3edd7f22,
    0xcb52391b,
    0x72bc36bc,
    0xabb56089,
    0x89d31de7,
    0x1d50eb1d,
    0x651efe74,
    0x9a0df7bb,
    0x1db885d4,
    0xc09f5259,
    0xdede19fd,
    0xd025eb3,
    0x6152d5c,
    0x85385375,
    ];};
    Blowfish.prototype.Fbf_S2=function(){return [
    0xc91d3a82,
    0xc79228c4,
    0x516d9b16,
    0xeaf41822,
    0xa82b1ee5,
    0x92bbb1ba,
    0xc97072c4,
    0xaf2d626,
    0xec9cc306,
    0xea07f8f4,
    0x773ca5d5,
    0x7986d9d4,
    0xb5aa732d,
    0xf87c05c9,
    0x84134310,
    0x6b5a33b9,
    0x44e87bc3,
    0xcbf5050d,
    0xec3c68be,
    0x9ffb0e43,
    0xad9b3bdd,
    0x35ded40a,
    0x2ad14001,
    0x4ef5cfd1,
    0x7d263782,
    0x25f3a325,
    0x8b9ebec,
    0x330f6d68,
    0xf9a5d1db,
    0x5b3bdb94,
    0x1d20f47,
    0xa6b89829,
    0x6d657c3c,
    0x9d32c68a,
    0x8a389ddc,
    0xaf1a252,
    0xb5e9cba5,
    0x74ca996b,
    0x59e7c040,
    0xe23c06b8,
    0x3b69ecda,
    0x53bd1e12,
    0xcd81d8f6,
    0x71b998f3,
    0xd6ca4414,
    0x53b7355,
    0x76eab1b4,
    0x7dca92a1,
    0x8d8cb7df,
    0x44f26572,
    0x50723790,
    0xf4810d93,
    0x93b1efbd,
    0xe9ea4046,
    0xe6e9a0ee,
    0x187facae,
    0xea333ca2,
    0xd5e99bd0,
    0x916b8543,
    0x20752b5a,
    0x6554e503,
    0xaaa61ead,
    0x36eeef1c,
    0x70121ea8,
    0xe6dc468,
    0xab6799c3,
    0xa8265566,
    0xf736e100,
    0x3e20313,
    0xd8181980,
    0xe6e24b96,
    0xb21e489a,
    0x5b3c553c,
    0x23a49dd3,
    0xafc418b6,
    0xa807b571,
    0xc3be8c15,
    0xccdb14a4,
    0x9c77e8d3,
    0x1fced935,
    0x25e82d1f,
    0x7838ed17,
    0xa57ba392,
    0x28e97b23,
    0x60941d05,
    0x663afdd9,
    0xd913fe52,
    0x10b0e9c8,
    0x1c090b6,
    0x921e2c4d,
    0x6bd9488c,
    0x68e1429d,
    0x2aa87e7b,
    0xc8ba1070,
    0xd66da3e0,
    0xf66884f,
    0x1648af43,
    0xa239a8dc,
    0xe4964ad0,
    0x8068a066,
    0x91e4408c,
    0x321b7e0,
    0x3f33a264,
    0xb72cc578,
    0x6c1c912e,
    0xed757723,
    0xc9fa20fc,
    0x13cc343c,
    0xe7056942,
    0x19ce5761,
    0x35ad4db2,
    0xbc76d4b9,
    0x68c59615,
    0x723c3060,
    0xf57c23bc,
    0xe7d6bcad,
    0xf46073,
    0xb9127d8f,
    0x44cad49a,
    0x9a5d6b11,
    0xe394a7f5,
    0xeb3f968e,
    0xcd7520e0,
    0x1d9d8244,
    0x555c55e9,
    0x25da7bb1,
    0x3affa7f4,
    0x575debf,
    0x55c48d52,
    0x5adc4dd8,
    0x2eb346eb,
    0x671d6ad8,
    0x2b128fd9,
    0x9df0d831,
    0xb6c6c94,
    0x9166356e,
    0xa702a705,
    0xa3dd56c0,
    0x31c990e4,
    0x7c4e326,
    0x4f058c61,
    0xb4f45d31,
    0x1f555f53,
    0x269fb055,
    0xb6852aca,
    0x7879c55b,
    0xf18a8256,
    0x82e1e5a6,
    0x16fcdbd6,
    0x3c53ee12,
    0x1ddaae76,
    0x3b6df49e,
    0x5b4cae04,
    0xb2353a19,
    0x3080f4b9,
    0xf3040cd0,
    0xb8492621,
    0xdac10038,
    0x5fa35637,
    0xf5d9cf83,
    0x1077d5c6,
    0x213793e7,
    0xa5395a0a,
    0x728003e1,
    0xd90c5f36,
    0xc945adce,
    0x73421f88,
    0x694c1d59,
    0xde84f347,
    0x4eaf0ab7,
    0x4d50a504,
    0x43dafec9,
    0x821829b9,
    0x7f532504,
    0x765f31e4,
    0x21c07c08,
    0xa3c0d55b,
    0x5e7b542a,
    0x8e5c6600,
    0xfd12640b,
    0xb7953ad1,
    0x864a78fe,
    0xde548e94,
    0x8792b188,
    0x9e29e5bc,
    0xc0186398,
    0x8a39da22,
    0x8883f7e0,
    0x4ee058b7,
    0x412fdb69,
    0x9ae59311,
    0x2466223d,
    0xfee86abd,
    0x56ce7230,
    0xcfec05f2,
    0x47dcee78,
    0x837a5d28,
    0x6e9d94ee,
    0xe04a5ad2,
    0xc701696c,
    0x8e9ad861,
    0x432b3647,
    0x251c48c7,
    0x2504d178,
    0x69702645,
    0x986348bd,
    0xd5bfb37c,
    0x741b7248,
    0x23ebb3ae,
    0x2d522818,
    0xad77f3ed,
    0x68c547d0,
    0x7ccca781,
    0x8fa511dc,
    0x3789cbb4,
    0x98344aec,
    0xa5e96dd4,
    0xede3622b,
    0x4e000f33,
    0xbe4fd4d1,
    0x588c6f9e,
    0xbde284b9,
    0x44643084,
    0x518da9cb,
    0xba7fcf3d,
    0x1556ecb9,
    0x10864fa2,
    0x2ea6b94,
    0xed02e932,
    0x2c507c14,
    0x329e9866,
    0x79e1c795,
    0xf63beb62,
    0x1de7eb1e,
    0x45107ad3,
    0x77e2abfb,
    0x526a6cd2,
    0x5ba1946f,
    0x3257d238,
    0xfab2fb30,
    0xd1983860,
    0x9943ca36,
    0x496d6bd3,
    0xf22cf09b,
    0xccec9071,
    0x579fbdd0,
    0xcb814591,
    0xe6dffdbb,
    0xbe16f8df,
    0xa87c9a49,
    0xe6536354,
    0x512ade24,
    0xb657e640,
    0xaf938431,
    0xedf03a94,
    0x350cf9d0,
    ];};
    Blowfish.prototype.Fbf_S3=function(){return [
    0x832696c3,
    0xc83e3f7c,
    0xf7abfcd7,
    0xb4c19d26,
    0x8875c200,
    0xc6bb64ca,
    0xe1637c82,
    0x67e46aae,
    0x2d57a570,
    0x633f6cee,
    0xbc6f56ea,
    0xc358274d,
    0x8c481858,
    0x2f8c3351,
    0x92b1e9d9,
    0xf860ac88,
    0x24320781,
    0xa5ddee92,
    0x1f5bf31c,
    0x6ed0ae60,
    0xb285558,
    0x6ec438c,
    0x70e85a6b,
    0xed439238,
    0x4bfc6de6,
    0x8fb8144b,
    0xbf039af,
    0xdb9abc52,
    0x96ff2429,
    0x392586f8,
    0x2d1115e2,
    0x8d866f1e,
    0xca24a8ba,
    0x51ef2664,
    0x455b4eee,
    0x5bbe3978,
    0xc09a03a1,
    0x65bd9f62,
    0xddc17919,
    0x70a8fdf4,
    0xd5c3973d,
    0x7e5be10d,
    0xb0b8c4f8,
    0x62f9d805,
    0xd68535cf,
    0x4b144c86,
    0x24a11180,
    0xc3a954fa,
    0xfac22023,
    0xcd7e8e6f,
    0xd337d770,
    0x56911e62,
    0x8f774493,
    0x6f9daceb,
    0x60413828,
    0xd3b99186,
    0xbe8e60e9,
    0xc9d4324e,
    0x3e590d8f,
    0xa6701d7e,
    0xc7266e0c,
    0x22be9a94,
    0xec59f354,
    0x5a5c408a,
    0xdb19d3ba,
    0xa5977a8d,
    0xc8ffcac5,
    0x56ee41d9,
    0xc2f3173e,
    0x6bb40320,
    0x404653b6,
    0x224cff01,
    0x43934af1,
    0x70254314,
    0x712d7040,
    0x1ed7b45e,
    0x2f4da29f,
    0xd0bd94a9,
    0x10729cdb,
    0xbea38fe7,
    0xb41eb6f6,
    0x36dc612a,
    0x5ffecaa6,
    0xa1a4588,
    0x34494826,
    0x9cf0b3c2,
    0xcf5540af,
    0xae8fdaca,
    0x4595d88c,
    0x2a04b6c7,
    0xd3ca223c,
    0xf098ba,
    0x87bff1eb,
    0xf21728e,
    0x3a4cc2fb,
    0x7646fb6f,
    0x9287de8e,
    0x5a22dbbc,
    0x9ca788d0,
    0x3955c8ec,
    0xef65ad58,
    0xed39cc0c,
    0xa9bca738,
    0x441df384,
    0x69c63b0,
    0xfc2e1295,
    0xcbba6e89,
    0x62e0484e,
    0xa964a170,
    0x80c8b564,
    0xf0145f20,
    0x585d6976,
    0x8a6fecb4,
    0x2b5b9bfd,
    0xb41bd3cd,
    0x4d26c783,
    0xf2518446,
    0xf8e2f546,
    0x28e1ec7b,
    0x5891bd6e,
    0x6f37030f,
    0x76f3f25d,
    0x6ada036e,
    0xed521d56,
    0x8cef9f66,
    0x776d4ed8,
    0x7b9075be,
    0x1c19328c,
    0xbc82a9d5,
    0x90a12333,
    0xa73f84ae,
    0xce8c0ee6,
    0x6532882a,
    0x54de205d,
    0x8ab9342f,
    0xe9164823,
    0xa7ef738a,
    0x2b09f3f3,
    0x25cd2bab,
    0xdc1ada2d,
    0xabfe0427,
    0xa996d8c4,
    0x4ea32afd,
    0xf9559f4e,
    0x62ecb2ae,
    0x63b27945,
    0x3dddb6fa,
    0xd0c864bb,
    0x2b3b0259,
    0xbc52392d,
    0x5d7d8c93,
    0xa42a7c17,
    0x781dd59f,
    0x32281898,
    0x40304092,
    0x31ca351b,
    0xdbdd120d,
    0xe97f8a7c,
    0x4b08951f,
    0x76158668,
    0xd40a28e9,
    0xb3ae8ea9,
    0xe9f00efc,
    0x8e8464d,
    0x449faa32,
    0xb6378741,
    0xc928f6fa,
    0xf776248c,
    0x78c1e863,
    0xf89a3e1c,
    0xd931aca6,
    0xc7ec5faa,
    0xd3f2712d,
    0x6b82e088,
    0x54d5937,
    0x1de35a13,
    0x8805365a,
    0x5c5f501b,
    0x4da49154,
    0xf2c4de1b,
    0x3fb9a18d,
    0x7e0d9f63,
    0x852ddd24,
    0xf08b2b10,
    0x8a3f44fd,
    0xf5a7b732,
    0x5c2ef81e,
    0x8223a0ff,
    0x8aad1618,
    0xc920d93f,
    0x82e09782,
    0xc640d537,
    0xa8085a33,
    0x562ce081,
    0x1fbb19a2,
    0xaa655fe1,
    0x1302e190,
    0x41cc80b0,
    0x2c8013c0,
    0xcbed39f,
    0xe9b9178a,
    0xe109e701,
    0xb77382b7,
    0x67cf3a6,
    0xcb5a8e8d,
    0xedeb42f8,
    0x8de95c0f,
    0x1ae6c13,
    0xf90e2f8d,
    0xaffed100,
    0xb83ef6ce,
    0x2c16d9ec,
    0x8c9c016e,
    0xcc191879,
    0xc4d838eb,
    0xa149b638,
    0x2f5dacfb,
    0x55cf002d,
    0x89c3e05a,
    0x727573b3,
    0x3f20e481,
    0xa3cbf5cd,
    0xbf346fae,
    0xbeec614b,
    0x1e0661f3,
    0xd27be7da,
    0xdd416072,
    0xb14bb755,
    0x62023b9a,
    0xdc3b40b3,
    0x20b6cdf8,
    0x272af7a1,
    0xba8e98cb,
    0xd55deb6c,
    0x92c024f5,
    0x2eb140dd,
    0x1c2fd4da,
    0x285f0494,
    0x34ee1057,
    0x9cc4d0fd,
    0x8ba6a4a8,
    0x37683654,
    0x16161de8,
    0xd59b4d73,
    0xba3035f4,
    0x2c290032,
    0x8f44cba9,
    0x77cc1c17,
    0x46ad0eb6,
    0xeb3bbfcc,
    0x5ba5713c,
    0x454afbc3,
    0x189f5b99,
    0x486e7084,
    0xe217d683,
    0x16164931,
    ];};
    Blowfish.prototype.encrypt=function(t){
    	var t=this.escape(t);
    	for(var i=0;i&lt;t.length%16;i++) t+='0';
    	var r='';
    	for(var i=0;i&lt;t.length;i+=16){
    		this.xr_par=this.wordunescape(t.substr(i,8));
    		this.xl_par=this.wordunescape(t.substr(i+8,8));
    		this.encipher();
    		r+=this.wordescape(this.xr_par)+this.wordescape(this.xl_par);
    	}
    	return r;
    };
    Blowfish.prototype.decrypt=function(t){
    	for(var i=0;i&lt;t.length%16;i++) t+='0';
    	var r='';
    	for (var i=0;i&lt;t.length;i+=16){
    		this.xr_par=this.wordunescape(t.substr(i,8));
    		this.xl_par=this.wordunescape(t.substr(i+8,8));
    		this.decipher();
    		r+=this.wordescape(this.xr_par)+this.wordescape(this.xl_par);
    	}
    	return this.unescape®;
    };
    Blowfish.prototype.wordescape=function(w){
    	var r='';
    	// reverse byteorder for intel systems
    	var m=new Array (this.wordbyte0(w),this.wordbyte1(w),this.wordbyte2(w),this.wordbyte3(w));
    	for(var i=3;i&gt;=0;i--){
    		var t1=Math.floor(m[i]/16);
    		var t2=m[i]%16;
    		if (t1&lt;10) t1+=48;
    		else t1+=55;
    		if (t2&lt;10) t2+=48;
    		else t2+=55;
    		r+=String.fromCharCode(t1)+String.fromCharCode(t2);
    	}
    	return r;
    };
    Blowfish.prototype.wordunescape=function(t){
    	var r=0;
    	// reverse byteorder for intel systems
    	for(var i=6;i&gt;=0;i-=2){
    		var t1=t.charCodeAt(i);
    		var t2=t.charCodeAt(i+1);
    		if (t1&lt;58) t1-=48;
    		else t1-=55;
    		if (t2&lt;58) t2-=48;
    		else t2-=55;
    		r=r*256+(t1*16+t2);
    	}
    	return r;
    };
    Blowfish.prototype.round=function(a,b,n){
    	var t=this;
    	return(t.xor(a,t.xor(((t.xor((t.bf_S0[t.wordbyte0(B)]+t.bf_S1[t.wordbyte1(B)]),t.bf_S2[t.wordbyte2(B)]))+t.bf_S3[t.wordbyte3(B)]),t.bf_P[n])));
    };
    Blowfish.prototype.encipher=function(){
    	var t=this;
    	var Xl=t.xl_par;
    	var Xr=t.xr_par;
    	Xl=t.xor(Xl,t.bf_P[0]);
    	Xr=t.round(Xr,Xl,1);Xl=t.round(Xl,Xr,2);
    	Xr=t.round(Xr,Xl,3);Xl=t.round(Xl,Xr,4);
    	Xr=t.round(Xr,Xl,5);Xl=t.round(Xl,Xr,6);
    	Xr=t.round(Xr,Xl,7);Xl=t.round(Xl,Xr,8);
    	Xr=t.round(Xr,Xl,9);Xl=t.round(Xl,Xr,10);
    	Xr=t.round(Xr,Xl,11);Xl=t.round(Xl,Xr,12);
    	Xr=t.round(Xr,Xl,13);Xl=t.round(Xl,Xr,14);
    	Xr=t.round(Xr,Xl,15);Xl=t.round(Xl,Xr,16);
    	Xr=t.xor(Xr,t.bf_P[17]);
    	t.xl_par=Xr;
    	t.xr_par=Xl;
    };
    Blowfish.prototype.decipher=function(){
    	var t=this;
    	var Xl=t.xl_par;
    	var Xr=t.xr_par;
    	Xl=t.xor(Xl,t.bf_P[17]);
    	Xr=t.round(Xr,Xl,16);Xl=t.round(Xl,Xr,15);
    	Xr=t.round(Xr,Xl,14);Xl=t.round(Xl,Xr,13);
    	Xr=t.round(Xr,Xl,12);Xl=t.round(Xl,Xr,11);
    	Xr=t.round(Xr,Xl,10);Xl=t.round(Xl,Xr,9);
    	Xr=t.round(Xr,Xl,8);Xl=t.round(Xl,Xr,7);
    	Xr=t.round(Xr,Xl,6);Xl=t.round(Xl,Xr,5);
    	Xr=t.round(Xr,Xl,4);Xl=t.round(Xl,Xr,3);
    	Xr=t.round(Xr,Xl,2);Xl=t.round(Xl,Xr,1);
    	Xr=t.xor(Xr,t.bf_P[0]);
    	t.xl_par=Xr;
    	t.xr_par=Xl;
    };

  7. gnounc what does the console say (if you can't see it then open a console window and cd to the directory and run python Grooveshark_Gui.py)

    also make sure you have httplib2 and python installed too (see the first post for details)

  8. Has anyone had any experience with it and liked it? I have tried and tried and tried and tried and tried to use it but I have never understood how to use it. If any has had such problems and been able to finally understand it, could you please post what helped you and any other information. Thank you :) much appreciated

  9. Portable is not what a Live CD is meant for. Live CD are meant for trying a OS out (like ubuntu) or for a place where you can't touch the hard drive (forensics) and sometimes for your own environment. You say it is the most portable. It isn't instead of burning a CD and make sure it all works etc etc you could compile a EXE version of this and then copy it to a USB thumb drive and be done.

  10. What do you mean referrers to JSON. Yes it does use JSON (JavaScript object notation). Also I can conceive the use of a live CD (for forensic and other times where you can't touch any part of the hard drive) but for Grooveshark, why would you want that? It seems that it is not only me that is confused by your wanting of a Live CD. This application is portable. Just set the save directory to some where on your usb thumb drive and it won't touch the hard drive. Of course you seems to be insulted that I don't understand your extreme need for a Live CD, but your unwillingness to either start a thread and work on it or to even explain the usefulness of a Live CD enviroment over say, using this app on a thumb drive.

    So please explain why a live cd would be so much better and why it is better then other methods ok I have mentioned

  11. pichet what stuff was missing? also why the hell do you want to run it on a live cd, this app writes files to the disk so a live cd WOULD NOT WORK. also on linux you need to change the mplayer executable from a windows exe to the linux version.

×
×
  • Create New...