ultrasonic / ultrasonic Goto Github PK
View Code? Open in Web Editor NEWFree and open-source music streaming Android client for Subsonic API compatible servers
Home Page: https://ultrasonic.gitlab.io
License: GNU General Public License v3.0
Free and open-source music streaming Android client for Subsonic API compatible servers
Home Page: https://ultrasonic.gitlab.io
License: GNU General Public License v3.0
I cannot navigate into a video played from ultrasonic with VLC (the progression bar is stuck a the beginning)
read a video content from ultrasonic
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
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!
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.
Good question since it doesn't happen all the time.
Currently server responds with highest supported API version.
Add check if call is supported by current server side api version.
Current implementation problems:
May add more later...
I've noticed that Subsonic api implementation always parses api into generic with code 0.
SubsonicError.GENERIC
while it should be SubsonicError.WRONG_USERNAME_OR_PASSWORD
Required for #121
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.
Using Ampache server, Ultrasonic app and Nexus 4 cellphone.
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)
Related to #99 - discovered during testing fix for linked issue.
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.
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.
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.
I think it is time to update app icon to be more modern ๐
Design style guides for launcher icon: https://material.io/guidelines/style/icons.html#icons-product-icons
One of possible variants is this ultrasonic Github organization icon.
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
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.
browse the server library or
use the "test" function in the server setting screen
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
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.
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
It is very difficult to get the app to shut down - it is almost always running in the notification bar.
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.
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.
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.
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.
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.
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
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.
I think this error occurres when send requests included multi byte string to server.
To be able automate publishing app (see #84) versioning should be also automated by gradle plugin.
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.
At this moment if the XXsonic server are using a non-valid/self-signed https certificate, Ultrasonic cannot connect with them giving a network error.
Will be interesting add an option (disabled by default) to ignore server certificate and connect anyway.
This bug may be related with #99
In order to update api level app should support runtime permissions.
Currently app uses following dangerous
permissions:
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)
Would be nice if new version of the app can be automatically published by CI.
We can use following plugin to do it: https://github.com/Triple-T/gradle-play-publisher
It supports Google Play Store and F-Droid (see #83).
Automatic publishing can be done on every merge to master branch (?)
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!
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.
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
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
.
@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.
App should update target level to api 23.
Depends on #79.
Also should update android support libraries to latest in 23.x.x versions.
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
}
}
}
Kotlin has static code analyser named detekt.
We should integrate it and add CI job that will run it.
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.
The Subsonic JSON API is poor documented. Make a better documentation using Read the Docs.
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.
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!
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
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,
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.
You are using an unknown or self-signed certificate. If this is your intention, please check the allow self-signed HTTPS certificate option.
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
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.
Integrate new API and replace implemented calls with a new one.
With GitHub Pages make a beautiful Jekyll template.
Hi
IIt would be nice if US supports Tv/Radios listings. I use it with Airsonic, Dsub can lists these well enough.
thanks
Rethink how app shows and manages server settings.
Problems so far:
SharedPreferences
, better to save them into DB.This issue is an epic issue. Particular changes should be done in a separate issues.
Android lint allows to generate baseline to exclude current issues, but for the new code this checks should run.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.