Jump to content

Pandora Timeshifting App: Main Discussion Thread


irieb

Recommended Posts

Is anyone who is using the program getting these features working, I mean album art, lyrics being saved, Track listings (also folders being created correctly artist folder and album).....is this a software issue?

You need to turn on CDDB lookup to find the album name and track number, you need to turn on last.fm data lookup to find the cover art (you don't need a last.fm username/password)

I posted a source code patch here on Friday to fix the CDDB lookup.

cover art lookup is broken because last.fm has changed its HTML page. The fix should be simple once I have a couple hours to work on it.

Link to comment
Share on other sites

  • Replies 1.4k
  • Created
  • Last Reply

Top Posters In This Topic

Hey cap, could you do me a favor (since you're reverse engineering the JAR's source files), and find if you can send a seperate call to a URL from within the jar, or call another JS command on the page? If you can, let me know so that way I can get a solid way to tie into PJ with my php ripper. (More specifically, help me find a way to hijack grabMP3() effectively and properly.)

Link to comment
Share on other sites

Hey cap, could you do me a favor (since you're reverse engineering the JAR's source files), and find if you can send a seperate call to a URL from within the jar, or call another JS command on the page? If you can, let me know so that way I can get a solid way to tie into PJ with my php ripper. (More specifically, help me find a way to hijack grabMP3().)

I did not have to reverse engineer the code, it's open source.

What you are trying to do with PHP that PJ is not already doing?

Link to comment
Share on other sites

I did not have to reverse engineer the code, it's open source.

What you are trying to do with PHP that PJ is not already doing?

I mean examining the code, (and trying to figure out what it all does when mashed together so you update certain peices properly), and I'm trying to replace the failing grabMP3(). You know how it's picky and sometimes works, sometimes doesn't? I wanted to replace it with something better that'll actually work.

Link to comment
Share on other sites

Cynagen

This has been working for me, I only have problems when creating a new station, not sure why; pandora must mess with the cache when using this feature, to get around this I'll do a browsers reload when creating a station.

The code is from the 7.4.1 release which includes the lyrics lookup.

cheers

package util;



import org.blinkenlights.jid3.ID3Exception;

import org.blinkenlights.jid3.MediaFile;

import org.blinkenlights.jid3.MP3File;

import org.blinkenlights.jid3.v2.ID3V2_3_0Tag;

import org.blinkenlights.jid3.v2.APICID3V2Frame;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;



import java.io.*;

import java.util.*;



import enums.FileType;

import properties.DefaultProperties;



public class Mp3Processor {



    private static String ERR_TMP_NOT_FOUND = "unable to find file make sure you have Pandora running in a FIRFOX browser";



    private static Log LOG = LogFactory.getLog(Mp3Processor.class);



    public static File findCurrentMP3() throws IOException {

        LOG.info("locating mp3");

        File currentTmpMp3 = findCurrentTmpMp3();

        LOG.debug("checking file integrity for file: " + currentTmpMp3.getName());

        int loopCount = 0;

        while (true) {

            try {

                LOG.debug("sleeping for a second");

                Thread.sleep(1000);



            } catch (InterruptedException e) {

                //ignore

            }

            File currentMp3Refetched = findCurrentTmpMp3();

            if (currentMp3Refetched.getName().equals(currentTmpMp3.getName())) {

                LOG.debug("file integrity check complete");

                break;

            }

            if (loopCount > 40) {

                throw new RuntimeException("File integrity could not be confirmed after 40 loops - process aborted");

            }

            loopCount++;

        }



        return copyFile(currentTmpMp3, new File(currentTmpMp3.getParent(), "pandorasJarTmpFile.mp3"));

    }



    private static File findCurrentTmpMp3() {

        int retryCount = DefaultProperties.getTmpMp3RetryCount();

        File[] mp3Files = new File[0];

        for (int x = 0; x < retryCount; x++) {

            try {

                mp3Files = getJoinedPandoraMp3FilesInDecendingOrder();

                break;

            } catch (Exception e) {

                if (x + 1 == retryCount) {

                    throw new RuntimeException(e.getMessage());

                }

                LOG.info("Mp3 file was not located retrying after 1 second. loop count: " + (x + 1));

                try {

                    Thread.sleep(1000);

                } catch (InterruptedException e1) {

                    //ignore

                }

            }

        }

        return mp3Files[1];

    }





    private static File[] getJoinedPandoraMp3FilesInDecendingOrder() throws IOException {

        List<File> mp3s = new ArrayList<File>();

        File tempDir = findTempDir();

        joinMp3s(mp3s, tempDir);

        File[] joinedMp3s = mp3s.toArray(new File[mp3s.size()]);

        sortFilesByLastModified(joinedMp3s);

        if (joinedMp3s.length < 2) {

            throw new RuntimeException(ERR_TMP_NOT_FOUND);

        }

        return joinedMp3s;

    }



    private static File findTempDir() {

        String tmpDir = System.getenv("TEMP");

        if (tmpDir == null || tmpDir.length() == 0) {

            tmpDir = System.getenv("TMP");

        }

        if (tmpDir == null) {

            throw new RuntimeException(ERR_TMP_NOT_FOUND);

        }

        return new File(tmpDir);

    }



    private static boolean isFileRecent(File file) {

        Date now = new Date();

        Calendar calendar = Calendar.getInstance();

        calendar.setTime(new Date(file.lastModified()));

        calendar.add(Calendar.HOUR, 3);

        return now.before(calendar.getTime());

    }



    public static void joinMp3s(List<File> mp3s, File lookinDir) throws IOException {

        LOG.debug("n***processing directory: " + lookinDir.getName() + "***n");

        File[] files = lookinDir.listFiles();

        sortFilesByLastModified(files);



        //uncomment to print files in each working directory

        //printFiles(files);



        for (File currentFile : files) {

            if (!currentFile.isDirectory()) {

                if (isMp3(currentFile)) {

                    LOG.debug("mp3 found adding currentFile: " + currentFile.getName());

                    mp3s.add(currentFile);

                } 

            } else {

                if (currentFile.getName().toLowerCase().indexOf("plug") != -1) {

                    joinMp3s(mp3s, currentFile);

                }

            }

        }

        LOG.debug("no more mp3 found in dir");

    }



    private static void printFiles(File[] files) {

        LOG.debug("working with files");

        for (File file : files) {

            LOG.debug(file.getName());

        }

    }



    private static boolean isMp3(File file) {

        FileInputStream is = null;

        if (file.length() < (1000 * 1024)) {

            //LOG.debug("file: " + file.getName() + " too small");

            return false;

        }

        try {

            is = new FileInputStream(file);

            byte[] buffer = new byte[32 * 1024];

            is.read(buffer);

            String fragment = new String(buffer);

            if (fragment.indexOf("LAME") != -1) {

                LOG.debug("found mp3 file: " + file.getName() + " adding to list");

                return true;

            } else {

                LOG.debug("file " + file.getName() + " is not an mp3");

                return false;

            }

        }

        catch (IOException e) {

            LOG.debug("unable to parse file: " + file + " marking file as non-mp3");

            return false;

        }

        finally {

            if (is != null) {

                try {

                    is.close();

                }

                catch (IOException e) {

                    LOG.info("unable to close input stream: " + e.getMessage());

                }

            }

        }

    }





    public static void sortFilesByLastModified(File[] files) {

        Arrays.sort(files, new Comparator() {

            public int compare(Object o1, Object o2) {

                if (((File) o1).lastModified() > ((File) o2).lastModified()) {

                    return -1;

                } else if (((File) o1).lastModified() < ((File) o2).lastModified()) {

                    return +1;

                } else {

                    return 0;

                }

            }

        });

    }



    public static File copyFile(File src, File dst) throws IOException {

        LOG.info("copying file[" + src.getAbsolutePath() + "] to temp[" + dst.getAbsolutePath() + "]");

        InputStream in = new FileInputStream(src);

        OutputStream out = new FileOutputStream(dst);

        byte[] buf = new byte[1024];

        int len;

        while ((len = in.read(buf)) > 0) {

            out.write(buf, 0, len);

        }

        in.close();

        out.close();

        return dst;

    }



    public static void addID3Tags(File currentMP3, File coverArt, String comment, SongInfo songInfo) throws ID3Exception, IOException {

        LOG.info("adding ID3 tags: " + songInfo.toString());

        MediaFile oMediaFile = new MP3File(currentMP3);

        ID3V2_3_0Tag oID3V2_3_0Tag = new ID3V2_3_0Tag();



        if (coverArt != null) {

            LOG.info("setting ID3 cover art");

            byte[] buffer = new byte[32 * 1024];

            BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(coverArt));

            ByteArrayOutputStream imageBinary = new ByteArrayOutputStream();

            while (bufferedInputStream.read(buffer) != -1) {

                imageBinary.write(buffer);

            }

            APICID3V2Frame apicid3V2Frame = new APICID3V2Frame("image/jpg", APICID3V2Frame.PictureType.Artist, songInfo.getAlbum() != null ? songInfo.getAlbum() : "unknown", imageBinary.toByteArray());

            oID3V2_3_0Tag.addAPICFrame(apicid3V2Frame);

        }

        if (songInfo.getAlbum() != null) {

            oID3V2_3_0Tag.setAlbum(songInfo.getAlbum());

        }

        if (songInfo.getArtist() != null) {

            oID3V2_3_0Tag.setArtist(songInfo.getArtist());

        }

        if (comment != null) {

            if (songInfo.getStationName() != null) {

                oID3V2_3_0Tag.setComment(songInfo.getStationName());

            } else {

                oID3V2_3_0Tag.setComment(comment);

            }

        }

        if (songInfo.getTrackNumber() != null) {

            Integer i = new Integer(songInfo.getTrackNumber());

            oID3V2_3_0Tag.setTrackNumber(i);

        }

        if (songInfo.getGenre() != null) {

            oID3V2_3_0Tag.setGenre(songInfo.getGenre());

        }

        if (songInfo.getTitle() != null) {

            oID3V2_3_0Tag.setTitle(songInfo.getTitle());

        }

        if (songInfo.getYear() != null) {

            try {

                Integer y = new Integer(songInfo.getYear());

                oID3V2_3_0Tag.setYear(y);

            } catch (NumberFormatException e) {

                //ignore

            }



        }



        oMediaFile.setID3Tag(oID3V2_3_0Tag);

        oMediaFile.sync();

    }



    public static void saveMP3(SongInfo songInfo, File fileToSave, FileType fileType, DataOutputStream output, boolean addToItunes) throws IOException {

        File file = new File(Util.createSongHierarchy(songInfo), SafeString.getSafeFileName(songInfo.getArtist().trim() + "-" + songInfo.getTitle().trim()) + "." + fileType.toString().toLowerCase());

        Mp3Processor.copyFile(fileToSave, file);

        String mp3Path = file.getAbsolutePath();

        if (addToItunes) {

            ITunesManager.addTrackToItunes(mp3Path, songInfo.getStationName());

        }

        LOG.info("nripped file to: " + mp3Path + "nyea baby!!!n");

        if (fileType == FileType.MP3) {

            output.writeBytes("<span style="font: 12px arial">MP3 tagged and saved:</span><br/><span style="font: 12px arial">" + mp3Path + "</span>");

        }

    }

}

