Giter Club home page Giter Club logo

frostwire's Introduction

The FrostWire Monorepo

Welcome to the main FrostWire repository. Here you will find the sources necessary to build FrostWire for Android and FrostWire for Desktop

  • /android Sources for FrostWire for Android
  • /desktop Sources for FrostWire for Desktop (Windows, Mac, Linux)
  • /common Common sources for the desktop and android client
  • /telluride Sources for our Telluride cloud video downloader

Coding Guidelines

5 Object Oriented Programming Principles learned during the last 15 years

  • Keep it simple, stupid. (KISS)
  • Do not repeat yourself. (DRY) Re-use your own code and our code. It'll be faster to code, and easier to maintain.
  • If you want to help, the Issue tracker is a good place to take a look at.
  • Try to follow our coding style and formatting before submitting a patch.
  • All pull requests should come from a feature branch created on your git fork. We'll review your code and will only merge it to the master branch if it doesn't break the build. If you can include tests for your pull request you get extra bonus points ;)
  • When you submit a pull request try to explain what issue you're fixing in detail and how you're fixing in detail it so it's easier for us to read your patches. If it's too hard to explain what you're doing, you're probably making things more complex than they already are. Look and test your code well before submitting patches.
  • We prefer well named methods and code re-usability than a lot of comments. Code should be self-explanatory.

Contribution Guidelines

If you want to contribute code, start by looking at the open issues on github.com.

If you want to fix a new issue that's not listed there, create the issue, see if we can discuss a solution.

Please follow the following procedure when creating features to avoid unnecessary rejections:

Do this the first time (Cloning & Forking):

git clone https://github.com/frostwire/frostwire
  • Make a Fork of the origin repo into your github account.
  • On your local copy, add your fork as a remote under your username as the remote alias.
cd frostwire
git remote add your_github_username_here https://github.com/your_github_username_here/frostwire

For further contributions

  • Create a branch with a descriptive name of the issue you are solving.
  • Make sure the name of your feature branch describes what you're trying to fix. If you don't know what to name it and there's an issue created for it, name your branch issue-233 (where 233 would be the number of the issue you're fixing).
  • Focus on your patch, do not waste time re-formatting code too much as it makes it hard to review the actual fix. Good patches will be rejected if there's too much code formatting noise, we are a very small team and we can't waste too much time reviewing if something got lost or added in the middle of hundreds of lines that got shifted.
  • Code, Commit, Push, Code, Commit, Push, until the feature is fully implemented.
  • If you can add tests to demonstrate the issue and the fix, even better.
  • Submit a pull request that's as descriptive as possible. Adding (issue #233) to the commit message or in PR comments automatically references them on the issue tracker.
  • We'll code review you, maybe ask you for some more changes, and after we've tested it we'll merge your changes.

If your branch has taken a while to be accepted for merging into master, it's very likely that the master branch will have moved forward while you work. In this case, make sure to sync your master.

git fetch upstream master

and then rebase your branch to bring it up to speed so it can be merged properly (do not merge master into your branch):

git checkout my-branch
git rebase origin/master

As you do this you may have to fix any possible conflicts, just follow the instruction git gives you if this is your first time.

Make sure to squash any cosmetic commits into the body of your work so that we don't pollute the history.

Repeat and rinse, if you send enough patches to demonstrate you have a good coding skills, we'll just give you commit access on the real repo and you will be part of the development team.

How to build

To build you will need the Java Developer Kit 19

Desktop

Go inside the desktop directory and follow the build instructions in the README.md file.

Additional Desktop requirements

gettext

If you want to work with the translation (i18n) bundles, you will need to install gettext to perform the text extraction and bundling tasks (gradle gettextExtract, gradle gettextBundle)

If you are on Mac, gettext installation is very simple with brew:

brew install gettext.

If you are on Ubuntu, gettext installation can be done with

sudo apt install gettext.

Windows developers

If you are developing in Windows we recommend you work with MinGW and install the gettext package.

We also recommend you use git for window's terminal instead of cmd.exe. All of our scripts will work as if you were working in Linux/Mac. Git's terminal supports window resizing, more convenient copying and pasting, Tab text completion, Ctrl+R reverse search, common bash keyboard shortcuts and basic GNU tools right out of the box.

Android

Build with Android studio or go inside the android directory and type: ./gradlew assembleDebug, debug builds will be created inside the android/build folder.

License

Frostwire Desktop and Frostwire Android are offered under the GNU General Public License.

Official FrostWire sites

Main Website Frostwire.com | Reddit Twitter @frostwire | Facebook | Discord Chatrooms | Tumblr

SourceForge Mirror

Download FrostWire Download FrostWire

frostwire's People

Contributors

