Giter Club home page Giter Club logo

ultrasonic's Introduction

WE HAVE MOVED

Ultrasonic code is now hosted in GitLab.

Ultrasonic

Ultrasonic is free and open-source music streaming Android client for Subsonic API (version 1.7.0 or higher) compatible servers.

Help wanted

We currently don't have that much time to spend developing Subsonic, so any contributions or active developers are always welcomed. Have a look at CONTRIBUTING to get started.

Download

App is available to download at following stores:

Get it on Google Play Get it on F-Droid Get it on GitLab

Warning: All three versions (Google Play, F-Droid and the APKs) are not compatible (not signed by the same key)! You must uninstall one to install the other, which will delete all your data.

If you want to use the version downloaded from F-Droid or from GitLab with Android Auto, you must enable Unknown Sources as it is described in this wiki page.

Bugs and issues

First, see if your issue haven’t been yet reported here, otherwise open a new issue.

Known (not our) bugs

If you are using Madsonic 5.1.X several sections of Ultrasonic will not work. This is caused by bad implementation of Subsonic API by Madsonic. For more info about this you can read this bug.

Contributing

See CONTRIBUTING.

Supported (tested) Subsonic API implementations

Other Subsonic API implementations should work as well as long as they follow API documentation.

License

This software is licensed under the terms of the GNU General Public License version 3 (GPLv3).

Full text of the license is available in the LICENSE file and online.

ultrasonic's People

Contributors

ogarcia 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

ultrasonic's Issues

Question about Ultrasonic usage

Its not a bug but a help request.

Im going to travel this weekend and I want to use Ultrasonic offline. I would like to download 2 or 3 entire albums to listen to them in this trip.

I know I may play them before this trip and they will be available offline. But I dont want to listen to them before because it will take several hours.

What can I do to solve that? Im using lastest version of Ultrasonic and Ampache Server

Sync issue - music must be re-synced but still on phone and playlist shows files present

Problem description

I have a Subsonic server running 6.1.1 on Linux Mint 18.1. I have a external IP address and LAN address for the same Subsonic server. When I sync using the LAN IP, sometimes the music is showing as no longer synced. The playlist still shows all the songs I synced, the files are still on the phone (viewing with Root Explorer), but Ultrasonic shows that the files must be re-synced and once I get back on WIFI, the synching process begins.

Steps to reproduce

Good question since it doesn't happen all the time.

System information

  • Ultrasonic version: 2.1
  • Android version: 5.1
  • Device info: HTC M7

Add versioning plugin