[/code]

Link to comment
Share on other sites

Cynagen

This has been working for me, I only have problems when creating a new station, not sure why; pandora must mess with the cache when using this feature, to get around this I'll do a browsers reload when creating a station.

The code is from the 7.4.1 release which includes the lyrics lookup.

cheers

package util;



import org.blinkenlights.jid3.ID3Exception;

import org.blinkenlights.jid3.MediaFile;

import org.blinkenlights.jid3.MP3File;

import org.blinkenlights.jid3.v2.ID3V2_3_0Tag;

import org.blinkenlights.jid3.v2.APICID3V2Frame;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;



import java.io.*;

import java.util.*;



import enums.FileType;

import properties.DefaultProperties;



public class Mp3Processor {



    private static String ERR_TMP_NOT_FOUND = "unable to find file make sure you have Pandora running in a FIRFOX browser";



    private static Log LOG = LogFactory.getLog(Mp3Processor.class);



    public static File findCurrentMP3() throws IOException {

        LOG.info("locating mp3");

        File currentTmpMp3 = findCurrentTmpMp3();

        LOG.debug("checking file integrity for file: " + currentTmpMp3.getName());

        int loopCount = 0;

        while (true) {

            try {

                LOG.debug("sleeping for a second");

                Thread.sleep(1000);



            } catch (InterruptedException e) {

                //ignore

            }

            File currentMp3Refetched = findCurrentTmpMp3();

            if (currentMp3Refetched.getName().equals(currentTmpMp3.getName())) {

                LOG.debug("file integrity check complete");

                break;

            }

            if (loopCount > 40) {

                throw new RuntimeException("File integrity could not be confirmed after 40 loops - process aborted");

            }

            loopCount++;

        }



        return copyFile(currentTmpMp3, new File(currentTmpMp3.getParent(), "pandorasJarTmpFile.mp3"));

    }