adamszewe avatar aholicknight avatar aldenml avatar alejandroarturom avatar benhc123 avatar frostwire avatar grzesiekrzaca avatar gubatron avatar himanshusharma789 avatar humzini avatar ireun avatar janderssonse avatar jokerzww avatar kad3mlia avatar marcelinkaaa avatar muckachina avatar naofum avatar pierrezurek avatar serkan-maker avatar superusercode avatar tacothedank avatar votaguz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

frostwire's Issues

[android] #UX Automatically expand multiple file torrent transfer when adding file from same torrent

When an user downloads a partial torrent file from a torrent, then goes back to search results and adds another partial file from the same torrent, it's not obvious to the users that the file belongs to the same torrent and they think the old file is being downloaded again.

To avoid such confusion, we should probably auto-expand the transfer and highlight the file that's been added to the transfers screen.

This logic would most likely take place on TransfersFragment

[android] Inconsistent results from Bitsnoop

Inconsistent results between individual audio results and .torrent results. (e.g. A single torrent result appears with 20 sources)

It's yet to be determined if this bug is just the behavior of the app when not connected to WiFi.
More testing to be done.

Set a time interval for downloading [Feature Request] [enhancement]

Hello, i was looking for an Android torrent app that allows limiting download time between 12:00 am and 6:00 am because my ISP allowes unlimited quota duting that time. I think it should be an easy option to add and that many might benefit from it.
Thanks and great application.

IPv6 support

Hi guys,
Is Frostwire ready for switching to ipv6? Or at least are there any plans to fully support it?

[android-player] Remember randomly played songs.

Currently the player does not remember what song was played before in shuffle mode.
I'd be nice to implement a stack that gets popped to retrieve the last played audio file when the user hits 'previous' during shuffle mode. If user decides to go forward again, then the next song is again a random one.

[android] Search option on My Files

My Files folder looks just the same as Search files. So if you are like a newbie and you are trying to look for new content but on My Files folder (and not in FrostWire mainpage search), of course you won't see any results (you'll see a white screen).

screenshot_2015-12-05-21-29-01

What I want to mean is that both mainpage search and My files search look the same so a person that is starting using FrostWire could get confused. I think we need to have a message with a button or link on My Files that said something like this:

Couldn't find any files on your device under
"",

<[Search for "" on the Internet__]>

If you use FrostWire for first time and you go to My Files and try to look for files and not get any results, you are going to uninstall the app. Maybe we can give people this little information message.

[android] Lockscreen Wallpaper remains even after player stops.

Tested on Samsung S4/Android 5.0.1 with no SD Card without any screen lock apps/wallpaper apps.

When FrostWire is running, with the Player playing, paused, or stopped=exited, the phone's lock screen shows a track cover of last played artist. Once FrostWire is closed, the wallpaper disappears and reverts to system choice.

FIX: It should not be showing the wallpaper on lock screen either at all or at least not when player is not actively playing.

Several users reported as well. Cannot reproduce on Sony Xperia Z2/ Android 5.1.1. It has Sony Themes pre-installed and as default and I believe this is what's overwriting FrostWire in my case.

[android] BitTorrent turns itself on after connecting to Wi-Fi

Replicated multiple times on Sony Xperia Z2/ Android 5.1.1
I have disabled BitTorrent when on mobile data. When phone connects itself to any wi-fi network, the BItTorent turns on, automatically.

This does not happen when:

  • switching wi-fi networks
  • turning mobile data on and off
  • turning BitTorrent off while and wi-fi and then turning wi-fi off

Only thing that triggers it in my experience is connecting from no wi-fi to wi-fi and it does not matter if DHT is on or off and if Using BitTorrent on 3G/4G is on or off.

BTW - You have to exit and enter the screen again - the slider will not move from off to on with you looking at it. I guess it needs to refresh.

[desktop] Advanced Torrent Transfer Information

I'm thinking this should open a window you can keep open, in case you want to monitor several different torrents.

The pie in the sky vision, the window has tabs to display all the information/actions, these won't be implemented on the first release of course:

General Tab: Basic stats about torrent.

  • Trackers: Shows the trackers (also DHT, PEX, LSD). we could let users add/remove trackers here.
  • Files: Shows the files being downloaded for the torrent, their progress, and we could let users change the download priority for individual files (do not download, low, normal, high)
  • Peers: Table with peers connected to this swarm. Actions: Add new peer, copy peer ip:port, Limit download rate, limit upload rate, ban peer.
  • Download/Upload Speed graphic.

This one might have to wait until FrostWire 7 in the case of desktop.
WIP for android.

[android] Downloads are pausing for no apparent reason

I've completely uninstalled FrostWire from my device, cleared all files, installed from scratch.

I'm connected on Wi-Fi full signal, no other downloads, I start downloading the latest promos, including "Steal This Show" which is a .torrent we didn't create ourselves, and pretty much all downloads go to "Paused" state after a few seconds.