To be able automate publishing app (see #84) versioning should be also automated by gradle plugin.

Subsonic api authentication fail for ldap users

Problem description

Subsonic api responses with "message" : "Token authentication not supported for LDAP users" when app tries to authenticate ldap user on the server. This behaviour differs from api description: it says that staring api level 1.13.0 app recommended auth way is using tokens.

Logs from app:

--> GET https://server-url/rest/getLicense.view?u=guestldap&c=UltraSonic%2520for%2520Android&f=json&v=1.16.0&t=token&s=salt
--> END GET
<-- 200 OK https://server-url/rest/getLicense.view?u=guestldap&c=UltraSonic%2520for%2520Android&f=json&v=1.16.0&t=token&s=salt (63ms)
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=UTF-8
Content-Length: 220
Server: Jetty(6.1.x)
{
    "subsonic-response" : {
       "status" : "failed",
       "version" : "1.16.0",
       "error" : {
          "code" : 41,
          "message" : "Token authentication not supported for LDAP users"
       }
    }
 }
<-- END HTTP (220-byte body)

Steps to reproduce

  1. Create ldap user
  2. Try to authenticate

Additional notes

Related to #99 - discovered during testing fix for linked issue.

Add android lint checks

Android lint allows to generate baseline to exclude current issues, but for the new code this checks should run.

FR: Select multiple albums

Hi

At the moment one cant select multiple albums to add to playlists. It would be very helpful if the user can select multiple albums in all album views and add them to the playlist.

thanks

error happens when use multi byte string

Problem description

Sorry for my bad english. I use ultrasonic for my Ampache server. There are many musics, artists and albums named in japanese because I'm japanese.

But error happens when I try to open artists and albums named in japanese.

A network error occurred. Please check the server address or try again later.

I can open them named with english.

I can't search with japanese but I can search with english.

Steps to reproduce

I think this error occurres when send requests included multi byte string to server.

System information

  • Ultrasonic version: 2.1.0
  • Android version: 5.1.1
  • Device info: Fujitsu Arrows RM02

Video playback issue

Problem description

I cannot navigate into a video played from ultrasonic with VLC (the progression bar is stuck a the beginning)

Steps to reproduce

read a video content from ultrasonic

System informations

  • Ultrasonic version: 2.0.0
  • Android version: 7.1.2
  • Device info: Xiaomi Redmi 4x

Failed to parse MusicFolder

Some server responded with following response for getMusicFolder call:

{
 "subsonic-response": {
  "musicFolders": {
   "musicFolder": [
    {
     "id": "1b2a156d-56da-4705-8f1c-fb68752cbb91",
     "name": "Music"
    }
   ]
  },
  "status": "ok",
  "version": "1.8.0"
 }
}

App failed to parse it:

2-11 14:58:10.511 5618-5670/org.moire.ultrasonic W/ShufflePlayBuffer: Failed to refill shuffle play buffer.
                                                                       com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `long` from String "ce2326c6-ebc5-4db3-b975-7a4b3ca16e88": not a valid Long value
                                                                           at [Source: (okhttp3.ResponseBody$BomAwareReader); line: 10, column: 18] (through reference chain: org.moire.ultrasonic.api.subsonic.response.GetRandomSongsResponse["randomSongs"]->org.moire.ultrasonic.api.subsonic.response.RandomSongsWrapper["song"]->java.util.ArrayList[0]->org.moire.ultrasonic.api.subsonic.models.MusicDirectoryChild["artistId"])
                                                                           at com.fasterxml.jackson.databind.DeserializationContext.weirdStringException(DeserializationContext.java:1535)

Support video playback

After changes from #9 video playback is no longer working.

App should use api steam() call to receive video stream and pass it to the VideoPlayer.

Better feedback to user on unsupported API error

At this moment, when an user have a server with API level lower than any functionality available in Ultrasonic client, they receive the generic error A network error ocurred. Please check the server address or try again. that may seem a client error and not a server unsupported fuction.

In logcat our API detects well the error and shows the message Server api VX_X_X does not support this call. It would be a good idea show this mesage to user. It can be a translatable string Server api %1$s does not support this function.

Add code coverage

Should add code coverage metric to see changes in time.

As now main goal is to rewrite to kotlin - we should enable code coverage only for kotlin code.

Optional: badge in README.md

F-Droid build?

I've submitted a merge request for this app to be included in F-Droid, a Free and Open Source Android App Repository. Please let me know (or make a comment on the MR) if you're comfortable with this inclusion or not.

API change? JSON?

I see that the requests issues by Ultrasonic now seem to have "f=json", is that due to an upgrade to protocol 1.7.0?
I'm running davidgfnet/supersonic-cpp and of course it fails due to output being XML-only :(
My server is (in theory) version 1.4, I guess I need to upgrade it to 1.7.0 then? Or is it enough to downgrade it to 1.3 so the Ultrasonic doesn't try to use json but xml instead?
Thanks!

Subsonic API doesn't parse error well

Problem description

I've noticed that Subsonic api implementation always parses api into generic with code 0.

Steps to reproduce

  • Use wrong username/password
  • Subsonic api will produce SubsonicError.GENERIC while it should be SubsonicError.WRONG_USERNAME_OR_PASSWORD

Additional notes

Required for #121

FR: Stay in Place

Hi

Personally, one thing bothers me about all the s sonics players is that everytime I click on a song to play they all goto the main playing now screen. While that is nice and dandy maybe that is not what all users wants.

I really hope that the devs could add an option to keep the player where it is during song explorations.

I use US and DSUB together It think they both compliement eachother some ways and I love both of these apps but this is one thing I hate about both of these apps as a user, not a deal breaker but just annoying if youw ill.

Thanks

Support "all songs" in offline mode

Problem description

I recently migrated from Google Play Music to Airsonic+Ultrasonic, and I miss the "Songs" view. While Songs->Random and Songs->Starred are possible while online, there is no similar view for Offline Songs.

When offline, I'd like to get a playlist of everything I have cached and listen to it. A simple "All Artists" at the top of Media Library in offline view might work

Steps to reproduce

  • Switch to offline.
  • Try playing all offline songs across all artists.

System information

  • Ultrasonic version: 2.1.0
  • Android version: 7.1.1
  • Device info: Moto Z Play

stray ">" in mp3 file list

All my mp3s are showing up as "(320 kbps mp3 > )" (the 320 is just an example, the correct bitrate is shown). It looks like the stray ">" comes from ultrasonic/src/main/java/org/moire/ultrasonic/view/SongView.java and is intended to show that the file was transcoded. But these are just plain mp3 files; some I ripped myself (CD->wav->mp3) and some are purchased. I'm using supysonic, latest github master, with no transcoding configured.

System information

  • Ultrasonic version: Ultrasonic 2.1.0 from the Play store.
  • Android version: Oreo (8.1)
  • Device info: Google Pixel 2

App won't shut down

Problem description

It is very difficult to get the app to shut down - it is almost always running in the notification bar.

Steps to reproduce

Pull down the notification - there is an "x" in the corner of the notification. Touching that doesn't cause the app to exit.
In the app main menu, at the bottom, there is an "Exit" option. Touching that closes the app interface, but leaves the icon in the notification bar. Pull-down on notification, touch the Ultrasonic notification, the interface pops up with "now playing" activated and the song paused where I last left it.

System information

  • Ultrasonic version: 2.0.0 (this has been happening since I first installed it many months ago)
  • Android version: 7.0
  • Device info: Moto G5 plus

Add a way to collect logs

Problem description

Add a way in the app to collect logs and save the locally on the device. This will allow app users to attach more helpful information to the issues (like in the #128 or #129).

Additional notes

This may depends on adding better logging solution story.

Error using Ampache server and Ultrasonic

Problem description

When I choose "song/artist" or "songs/favorites" or "albums/favorites" or "videos/videos" I get an error, something like that: "There was a network error. Check server url or try it later". Other options are working fine.

Steps to reproduce

Using Ampache server, Ultrasonic app and Nexus 4 cellphone.

System information

  • Ultrasonic version: 2.1.0
  • Android version: 7.1.2 (Lineage 14)
  • Device info: Google LG Nexus 4
  • Ampache server version: 3.8.4 (tried with 3.8.3 too, same error) - Using httpS

Server settings

Rethink how app shows and manages server settings.

Problems so far:

  1. App shows modal dialogue for each field that user wants to edit.
  2. App saves server settings in SharedPreferences, better to save them into DB.
  3. List of servers are added to the app settings.

This issue is an epic issue. Particular changes should be done in a separate issues.

Ultrasonic Android on Madsonic Server

Hi! I'm using an older version of Madsonic server, latest free, without activation (MADSONIC 5.1.5260.20150831.0820) and after your latest update (latest two updates, actually) your android client can't connect to server. (A network error ocurred. Please check the server address or try again.) Happens on any device using Ultrasonic.
Thank you for all your work!

Better error handling in new API

At this moment every error given by *sonic server are showed in Ultrasonic as a A network error occurred. Please check the server address or try again later.

This is insufficient in some cases where the server are providing an error message to client. For example, Supysonic doesn't support video, and when you try to access to video api the server gives the following message.

{
 "subsonic-response": {
  "status": "failed",
  "version": "1.8.0",
  "error": {
   "message": "Video streaming not supported",
   "code": 0
  }
 }
}

The error messages are always equal, the status value is failed and it gives a message and an error code. I think that Ultrasonic must support this messages and show them to user to avoid false positive bugs.

Some samples:

getGenres is unsupported in Supysonic.

{
 "subsonic-response": {
  "status": "failed",
  "version": "1.8.0",
  "error": {
   "message": "Not implemented",
   "code": 0
  }
 }
}

A user/password error.

{
 "subsonic-response": {
  "status": "failed",
  "version": "1.8.0",
  "error": {
   "message": "Unauthorized",
   "code": 40
  }
 }
}

No connection to subsonic server after update to Ultrasonic 2.0.0

Problem description

Since the last Update of Ultrasonic I cannot access my subsonic server anymore. When I try to browse my libary or even just use the "test" function in the server setting screen I get a pop up window with the following text:
"Error A network error occurred. Please check the server address or try again later."
Before the update to 2.0.0 everything was fine. Also the offical app does not show this kind of error.

Steps to reproduce

browse the server library or
use the "test" function in the server setting screen

System information

Ultrasonic version: 2.0.0
Android version: 8.0.0
Device info: Oneplus 3T
Subsonic-Server version: 6.1.3 (build e408c9) – 31. October 2017

Mocking framework

Hi,

hope find you well with this cold call.

I am an author of mocking framework for Kotlin

I see you are using mockito-kotlin.

I just want you to be aware that there is solution that fully supports Kotlin and ask to try it in your new/current projects.

I can help you if you answer to this issue.

Thanks and please star it

Add detekt

Kotlin has static code analyser named detekt.

We should integrate it and add CI job that will run it.

Wrong cover art

Problem description

The App uses a wrong cover art when showing the album song list. The covers are ok whenever listing some author's album or the full album list.

Steps to reproduce

With the app freshly installed (wipe data) browse for a song and play it.
Clear the playlist and go back to Artists then Albums and open one album. The album cover art will be from the song you just played instead of the correct one.

System information

Using the latest ultrasonic from play store.
I use my own server to serve this content. I noticed that whenever I browse to an Album song list, it will usually query the album art using a bigger size (compared to the small album list). After the song is played the albums cover art will always be wrong and the same as the played song.

Additional notes

After debugging a bit I noticed that browsing doesn't get any cover art dropped to disk as a JPEG image. Only when I play the first song I will get some file dropped to the local disk cache. In my case I get:

/storage/emulated/0/Android/data/org.moire.ultrasonic/artwork/101a46b761af499a52c53b6c1368afac.jpeg

Which comes from:

hex(md5(/storage/emulated/0/Android/data/org.moire.ultrasonic/music/null)) = 101a46b761af499a52c53b6c1368afac

Which means that there's some bug that makes all songs to end up in "music/null/song.mp3" instead of "album/song.mp3". That means there is always (obviously) a cache hit for the cover art.

I'm unsure who's to blame for this bug, whether it's a thing that my server produces somehow or it's a client bug. I will check a bit more but I'll probably need a bit of help since just reading the code might not be enough and I'm not planning to build the apk to debug.

Add option to start playback on insertion of headphones

This is a request to have an option for starting playback when headphones are connected. It seems the app will already (correctly, IMHO) stop playback when the headphones are disconnected, so perhaps this would be trivial to implement for someone who was not a total android app novice like me!

I know the readme says this project is stalled, but I see a lot of excellent activity and hopefully it keeps up! I really like this app!

Unable to connect (network error occured) since last update

Hello,

I'm using Ultrasonic with an Airsonic server.
Everything worked well, but since last update I can't connect anymore.
I have the following error message when using "Test Connection":

Connection failure. A network error occured. Please check the server address or try again later

And same when trying to get arsits:

A network error occured. Please check the server address or try again later.

I watch the log in my server but nothing: Ultrasonic seems no connect.
I also try to go on server URL from my Android and works good.

Did you make a change that can explain that?
Thanks in advance.

Support runtime permissions

In order to update api level app should support runtime permissions.

Currently app uses following dangerous permissions:

  • android.permission.WRITE_EXTERNAL_STORAGE
  • android.permission.READ_EXTERNAL_STORAGE

Better handling of podcasts

Current implementation problems:

  • doesn't mark podcast as played on the server
  • filter out not yet downloaded podcasts

May add more later...

Bump target api level to 23

App should update target level to api 23.

Depends on #79.

Also should update android support libraries to latest in 23.x.x versions.

FR: Internet Radios

Hi

IIt would be nice if US supports Tv/Radios listings. I use it with Airsonic, Dsub can lists these well enough.

thanks

Move repository to their own organization

@Tapchicoma I claim to GitHub the ultrasonic organization for better fine grained permissions to repository and I invite you to are a full member.

Please confirm me that this is fine and I move this repository to new org to work from there.

Reimplement custom cache folder setting

Problem description

To use custom cache folder user needs to type path on the device (for example /sdcard/ultrasonic) that requires advanced Android knowledge and not user-friendly.

App need to introduce another way to set cache folder.

Note: using external storage will require granting runtime permission.

Possible Improvements:

  • Select cache folder for each server individually
  • Provide dialog or separate screen to select desired cache folder (user may want to create a new one)
  • Call external app to do this selection.
  • Request permission before selecting the folder.

Better feedback to user on certificate error

At this moment, when an user have a certificate problem (is using a self-signed certificate or certificate is invalid), they receive the generic error A network error ocurred. Please check the server address or try again. that may be confusing.

I think that is better give a more detailed error in this case. And I see two different situations.

  1. If the user is trying to connect using https with a no valid / unknown certificate and have not checked the self-signed certificate option give an error like You are using an unknown or self-signed certificate. If this is your intention, please check the allow self-signed HTTPS certificate option.
  2. If the user have an expired certificate (that is invalid in any case), give something like Your HTTPS certificate is expired and cannot be used, please renew your certificate to connect with your server.

With this I think that we can avoid issues like #128 or #129

Add CI integration.

Discuss and implement CI for this project.

Current minimum requirements: run plain java tests.

But keep in mind that in the future this project will also need to run android instrumentation tests and ui tests.

Add better handling api versions

Currently server responds with highest supported API version.

Add check if call is supported by current server side api version.

I would like to see some real error messages displayed.

For example, Ampache doesn't implement the chat function in it's Subsonic API. It would be nice to not see "A network error has occurred." When it is not a network error.

For example If Ampache's Podcast feature is not enabled, the Subsonic API issues an error response of "User is not authorized. " The response includes both number and the message, so the Ultrasonic client should be able to display it, instead of "A network error has occurred....".

Ampache, being a "Third-Party" Subsonic emulator, should be able to issue error or other types of messages tailored to it's capabilities.

Thanks,

Second instance / second song starts playing

Problem description

The next track in the playlist starts playing in a "headless" instance of Ultrasonic while the current track continues to play in the running instance. Both tracks play simultaneously. Pausing the running instance or terminating the application stops the current track from playing, but because there is no visible instance of Ultrasonic playing the second track, the second track cannot be stopped without rebooting the playback device.

Steps to reproduce

Add tracks to a playlist and see if it happens. Unfortunately, there is no predictable pattern that I can see.
I have been using Ultrasonic for a few years and this used to happen occasionally, but I chalked it up to random glitches, and it's hard to debug something while walking or driving. But today it happened ibn my living room, twice in 10 minutes despite a reboot in between events.

In each case, the content had been fully downloaded from my Subsonic server and was saved on my phone.

As best I can tell, this only happens when longer tracks are selected. Today the problem occurred after 9 minutes of a 17 minute track. First, playback stops for a moment. Toggling play/pause has no effect. Moving the playback slider has no effect. It's as if Ultrasonic has frozen, and very similar to what happens if playback reaches the end of the partially-downloaded track: playback stops dead and the playback controls won't provide full control.

After a moment, playback resumes. When it does, the second track also starts playing. Or, if I have been adjusting the playback controls an fiddling around, the second track seems to start once I am able to start the first track again. Either way, it seems like Ultrasonic freezes while it somehow loads a second track up and starts playing it. Then it proceeds as if nothing happened.

Once I hear that two tracks are playing, I can pause or even stop the track that's playing in the visible Ultrasonic window. The second track continues, however. There is no obvious way to interact with it. Terminating Ultrasonic does not stop the second track from playing. Restarting Ultrasonic does not force the second track into the visible instance, either. It is really as if a second, headless instance is running and playing the next track in the playlist.

Anyway, this has happened enough times, and across enough phones and versions of Android, that I decided it was time to mention it.

System information

  • Ultrasonic version: 2.2.1 but also 2.2.0 and earlier versions
  • Android version: Nougat, but also Marshmallow and earlier versions
  • Device info: Samsung S6 edge, but also on an S5 and an S4.

Add ktlint code style

Kotlin community has similar to checkstyle or gofmt tool to check code formatting - ktlint

We should integrate it and add CI job that will run this checks.

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.