    private static File findCurrentTmpMp3() {

        int retryCount = DefaultProperties.getTmpMp3RetryCount();

        File[] mp3Files = new File[0];

        for (int x = 0; x < retryCount; x++) {

            try {

                mp3Files = getJoinedPandoraMp3FilesInDecendingOrder();

                break;

            } catch (Exception e) {

                if (x + 1 == retryCount) {

                    throw new RuntimeException(e.getMessage());

                }

                LOG.info("Mp3 file was not located retrying after 1 second. loop count: " + (x + 1));

                try {

                    Thread.sleep(1000);

                } catch (InterruptedException e1) {

                    //ignore

                }

            }

        }

        return mp3Files[1];

    }





    private static File[] getJoinedPandoraMp3FilesInDecendingOrder() throws IOException {

        List<File> mp3s = new ArrayList<File>();

        File tempDir = findTempDir();

        joinMp3s(mp3s, tempDir);

        File[] joinedMp3s = mp3s.toArray(new File[mp3s.size()]);

        sortFilesByLastModified(joinedMp3s);

        if (joinedMp3s.length < 2) {

            throw new RuntimeException(ERR_TMP_NOT_FOUND);

        }

        return joinedMp3s;

    }



    private static File findTempDir() {

        String tmpDir = System.getenv("TEMP");

        if (tmpDir == null || tmpDir.length() == 0) {

            tmpDir = System.getenv("TMP");

        }

        if (tmpDir == null) {

            throw new RuntimeException(ERR_TMP_NOT_FOUND);

        }

        return new File(tmpDir);

    }