I've yet to do another test by running from source on master to see if this issue has gone away with the latest jlibtorrent binaries. My initial thoughts are that this may have something to do with Session parameter tunning on android.

However, @aldenml might have a better idea what may have introduced this issue.

Fixing this should be our #1 priority this week.

[desktop] Frostwire VS qBittorrent Speed

Hi guys, we are another opensource project willing to contribute to frostwire project.
We tested Frostwire versus other clients using libtorrent core library. We tested Frostwire VS Qbitorrent speed. The two clients should perform identically on paper, but as our tests reveal this is not happening.
In the 50% of cases, Frostwire was slower than Qbittorrent.
We would like to know if your team is willing to address the issue in the future.
Keep the great work!

Here are the tests: https://docs.google.com/spreadsheets/d/1au_M1NJQTz8tr9asoQk5U6SVcq-_NJtxZFqfjO2exxs/edit?usp=sharing5
As You can see, all test in red background means that Frostwire was slower than Qbit.
All green lines are were Frostwire was faster ๐Ÿ˜„
All test have a magnet link to reproduce the results.
p.s. ask me if yo need access to modify the datasheet.

[android] Show no more than one ad per every one successful download

We've had some users complaining they are seeding too many ads on top of things not working and erroring out/not progressing. I imagine this must be quite frustrating to see ads all the time and not get anything in return, sort of speak.

How to fix: I would see an additional condition that checks a number of completed downloads.
After second file is added to Transfers, check if at least one completed. If not, don't show the ad.
After 4th is added to Transfers & no ads were shown, check if at least 1 completed. If yes, show the ad. If no, don't show the ad.
After 4th is added to Transfers & one ad was shown, check if at least 2 completed. If yes, show the ad. If no, don't show the ad. etc

The logic would basically show no more than one ad every one successful download AND at most every second addition to Transfers.

Hope that makes sense.

Compile time errors

Today I downloaded the ;latest source code for frostwire-common repository and set up in Eclipse IDE. with other dependent jar files. But I am getting compile time errors as. One such file is

com.frostwire.bittorrent.BTDownload.java ->
private void serializeResumeData(SaveResumeDataAlert alert) {
try {
if (th.isValid()) {
String infoHash = th.getInfoHash().toString();
File file = engine.resumeDataFile(infoHash);

            Entry e = alert.resumeData(); // getting compile time error as this method is not available

            e.getSwig().dict().set(EXTRA_DATA_KEY, Entry.fromMap(extra).getSwig());

            FileUtils.writeByteArrayToFile(file, e.bencode());
        }
    } catch (Throwable e) {
        LOG.warn("Error saving resume data", e);
    }
}

Please let me know if I need to download any other jar files

Thanks

Unni

When opening torrent site link from within client, add possibility to choose browser

User feature request:

"Can you please add the facility for users to choose which browser they want to open links for torrent details, etc. in rather than just using the system default. As many users may be logged-in to their default browser, thereby providing details of their identity, by having no choice but to use that browser it negates them using a VPN for privacy to a very large extent. "

[android] When opening My Music for the first time it should show "Last Added" tab, after that the application should remember

If you've never played a song and the first thing you did was to download a song, the first time you open the Music Player you will see an empty list because you've never played anything.

At this moment you should be displayed the "Last Added" tab.

Then, from there on, we should keep track of what was the last tab touched on an internal setting variable (See PreferenceUtils.java which is where it seems apollo keeps its preferences, there seems to be something related setStartPage()).

Classes to look at inside android/apollo:
ProfileActivity.java, PagerAdapter.java, MusicBrowserPhoneFragment.java

CC: @votaguz @alejandroarturom (@arubinofaux wanna do some android?)

$15 bounty for merged pull request to be paid in Bitcoin at the exchange rate of the day on Bitven.com

[android] SD Card storage support for Lollypop (Android 5.x users)

Seeing if we can work/hack around the limitations added when interacting with files thanks to the insane SAF architecture/api, which thankfully went away in Android 6.0, they came back to their senses.

The hardest part, at least we thought it was the hardest, was bridging the advanced native file access done by jlibtorrent given that you can't just do new File() on sd card folders and you have to go through all these abstractions to get a writeable file handle we eventually can give to the jlibtorrent layer.

Now we're dealing with HTTP transfers and we figured that there's no formal "Move" operation with SAF, so we're looking at some workarounds.

Search option on My Files

My Files folder looks just the same as Search files. So if you are like a newbie and you are trying to look for new content but on My Files folder (and not in FrostWire mainpage search), of course you won't see any results (you'll see a white screen).

screenshot_2015-12-05-21-29-01

What I want to mean is that both mainpage search and My files search look the same so a person that is starting using FrostWire could get confused. I think we need to have a message with a button or link on My Files that said something like this:

Couldn't find any files on your device under
"",

<[Search for "" on the Internet__]>

If you use FrostWire for first time and you go to My Files and try to look for files and not get any results, you are going to uninstall the app. Maybe we can give people this little information message.

[android-ux] Automatically expand multiple file torrent transfer when adding file from same torrent ($35 bounty)

When an user downloads a partial torrent file from a torrent, then goes back to search results and adds another partial file from the same torrent, it's not obvious to the users that the file belongs to the same torrent and they think the old file is being downloaded again.

To avoid such confusion, FrostWire should auto-expand the existing transfer to which this file belongs to and highlight the file that's been added on the transfers screen.

Note: Take a look at the fragment switching logic, it might be the place to include the hint for the transfer fragment list view to expand the parent and highlight the child.

There's now a $35 bounty on this issue.

how to get a youtube download url bypass IP access restrictions

when i use the YouTubeExtractor of frostwire to get the youtube download url,but i can't be used by other ip(youtube return 403).I have found some other website can get the url by web server,also the url includes ip param,but their can be use to download everywhere.I wonder how they do it.can you give me some solution,thanks!

[android-player] Creating a New Playlist from Album does not add Album's tracks

Tested on
FW Basic 1.6.8 build 227, Samsung S4/Android 5.0.1
FW Plus build 228, Sony Xperia Z2/ Android 5.1.1.

Behavior
Creating a New Playlist when in My Music under Album, Recent, Artists or any screen that shows tracks in aggregate does create a Playlist, but does not add tracks from that screen to the Playlist. Playlist is empty.

Steps to Reproduce

  1. Go to My Music > Albums
  2. Tap on any album
  3. Select Menu from upper right corner > choose New Playlist
  4. Name Playlist and tap OK.
  5. Scroll back to Playlists & Check your newly created playlist

Additional Observations

  1. The same thing happens on both phones
  2. The same thing happens regardless of file format
  3. Adding individual files to a New Playlist works fine
  4. Adding individual files to an already existing Playlist works fine

[android] Remove iCCP warnings on these 4 images.

AAPT: /Users/gubatron/workspace.frostwire/frostwire/android/res/drawable-hdpi/artwork_default_menuitem.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
AAPT: /Users/gubatron/workspace.frostwire/frostwire/android/res/drawable-hdpi/love_over.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
AAPT: /Users/gubatron/workspace.frostwire/frostwire/android/res/drawable-hdpi/love.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
AAPT: /Users/gubatron/workspace.frostwire/frostwire/android/res/drawable-hdpi/google_plus.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited

[android] Excessive Data Consumption

When FrostWire is running, it consumes too much data, even with no active Transfers (downloading or seeding).

Tested in 1hr, consumed 2MB. Users report Gigabytes of data over longer periods of time.

FIX: When not actively downloading or seeding, there should be no additional data consumption, even for connecting to the network. Having have to turn BitTorrent or DHT off during idle time should not be a solution to this issue.

Even though technically not a bug, in from technical standpoint, it's important enough to the users I have marked as such and should be treated as such.

[android] When 3G/4G savings is on, Bittorrent is not stopping automatically when we leave WiFi network.

The BitTorrent connectivity button is not showing the real connection status of BitTorrents on FrostWire.

This is what happen when loosing connectivity:

NO WiFi - NO 3G/4G --> Connection status should be OFF but remains ON

  1. Go to FW Settings and check 'BitTorrent connection status is 'On' and within Torrent Settings the option 'Use 3G/4G for BitTorrent is inactive

  2. Then turn off your device WiFi connection

  3. Go back to FW main menu Settings and see if the BitTorrent connection status is still "On" it should be Off since '3G/4G for BitTorrent' is inactive and there is no WiFi.

[common] Add new "Jamendo Music" as a search source.

Jamendo has finally announced their new big update, they're rebranding as "Jamendo Music"
with lots of Creative Commons tracks to offer for free download and sharing.

I'm currently performing in-browser tests of their read-only API which should be about everything we'd need.

I'll be creating 3 apps in their developer dashboard: android-plus, android-basic, desktop.

The Jamendo search performer should use each AppID accordingly depending on the context where it's used.

[android] Mysterious crash with touch handler on `My Files`