    private static boolean isFileRecent(File file) {

        Date now = new Date();

        Calendar calendar = Calendar.getInstance();

        calendar.setTime(new Date(file.lastModified()));

        calendar.add(Calendar.HOUR, 3);

        return now.before(calendar.getTime());

    }



    public static void joinMp3s(List<File> mp3s, File lookinDir) throws IOException {

        LOG.debug("n***processing directory: " + lookinDir.getName() + "***n");

        File[] files = lookinDir.listFiles();

        sortFilesByLastModified(files);



        //uncomment to print files in each working directory

        //printFiles(files);



        for (File currentFile : files) {

            if (!currentFile.isDirectory()) {

                if (isMp3(currentFile)) {

                    LOG.debug("mp3 found adding currentFile: " + currentFile.getName());

                    mp3s.add(currentFile);

                } 

            } else {

                if (currentFile.getName().toLowerCase().indexOf("plug") != -1) {

                    joinMp3s(mp3s, currentFile);

                }

            }

        }

        LOG.debug("no more mp3 found in dir");

    }



    private static void printFiles(File[] files) {

        LOG.debug("working with files");

        for (File file : files) {

            LOG.debug(file.getName());

        }

    }



    private static boolean isMp3(File file) {

        FileInputStream is = null;

        if (file.length() < (1000 * 1024)) {

            //LOG.debug("file: " + file.getName() + " too small");

            return false;

        }

        try {

            is = new FileInputStream(file);

            byte[] buffer = new byte[32 * 1024];

            is.read(buffer);

            String fragment = new String(buffer);

            if (fragment.indexOf("LAME") != -1) {

                LOG.debug("found mp3 file: " + file.getName() + " adding to list");

                return true;

            } else {

                LOG.debug("file " + file.getName() + " is not an mp3");

                return false;

            }

        }

        catch (IOException e) {

            LOG.debug("unable to parse file: " + file + " marking file as non-mp3");

            return false;

        }

        finally {

            if (is != null) {

                try {

                    is.close();

                }

                catch (IOException e) {

                    LOG.info("unable to close input stream: " + e.getMessage());

                }

            }

        }

    }