A few crashlogs let me see it had something to do with an uninitialized touch handler. I've put a try/catch on a parent abstract class to prevent the crash but the source of the problem remains a mystery.

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference
    at android.widget.AbsListView.obtainView(AbsListView.java:2486)
    at android.widget.ListView.makeAndAddView(ListView.java:1864)
    at android.widget.ListView.fillDown(ListView.java:698)
    at android.widget.ListView.fillFromTop(ListView.java:759)
    at android.widget.ListView.layoutChildren(ListView.java:1659)
    at android.widget.AbsListView.onLayout(AbsListView.java:2274)
    at android.view.View.layout(View.java:15767)
    at android.view.ViewGroup.layout(ViewGroup.java:5053)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
    at android.view.View.layout(View.java:15767)
    at android.view.ViewGroup.layout(ViewGroup.java:5053)
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
    at android.view.View.layout(View.java:15767)
    at android.view.ViewGroup.layout(ViewGroup.java:5053)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
    at android.view.View.layout(View.java:15767)
    at android.view.ViewGroup.layout(ViewGroup.java:5053)
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
    at android.view.View.layout(View.java:15767)
    at android.view.ViewGroup.layout(ViewGroup.java:5053)
    at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1043)
    at android.view.View.layout(View.java:15767)
    at android.view.ViewGroup.layout(ViewGroup.java:5053)
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
    at android.view.View.layout(View.java:15767)
    at android.view.ViewGroup.layout(ViewGroup.java:5053)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
    at android.view.View.layout(View.java:15767)
    at android.view.ViewGroup.layout(ViewGroup.java:5053)
    at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:494)
    at android.view.View.layout(View.java:15767)
    at android.view.ViewGroup.layout(ViewGroup.java:5053)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
    at android.view.View.layout(View.java:15767)
    at android.view.ViewGroup.layout(ViewGroup.java:5053)
    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2229)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1963)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1138)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6154)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:792)
    at android.view.Choreographer.doCallbacks(Choreographer.java:596)
    at android.view.Choreographer.doFrame(Choreographer.java:557)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:778)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:155)
    at android.app.ActivityThread.main(ActivityThread.java:5725)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1030)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:825)

[desktop] Create a Playlist - Files are not being imported to the Playlist

OS: Mac OS 10.10, Windows XP, 10 and 8
**FrostWire version 6.1.6 (build 167)
Screen: Library
Test: Create a new Playlist
Ref. L-Play-1

Observations:

On Windows:

  • When dragging and dropping files to create a playlist from scratch the files are not being placed on the Playlist.
  • If I drag and drop files to an existing Playlist then the entire list of files just disappears.

On Mac:

  • If I drag and drop files to an existing Playlist then the entire list of files just disappears.
  • When dragging and dropping files to create a playlist from scratch the app freezes and I cannot close, cancel or exit the "Playlist name creation"