    public static void sortFilesByLastModified(File[] files) {

        Arrays.sort(files, new Comparator() {

            public int compare(Object o1, Object o2) {

                if (((File) o1).lastModified() > ((File) o2).lastModified()) {

                    return -1;

                } else if (((File) o1).lastModified() < ((File) o2).lastModified()) {

                    return +1;

                } else {

                    return 0;

                }

            }

        });

    }



    public static File copyFile(File src, File dst) throws IOException {

        LOG.info("copying file[" + src.getAbsolutePath() + "] to temp[" + dst.getAbsolutePath() + "]");

        InputStream in = new FileInputStream(src);

        OutputStream out = new FileOutputStream(dst);

        byte[] buf = new byte[1024];

        int len;

        while ((len = in.read(buf)) > 0) {

            out.write(buf, 0, len);

        }

        in.close();

        out.close();

        return dst;

    }



    public static void addID3Tags(File currentMP3, File coverArt, String comment, SongInfo songInfo) throws ID3Exception, IOException {

        LOG.info("adding ID3 tags: " + songInfo.toString());

        MediaFile oMediaFile = new MP3File(currentMP3);

        ID3V2_3_0Tag oID3V2_3_0Tag = new ID3V2_3_0Tag();



        if (coverArt != null) {

            LOG.info("setting ID3 cover art");

            byte[] buffer = new byte[32 * 1024];

            BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(coverArt));

            ByteArrayOutputStream imageBinary = new ByteArrayOutputStream();

            while (bufferedInputStream.read(buffer) != -1) {

                imageBinary.write(buffer);

            }

            APICID3V2Frame apicid3V2Frame = new APICID3V2Frame("image/jpg", APICID3V2Frame.PictureType.Artist, songInfo.getAlbum() != null ? songInfo.getAlbum() : "unknown", imageBinary.toByteArray());

            oID3V2_3_0Tag.addAPICFrame(apicid3V2Frame);

        }

        if (songInfo.getAlbum() != null) {

            oID3V2_3_0Tag.setAlbum(songInfo.getAlbum());

        }

        if (songInfo.getArtist() != null) {

            oID3V2_3_0Tag.setArtist(songInfo.getArtist());

        }

        if (comment != null) {

            if (songInfo.getStationName() != null) {

                oID3V2_3_0Tag.setComment(songInfo.getStationName());

            } else {

                oID3V2_3_0Tag.setComment(comment);

            }

        }

        if (songInfo.getTrackNumber() != null) {

            Integer i = new Integer(songInfo.getTrackNumber());

            oID3V2_3_0Tag.setTrackNumber(i);

        }

        if (songInfo.getGenre() != null) {

            oID3V2_3_0Tag.setGenre(songInfo.getGenre());

        }

        if (songInfo.getTitle() != null) {

            oID3V2_3_0Tag.setTitle(songInfo.getTitle());

        }

        if (songInfo.getYear() != null) {

            try {

                Integer y = new Integer(songInfo.getYear());

                oID3V2_3_0Tag.setYear(y);

            } catch (NumberFormatException e) {

                //ignore

            }



        }



        oMediaFile.setID3Tag(oID3V2_3_0Tag);

        oMediaFile.sync();

    }



    public static void saveMP3(SongInfo songInfo, File fileToSave, FileType fileType, DataOutputStream output, boolean addToItunes) throws IOException {

        File file = new File(Util.createSongHierarchy(songInfo), SafeString.getSafeFileName(songInfo.getArtist().trim() + "-" + songInfo.getTitle().trim()) + "." + fileType.toString().toLowerCase());

        Mp3Processor.copyFile(fileToSave, file);

        String mp3Path = file.getAbsolutePath();

        if (addToItunes) {

            ITunesManager.addTrackToItunes(mp3Path, songInfo.getStationName());

        }

        LOG.info("nripped file to: " + mp3Path + "nyea baby!!!n");

        if (fileType == FileType.MP3) {

            output.writeBytes("<span style="font: 12px arial">MP3 tagged and saved:</span><br/><span style="font: 12px arial">" + mp3Path + "</span>");

        }

    }

}

This a portion of JAR source or is this JS? Please people tell us what type so that I can post the nessicary changes, and if this is JAR source, i'll be sure to toss it in an d recompile, test the new JAR, and if it works for me too, toss it up for download.

Link to comment
Share on other sites

For those looking for a working version, I've posted 7.3.1 on this free file server. On the page that comes up, click in the upper left where it says Download File. This link will disappear after 30 days of inactivity.

http://upload.ohshare.com/v/8926801/pandor....7.3.1.zip.html

This is the same zip that I downloaded from wildandbad back in July.

I refer you to my post of 4 Sept. Nothing has changed since then except Firefox is now 1.5.0.7. Pandora continues to run flawlessly 24/7 with never a bad tag. I don't do last.fm, iTunes, album art or lyrics. Just auto grabbing mp3's with correct tags is all I need.

I've noticed a conflict between Pandora.jar and uTorrent which makes it necessary to not run both at the same time.

Link to comment
Share on other sites

I mean examining the code, (and trying to figure out what it all does when mashed together so you update certain peices properly), and I'm trying to replace the failing grabMP3(). You know how it's picky and sometimes works, sometimes doesn't? I wanted to replace it with something better that'll actually work.

Why not fix grabMP3()?

What would you do differently in your implementation?

All the problems I heard about were caused by cluttered TEMP directories or grabbing before the song has finished downloading.

Link to comment
Share on other sites

I mean examining the code, (and trying to figure out what it all does when mashed together so you update certain peices properly), and I'm trying to replace the failing grabMP3(). You know how it's picky and sometimes works, sometimes doesn't? I wanted to replace it with something better that'll actually work.

Why not fix grabMP3()?

What would you do differently in your implementation?

All the problems I heard about were caused by cluttered TEMP directories or grabbing before the song has finished downloading.

better detection on the files to find out which one is the one we want by checking last edited timestamps, instead of just keeping a list of the files in an array and just seeing which one was last added (bad idea when you change stations as often as I do) and i have no freakin idea how to set any of that up in java, so that's why I was saying go with something I know and just hijack the function fron PJ, also it's not a bad idea to check the filesize of the last edited file, and then wait 1 second and recheck it, so you can see if the first check was smaller than the second, you know the file is still downloading and you'll need to wait, and the first time you come up with 3 identical checks (3 seconds wait, in case their is some slowness with getting a last portion, unlikely but just to be sure), then we'll proceed to copy the file. the original build an array, toss the filenames in the array and see which was just added, was a horrid idea, however i can write that checker in no time flat in php, it's just integrating it into PJ

Link to comment
Share on other sites

For the timestamp, take a look at the call sortFilesByLastModified(joinedMp3s); in getJoinedPandoraMp3FilesInDecendingOrder()

Is this what you are thinking of?

Checking if the file is not changing size is a good idea.

Today I saw one reason why you might have problems. Pandora (not PJ) has a bug where the Firefox title bar is not updated with the current song name. For me, this occured when the song contained an apostrophe. PJ has no way of knowing if the title bar is correct. It just copies the newest mp3 with the name found in the title bar. It would be difficult to fix that. Maybe the best we could do is to copy the song name next to the grab button to make it clearer which name will be used.

Link to comment
Share on other sites

take a look at the call sortFilesByLastModified(joinedMp3s); in getJoinedPandoraMp3FilesInDecendingOrder()

Is this what you are thinking of?

Today I saw one reason why you might have problems. Pandora (not PJ) has a bug where the Firefox title bar is not updated with the current song name. For me, this occured when the song contained an apostrophe. PJ has no way of knowing if the title bar is correct. It just copies the newest mp3 with the name found in the title bar. It would be difficult to fix that. Maybe the best we could do is to copy the song name next to the grab button to make it clearer which name will be used.

i've been working with beta 4, since it was the most successful at all it did, i'll take another look at 7.3.1 to get back up to date with you guys, but that damned shifting issue, ugh. oh and to fix the apostrophe, change it to this `, same effect, different character, you can find it under the tilde (~)

Link to comment
Share on other sites

i've been working with beta 4, since it was the most successful at all it did, i'll take another look at 7.3.1 to get back up to date with you guys, but that damned shifting issue, ugh. oh and to fix the apostrophe, change it to this `, same effect, different character, you can find it under the tilde (~)

I cannot comment on beta 4 since I don't have it.