Here the log:
Ninja - Slow Mournings - Free FrostWire Mixtape.mp3]
Nov 09, 2015 8:12:52 PM org.jaudiotagger.tag.id3.AbstractID3v2Frame readIdentifier
WARNING: 05 Shinobi Ninja - Slow Mournings - Free FrostWire Mixtape.mp3:No space to find another frame:
Nov 09, 2015 8:12:52 PM org.jaudiotagger.tag.id3.ID3v23Tag readFrames
WARNING: 05 Shinobi Ninja - Slow Mournings - Free FrostWire Mixtape.mp3:Invalid Frame:05 Shinobi Ninja - Slow Mournings - Free FrostWire Mixtape.mp3:No space to find another frame
-> get_property LENGTH
-> get_property SUB
-> get_property ASPECT
-> get_property WIDTH
-> get_property HEIGHT
-> get_property VOLUME
-> pause
Nov 09, 2015 8:12:57 PM org.jaudiotagger.tag.id3.AbstractID3v2Frame readIdentifier
WARNING: 03 Shinobi Ninja - Gloom Doom - Free FrostWire Mixtape.mp3:No space to find another frame:
Nov 09, 2015 8:12:57 PM org.jaudiotagger.tag.id3.ID3v23Tag readFrames
WARNING: 03 Shinobi Ninja - Gloom Doom - Free FrostWire Mixtape.mp3:Invalid Frame:03 Shinobi Ninja - Gloom Doom - Free FrostWire Mixtape.mp3:No space to find another frame
Nov 09, 2015 8:13:00 PM org.jaudiotagger.tag.id3.AbstractID3v2Frame readIdentifier
WARNING: 03 Shinobi Ninja - Gloom Doom - Free FrostWire Mixtape.mp3:No space to find another frame:
Nov 09, 2015 8:13:00 PM org.jaudiotagger.tag.id3.ID3v23Tag readFrames
WARNING: 03 Shinobi Ninja - Gloom Doom - Free FrostWire Mixtape.mp3:Invalid Frame:03 Shinobi Ninja - Gloom Doom - Free FrostWire Mixtape.mp3:No space to find another frame
org.h2.jdbc.JdbcSQLException: Error creating or initializing trigger "FTL_PLAYLISTITEMS" object, class "org.h2.fulltext.FullTextLucene2$FullTextTrigger", cause: "org.h2.message.DbException: Class ""org.h2.fulltext.FullTextLucene2$FullTextTrigger"" not found [90086-186]"; see root cause for details [90043-186]
at org.h2.message.DbException.getJdbcSQLException(Unknown Source)
at org.h2.message.DbException.get(Unknown Source)
at org.h2.schema.TriggerObject.load(Unknown Source)
at org.h2.schema.TriggerObject.fireRow(Unknown Source)
at org.h2.table.Table.fireRow(Unknown Source)
at org.h2.table.Table.fireAfterRow(Unknown Source)
at org.h2.engine.UndoLogRecord.undo(Unknown Source)
at org.h2.engine.Session.rollbackTo(Unknown Source)
at org.h2.command.Command.executeUpdate(Unknown Source)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(Unknown Source)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(Unknown Source)
at com.frostwire.alexandria.db.LibraryDatabase.update(Unknown Source)
at com.frostwire.alexandria.db.LibraryDatabase.update(Unknown Source)
at com.frostwire.alexandria.db.LibraryDatabase.insert(Unknown Source)
at com.frostwire.alexandria.db.PlaylistItemDB.save(Unknown Source)
at com.frostwire.alexandria.PlaylistItem.save(Unknown Source)
at com.frostwire.gui.library.LibraryUtils.addPlaylistItem(Unknown Source)
at com.frostwire.gui.library.LibraryUtils.addToPlaylist(Unknown Source)
at com.frostwire.gui.library.LibraryUtils.access$600(Unknown Source)
at com.frostwire.gui.library.LibraryUtils$8.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.h2.message.DbException: Class "org.h2.fulltext.FullTextLucene2$FullTextTrigger" not found [90086-186]
at org.h2.message.DbException.get(Unknown Source)
at org.h2.util.JdbcUtils.loadUserClass(Unknown Source)
... 19 more
Caused by: org.h2.jdbc.JdbcSQLException: Class "org.h2.fulltext.FullTextLucene2$FullTextTrigger" not found [90086-186]
at org.h2.message.DbException.getJdbcSQLException(Unknown Source)
... 21 more
Caused by: java.lang.ClassNotFoundException: org.h2.fulltext.FullTextLucene2$FullTextTrigger
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
... 20 more
Nov 09, 2015 8:13:01 PM org.jaudiotagger.tag.id3.AbstractID3v2Frame readIdentifier
WARNING: 02 Shinobi Ninja - What If Times - Free FrostWire Mixtape.mp3:No space to find another frame:
Nov 09, 2015 8:13:01 PM org.jaudiotagger.tag.id3.ID3v23Tag readFrames
WARNING: 02 Shinobi Ninja - What If Times - Free FrostWire Mixtape.mp3:Invalid Frame:02 Shinobi Ninja - What If Times - Free FrostWire Mixtape.mp3:No space to find another frame
org.h2.jdbc.JdbcSQLException: Error creating or initializing trigger "FTL_PLAYLISTITEMS" object, class "org.h2.fulltext.FullTextLucene2$FullTextTrigger", cause: "org.h2.message.DbException: Class ""org.h2.fulltext.FullTextLucene2$FullTextTrigger"" not found [90086-186]"; see root cause for details [90043-186]
at org.h2.message.DbException.getJdbcSQLException(Unknown Source)
at org.h2.message.DbException.get(Unknown Source)
at org.h2.schema.TriggerObject.load(Unknown Source)
at org.h2.schema.TriggerObject.fireRow(Unknown Source)
at org.h2.table.Table.fireRow(Unknown Source)
at org.h2.table.Table.fireAfterRow(Unknown Source)
at org.h2.engine.UndoLogRecord.undo(Unknown Source)
at org.h2.engine.Session.rollbackTo(Unknown Source)
at org.h2.command.Command.executeUpdate(Unknown Source)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(Unknown Source)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(Unknown Source)
at com.frostwire.alexandria.db.LibraryDatabase.update(Unknown Source)
at com.frostwire.alexandria.db.LibraryDatabase.update(Unknown Source)
at com.frostwire.alexandria.db.LibraryDatabase.insert(Unknown Source)
at com.frostwire.alexandria.db.PlaylistItemDB.save(Unknown Source)
at com.frostwire.alexandria.PlaylistItem.save(Unknown Source)
at com.frostwire.gui.library.LibraryUtils.addPlaylistItem(Unknown Source)
at com.frostwire.gui.library.LibraryUtils.addToPlaylist(Unknown Source)
at com.frostwire.gui.library.LibraryUtils.access$600(Unknown Source)
at com.frostwire.gui.library.LibraryUtils$8.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.h2.message.DbException: Class "org.h2.fulltext.FullTextLucene2$FullTextTrigger" not found [90086-186]
at org.h2.message.DbException.get(Unknown Source)
at org.h2.util.JdbcUtils.loadUserClass(Unknown Source)
... 19 more
Caused by: org.h2.jdbc.JdbcSQLException: Class "org.h2.fulltext.FullTextLucene2$FullTextTrigger" not found [90086-186]
at org.h2.message.DbException.getJdbcSQLException(Unknown Source)
... 21 more
Caused by: java.lang.ClassNotFoundException: org.h2.fulltext.FullTextLucene2$FullTextTrigger
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
... 20 more
org.h2.jdbc.JdbcSQLException: Error creating or initializing trigger "FTL_PLAYLISTITEMS" object, class "org.h2.fulltext.FullTextLucene2$FullTextTrigger", cause: "org.h2.message.DbException: Class ""org.h2.fulltext.FullTextLucene2$FullTextTrigger"" not found [90086-186]"; see root cause for details [90043-186]
at org.h2.message.DbException.getJdbcSQLException(Unknown Source)
at org.h2.message.DbException.get(Unknown Source)
at org.h2.schema.TriggerObject.load(Unknown Source)
at org.h2.schema.TriggerObject.fireRow(Unknown Source)
at org.h2.table.Table.fireRow(Unknown Source)
at org.h2.table.Table.fireAfterRow(Unknown Source)
at org.h2.engine.UndoLogRecord.undo(Unknown Source)
at org.h2.engine.Session.rollbackTo(Unknown Source)
at org.h2.command.Command.executeUpdate(Unknown Source)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(Unknown Source)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(Unknown Source)
at com.frostwire.alexandria.db.LibraryDatabase.update(Unknown Source)
at com.frostwire.alexandria.db.LibraryDatabase.update(Unknown Source)
at com.frostwire.alexandria.db.LibraryDatabase.insert(Unknown Source)
at com.frostwire.alexandria.db.PlaylistItemDB.save(Unknown Source)
at com.frostwire.alexandria.PlaylistItem.save(Unknown Source)
at com.frostwire.alexandria.db.PlaylistDB.save(Unknown Source)
at com.frostwire.alexandria.Playlist.save(Unknown Source)
at com.frostwire.gui.library.LibraryUtils$8.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.h2.message.DbException: Class "org.h2.fulltext.FullTextLucene2$FullTextTrigger" not found [90086-186]
at org.h2.message.DbException.get(Unknown Source)
at org.h2.util.JdbcUtils.loadUserClass(Unknown Source)
... 18 more
Caused by: org.h2.jdbc.JdbcSQLException: Class "org.h2.fulltext.FullTextLucene2$FullTextTrigger" not found [90086-186]
at org.h2.message.DbException.getJdbcSQLException(Unknown Source)
... 20 more
Caused by: java.lang.ClassNotFoundException: org.h2.fulltext.FullTextLucene2$FullTextTrigger
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
... 19 more
org.h2.jdbc.JdbcSQLException: Error creating or initializing trigger "FTL_PLAYLISTITEMS" object, class "org.h2.fulltext.FullTextLucene2$FullTextTrigger", cause: "org.h2.message.DbException: Class ""org.h2.fulltext.FullTextLucene2$FullTextTrigger"" not found [90086-186]"; see root cause for details [90043-186]
at org.h2.message.DbException.getJdbcSQLException(Unknown Source)
at org.h2.message.DbException.get(Unknown Source)
at org.h2.schema.TriggerObject.load(Unknown Source)
at org.h2.schema.TriggerObject.fireRow(Unknown Source)
at org.h2.table.Table.fireRow(Unknown Source)
at org.h2.table.Table.fireAfterRow(Unknown Source)
at org.h2.engine.UndoLogRecord.undo(Unknown Source)
at org.h2.engine.Session.rollbackTo(Unknown Source)
at org.h2.command.Command.executeUpdate(Unknown Source)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(Unknown Source)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(Unknown Source)
at com.frostwire.alexandria.db.LibraryDatabase.update(Unknown Source)
at com.frostwire.alexandria.db.LibraryDatabase.update(Unknown Source)
at com.frostwire.alexandria.db.LibraryDatabase.insert(Unknown Source)
at com.frostwire.alexandria.db.PlaylistItemDB.save(Unknown Source)
at com.frostwire.alexandria.PlaylistItem.save(Unknown Source)
at com.frostwire.alexandria.db.PlaylistDB.save(Unknown Source)
at com.frostwire.alexandria.Playlist.save(Unknown Source)
at com.frostwire.gui.library.LibraryUtils$8.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.h2.message.DbException: Class "org.h2.fulltext.FullTextLucene2$FullTextTrigger" not found [90086-186]
at org.h2.message.DbException.get(Unknown Source)
at org.h2.util.JdbcUtils.loadUserClass(Unknown Source)
... 18 more
Caused by: org.h2.jdbc.JdbcSQLException: Class "org.h2.fulltext.FullTextLucene2$FullTextTrigger" not found [90086-186]
at org.h2.message.DbException.getJdbcSQLException(Unknown Source)
... 20 more
Caused by: java.lang.ClassNotFoundException: org.h2.fulltext.FullTextLucene2$FullTextTrigger
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
... 19 more
Nov 09, 2015 8:13:50 PM org.jaudiotagger.tag.id3.AbstractID3v2Frame readIdentifier
WARNING: 03 Shinobi Ninja - Gloom Doom - Free FrostWire Mixtape.mp3:No space to find another frame:
Nov 09, 2015 8:13:50 PM org.jaudiotagger.tag.id3.ID3v23Tag readFrames
WARNING: 03 Shinobi Ninja - Gloom Doom - Free FrostWire Mixtape.mp3:Invalid Frame:03 Shinobi Ninja - Gloom Doom - Free FrostWire Mixtape.mp3:No space to find another frame
Nov 09, 2015 8:13:50 PM org.jaudiotagger.tag.id3.AbstractID3v2Frame readIdentifier
WARNING: 02 Shinobi Ninja - What If Times - Free FrostWire Mixtape.mp3:No space to find another frame:
Nov 09, 2015 8:13:50 PM org.jaudiotagger.tag.id3.ID3v23Tag readFrames
WARNING: 02 Shinobi Ninja - What If Times - Free FrostWire Mixtape.mp3:Invalid Frame:02 Shinobi Ninja - What If Times - Free FrostWire Mixtape.mp3:No space to find another frame

webgui or web api

Hi guys, first of all I would like to congratulate for the great open-source project.

Are there any plans to implement a web interface?
Is there some other way to use Frostwire as an headless client?

[android] Better UX when demuxing large video files

The ideal experience should show something like:

Demuxing 44%

as the file is being demuxed.

If this is not possible, we should an additional message telling the user it will take long in the event we know it's a rather large file.

[desktop] "Repeat songs" mode not working for Playlists.

Playlists are not looping as expected when "Repeat songs" mode is on.

screen shot 2016-01-11 at 12 24 12 pm

To reproduce, start a playlist's last song, fast forward all the way to the end, when the song ends playing, the first song of the playlist isn't played.

This Issue has $15 bounty in Bitcoin paid at the exchange rate of the moment the patch gets merged.

[android] 'Stop and Delete Data' from Transfers does not delete .torrent file

Tested on
FW Basic 1.6.8 build 227, Samsung S4/Android 5.0.1 with no SD Card. Downloading to Internal, Folder Downloads & default.
FW Plus build 226 & 228, Sony Xperia Z2/ Android 5.1.1. Downloading to SD Card & Internal default locations

Behavior
Choosing 'Stop and Delete Data' from Transfers does not delete .torrent file

Steps to Reproduce

  1. Tap Download on anything from BitTorrent
  2. Go to Transfers
  3. Tap on actively downloading file & select 'Stop and Delete Data' > tap OK on 'Are you sure you want to cancel this download (downloaded data so far will be erased)?