We can use the grave accent to replace the apostrophe, but PJ never got a chance to see the song name with the apostrophe, so that would not help.

Some day, we will need to fix the bug with artist names that contain an ampersand. This character is the parameter separator in a URL query string. The net effect is to truncact the artist or song name at the ampersand.

Link to comment
Share on other sites

Whenever my last.fm data is uploaded from the pandora.jar app it's sent with the wrong date and time.

In effect, the music I'm listening to NOW is being recorded as though I'm (will be) listening to it an hour in the future.

It's acting as though the pandora.jar app thinks I'm in a different timezone!

I've checked my system clock / calendar = it's correct.

Anybody have any ideas why this is happening? :?

Link to comment
Share on other sites

Whenever my last.fm data is uploaded from the pandora.jar app it's sent with the wrong date and time.

this issue was resolved a while back in the 7.4.1 realease. The add track logic was not using the UTC timezone when posting a track to last.fm. The code call now respects the expected timecode.

cheers

Link to comment
Share on other sites

i have gotten it all fully working with the latest version of everything..however when i click grab this track...it tries to get the song but always ends with saying: unable to rip MP3 unable to find file make sure you have Pandora running in a FIRFOX browser

i'm running in firefox. what else could the problem be, or has pandora just beefed up security?

Link to comment
Share on other sites

i have gotten it all fully working with the latest version of everything..however when i click grab this track...it tries to get the song but always ends with saying: unable to rip MP3 unable to find file make sure you have Pandora running in a FIRFOX browser

i'm running in firefox. what else could the problem be, or has pandora just beefed up security?

yup, same problem here.

Link to comment
Share on other sites

I don't know if anyone else has noticed this, but it looks like pandora is no longer cacheing the mp3s in the temp directory. I've had a look at all the places I thought it coulda gone to but with no success.

Usually you'd find plugtmp or similar in your %temp% directory. Now it doesn't seem to be anywhere.

I also watched the memory usage of firefox for a little bit and it seems to keep going up when pandora was running, the second you close the pandora tab, the memory usage plummets. Could it be that they're cacheing in memory?

Link to comment
Share on other sites

Guest t3chn0b0y
I don't know if anyone else has noticed this, but it looks like pandora is no longer cacheing the mp3s in the temp directory. I've had a look at all the places I thought it coulda gone to but with no success.

There was a comment about the new firefox using flash 9, requiring it.

I installed it and im still using flash 8.. Im still getting the files in

the temp directory,plugtmp.. no problems..

Link to comment
Share on other sites

Whenever my last.fm data is uploaded from the pandora.jar app it's sent with the wrong date and time.

this issue was resolved a while back in the 7.4.1 realease. The add track logic was not using the UTC timezone when posting a track to last.fm. The code call now respects the expected timecode.

cheers

I've looked back at the previous pages and it seems that all the posts which linked to version 7.4.1 have been editted to remove the link.

Anyone have any idea where I can get 7.4.1?

That's the version I was using until my PC crapped out on me and I had to reinstall.

It's typical that I didn't have a backup :(

Link to comment
Share on other sites

Could someone please upload a compiled version including barley!!!'s and the several other fixes?

I don't have the SDK on my notebook, which I'm using becourse my PC is broken at the moment. That would be very nice and I think many other users would be grateful as well! ;)

by the way for those looking for the "old" 7.4.1: wildandbad is online again! Get it from there and recompile with the fixes posted here. (and after you did that, upload it somewhere for me! :-P)

Link to comment
Share on other sites

Guest t3chn0b0y
by the way for those looking for the "old" 7.4.1: wildandbad is online again! Get it from there and recompile with the fixes posted here. (and after you did that, upload it somewhere for me! :-P)

Zoltan, you got us to 1000th message... :shock:

Hmm looking over 7.4.1 there is no build.xml .. so im unable to

compile it.

Link to comment
Share on other sites

I like to run firefox portable out of my usb drive. i installed pandora.jar in my c drive. i run the .bat file and then launch firefox portable and insert the http://localhost and pandoras jar launches and starts playing music. but when i try to grab mp3 files it gives me a error that i am not using firefox. i guess my question is has anybody gotten pandoras jar to work in firefox portable and if they have please post some instructions to do so.

Link to comment
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...