Additional Observations

  1. The same thing happens on both phones
  2. The same thing happens when downloading to SD Card or Internal Memory
  3. Cloud Downloads delete correctly

[common] Archive.org broken ($15 bounty - backed)

Bountysource

This should be as simple as taking a look at changes in the JSON output of the Archive.org API and updating our respective objects to match whatever they have changed.

If it's any more complex it could be only because they've changed the REST URL structures and then it's a matter of changing URLs.

FrostWire version 6.1.7 build 168
Nov 18, 2015 2:45:50 PM com.frostwire.search.PagedWebSearchPerformer 
INFO: Error searching page: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1011 path $.response.docs[0].subject
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1011 path $.response.docs[0].subject
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(Unknown Source)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(Unknown Source)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(Unknown Source)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(Unknown Source)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(Unknown Source)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(Unknown Source)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(Unknown Source)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(Unknown Source)
at com.google.gson.Gson.fromJson(Unknown Source)
at com.google.gson.Gson.fromJson(Unknown Source)
at com.google.gson.Gson.fromJson(Unknown Source)
at com.google.gson.Gson.fromJson(Unknown Source)
at com.frostwire.util.JsonUtils.toObject(Unknown Source)
at com.frostwire.search.archiveorg.ArchiveorgSearchPerformer.searchPage(Unknown Source)
at com.frostwire.search.PagedWebSearchPerformer.searchPage(Unknown Source)
at com.frostwire.search.PagedWebSearchPerformer.perform(Unknown Source)
at com.frostwire.search.SearchManagerImpl$PerformTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1011 path $.response.docs[0].subject
at com.google.gson.stream.JsonReader.beginArray(Unknown Source)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(Unknown Source)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(Unknown Source)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(Unknown Source)
... 20 more

Perhaps @votaguz or @X-NicON might want to take a look?

Starting point to look is at com.frostwire.search.archiveorg.ArchiveorgSearchPerformer.searchPage and its related classes.

[android] Empty files when you do a search

There are some reviews on Google Play about people complaining that they found sometimes empty files when they download a song.

I think maybe we can filter these results. If the file size < 100kb, it doesn't appear in the results.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.