Giter Club home page Giter Club logo

amperfy's People

Contributors

bamse16 avatar bleeez avatar danielepintore avatar dbaldwin avatar f-longobardi avatar gesrua avatar leonspok avatar mw avatar reillymc avatar richardmitic avatar sandersantema 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

amperfy's Issues

playlist not loaded correctly from server 1.0.5 (3)

Playlists are not loaded correctly from the ampache server.

The playlist Title is loaded and displayed along with the number of songs, but missing the duration ("0s").
Opening a playlist will show an empty list, so the individal songs are not being displayed and thus cannot be played.

macOS Catalyst version

I've fiddled a little with the codebase and had a macOS version running quite easily.

It's not perfect but it works!

I had to ditch Carthage and use SwiftPM to make the dependencies compile for Catalyst, but I'm not really used to it - maybe you might be able to keep running on Carthage!

Are you planning a full-blown macOS version in the future?

Screen Shot 2021-05-15 at 22 08 24

Bug: long songs/ mixes don't play or download.

Using amperfy version 1.0.5(3) together with the latest Ampache main version it seems that songs (or mixes in my case) which are long don't play or download. This seems to depend on both the length and bitrate e.g. a 30 min 128kbps mp3 plays fine but a 30 min 320kbps mp3 or 2 hour 128kbps mp3 doesn't Amperfy isn't able to download those either and simply adds them to the completed download list despite failing to download them (the text stays gray).

Unable to play music after syncing

After successfully connecting to an ampache endpoint and syncing my library, when I attempt to play a song in m4a or mp3 format the progress bar fails to move beyond 0:00

This result is the same whether running in an iOS simulator or on my iOS device.

2019-06-08 17:10:52.534701+0000 Amperfy[2454:646954] Error Player: The operation couldn’t be completed. (OSStatus error -50.) 2019-06-08 17:10:59.956367+0000 Amperfy[2454:646954] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles 2019-06-08 17:10:59.958217+0000 Amperfy[2454:646954] [MC] Reading from public effective user settings. 2019-06-08 17:12:55.275214+0000 Amperfy[2454:646954] [Ampache] https://cloud.redshift.is/apps/music/ampache/server/xml.server.php?action=handshake&auth=9a45f4e915282c05887dcc005d3008f35a73cf6115bfd69fce04108ccf27507a&timestamp=1560013975&version=350001&user=ncp 2019-06-08 17:12:55.696373+0000 Amperfy[2454:646954] [BackendProxy] Ampache is active backend api 2019-06-08 17:12:56.251650+0000 Amperfy[2454:646954] [BackgroundSyncer] SyncInBackground stopped 2019-06-08 17:12:56.612037+0000 Amperfy[2454:647432] [Parser] Found album id 18 with unknown artist 35 2019-06-08 17:12:56.919351+0000 Amperfy[2454:647432] [Parser] Found song id 18 with unknown artist 35 2019-06-08 17:12:57.637359+0000 Amperfy[2454:647432] [BackgroundSyncer] SyncInBackground start 2019-06-08 17:12:57.642885+0000 Amperfy[2454:647276] [LibrarySyncer] Lib resync: No changes 2019-06-08 17:12:58.240410+0000 Amperfy[2454:647464] [LibrarySyncer] Not able to fetch img 2019-06-08 17:12:58.241501+0000 Amperfy[2454:647464] [LibrarySyncer] All artworks are synced 2019-06-08 17:13:04.811039+0000 Amperfy[2454:646954] [Snapshotting] Snapshotting a view (0x1050bec00, UIKeyboardImpl) that is not in a visible window requires afterScreenUpdates:YES. 2019-06-08 17:13:06.114191+0000 Amperfy[2454:646954] [BackgroundSyncer] SyncInBackground start 2019-06-08 17:13:06.116564+0000 Amperfy[2454:647464] [LibrarySyncer] Lib resync: No changes 2019-06-08 17:13:06.741182+0000 Amperfy[2454:647645] [LibrarySyncer] All artworks are synced 2019-06-08 17:13:11.563333+0000 Amperfy[2454:647647] [DownloadManager] DownloadManager start 2019-06-08 17:13:11.563543+0000 Amperfy[2454:647434] [DownloadManager] Fetching - Agnus Dei - Samuel Barber LIVE ... 2019-06-08 17:13:12.873787+0000 Amperfy[2454:647434] [DownloadManager] Fetching - Agnus Dei - Samuel Barber LIVE SUCCESS (6.82 MiB) 2019-06-08 17:13:12.917757+0000 Amperfy[2454:647647] [DownloadManager] DownloadManager done 2019-06-08 17:13:17.802026+0000 Amperfy[2454:647646] TIC Read Status [9:0x280c1ad00]: 1:57 2019-06-08 17:13:17.802096+0000 Amperfy[2454:647646] TIC Read Status [9:0x280c1ad00]: 1:57 2019-06-08 17:13:17.802109+0000 Amperfy[2454:647646] TIC Read Status [9:0x280c1ad00]: 1:57 2019-06-08 17:13:17.803105+0000 Amperfy[2454:647646] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C9.1:2][0x104c93260] get output frames failed, state 8196 2019-06-08 17:13:17.803177+0000 Amperfy[2454:647646] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C9.1:2][0x104c93260] get output frames failed, state 8196 2019-06-08 17:13:17.803608+0000 Amperfy[2454:647646] TIC Read Status [9:0x0]: 1:57 2019-06-08 17:13:17.803630+0000 Amperfy[2454:647646] TIC Read Status [9:0x0]: 1:57 2019-06-08 17:13:17.803642+0000 Amperfy[2454:647646] TIC Read Status [9:0x0]: 1:57 2019-06-08 17:13:17.803654+0000 Amperfy[2454:647646] TIC Read Status [9:0x0]: 1:57

Ampache config

Hello , thanks for this cool project.
I tried it but didn't succeed to access the Ampache server 4.2.2 using Amperphy (using last master version) I think it must be a config issue, could you document or just say what's required to make it works with an Apache server in the config side ?
Mine is a simple http
Thanks

artist image not being displayed 1.0.5 (3)

despite having an "artist.jpg" oder Artist-Name".jpg" in the artist folder on the ampache server, the default artist image provided by amperfy is being displayed.
the album images are displayed correctly.

can't repeat single song

  • iOS 14.4.2
  • Amperfy 1.0.4
  • Ampache Server API version 441000
  • Client API Version 350001

can't repeat single song. song automatically stops.

[Feature]: implement queuing such as is done in the Spotify app

I was wondering whether you'd be interested in implementing queuing such as is done in the Spotify app and whether you are already familiar with this behavior (if not I could describe it in detail to make implementation easier).

It basically works like the following:

  • Songs can be added to the queue by swiping a song to the right in a playlist (instead of the clunky action apple chose for the music app where you have to press a song and select queue in a popup menu).

This is how it looks:
image

  • Songs which are queued by the user always take precedence over other items i.e. the queue is always played first, then for instance the remaining songs of a playlist
  • Other songs can be played without clearing the queue, this is very convenient if you don't exactly remember how a song sounds and whether you'd like to queue it.

I could elaborate more on the exact behavior and arguments on why I think this is better behavior than for instance the Apple Music app queuing if you might be interested in implementing this.

Deployment to phone

First of all thanks for your work. I'm a total newbie when it comes to iOS development and could not get the project deployed to my phone. The error seemed to be something with app IDs:

Screenshot 2019-05-19 at 15 15 39

Could you provide instructions on how to deploy the app to a device?

How hard/cumbersome would it be to place the app on the official store?

Kind regards and again thanks for your work -
Jonas

Playing tarck after fefreshing playlist results in app terminating due to uncaught exception

Full details below. This happens when I attempt to play a track for the first time after refreshing a playlist. The relevant bit appears here :

2019-06-10 13:11:49.216194+0000 Amperfy[2675:112209] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Illegal attempt to establish a relationship 'song' between objects in different contexts (source = <PlaylistElement: 0x600000d094f0>

2019-06-10 13:03:43.422449+0000 Amperfy[2528:105604] [BackendProxy] Ampache is active backend api
2019-06-10 13:03:43.422778+0000 Amperfy[2528:105604] [BackgroundSyncer] SyncInBackground start
2019-06-10 13:03:43.425361+0000 Amperfy[2528:105766] [Ampache] https://cloud.redshift.is/apps/music/ampache/server/xml.server.php?action=handshake&auth=f5a8972f9938f78ff4f557a862f3865ea5fc5c1ddb2a0339973c2106e55c5b48&timestamp=1560171823&version=350001&user=ncp
2019-06-10 13:03:43.428708+0000 Amperfy[2528:105777] [Ampache] https://cloud.redshift.is/apps/music/ampache/server/xml.server.php?action=handshake&auth=f5a8972f9938f78ff4f557a862f3865ea5fc5c1ddb2a0339973c2106e55c5b48&timestamp=1560171823&version=350001&user=ncp
2019-06-10 13:03:43.902051+0000 Amperfy[2528:105777] [LibrarySyncer] Lib resync: New changes on server
2019-06-10 13:03:43.906400+0000 Amperfy[2528:105777] [LibrarySyncer] Lib resync: 0 Artists parsed
2019-06-10 13:03:44.204496+0000 Amperfy[2528:105777] [Parser] Found album id 20 with unknown artist 39
2019-06-10 13:03:44.206156+0000 Amperfy[2528:105777] [Parser] Found album id 29 with unknown artist 57
2019-06-10 13:03:44.207338+0000 Amperfy[2528:105777] [Parser] Found album id 35 with unknown artist 41
2019-06-10 13:03:44.208440+0000 Amperfy[2528:105777] [Parser] Found album id 21 with unknown artist 41
2019-06-10 13:03:44.209711+0000 Amperfy[2528:105777] [Parser] Found album id 25 with unknown artist 41
2019-06-10 13:03:44.211076+0000 Amperfy[2528:105777] [Parser] Found album id 22 with unknown artist 41
2019-06-10 13:03:44.212787+0000 Amperfy[2528:105777] [Parser] Found album id 34 with unknown artist 41
2019-06-10 13:03:44.214312+0000 Amperfy[2528:105777] [Parser] Found album id 27 with unknown artist 41
2019-06-10 13:03:44.215627+0000 Amperfy[2528:105777] [Parser] Found album id 28 with unknown artist 41
2019-06-10 13:03:44.216975+0000 Amperfy[2528:105777] [Parser] Found album id 23 with unknown artist 41
2019-06-10 13:03:44.218504+0000 Amperfy[2528:105777] [Parser] Found album id 24 with unknown artist 41
2019-06-10 13:03:44.219798+0000 Amperfy[2528:105777] [Parser] Found album id 26 with unknown artist 41
2019-06-10 13:03:44.220200+0000 Amperfy[2528:105777] [LibrarySyncer] Lib resync: 12 Albums parsed
2019-06-10 13:03:44.590939+0000 Amperfy[2528:105777] [Parser] Found song id 22 with unknown artist 41
2019-06-10 13:03:44.595233+0000 Amperfy[2528:105777] [Parser] Found song id 21 with unknown artist 41
2019-06-10 13:03:44.597298+0000 Amperfy[2528:105777] [Parser] Found song id 23 with unknown artist 41
2019-06-10 13:03:44.599158+0000 Amperfy[2528:105777] [Parser] Found song id 35 with unknown artist 41
2019-06-10 13:03:44.601130+0000 Amperfy[2528:105777] [Parser] Found song id 36 with unknown artist 57
2019-06-10 13:03:44.602950+0000 Amperfy[2528:105777] [Parser] Found song id 32 with unknown artist 57
2019-06-10 13:03:44.603958+0000 Amperfy[2528:105777] [Parser] Found song id 24 with unknown artist 41
2019-06-10 13:03:44.605519+0000 Amperfy[2528:105777] [Parser] Found song id 25 with unknown artist 41
2019-06-10 13:03:44.607175+0000 Amperfy[2528:105777] [Parser] Found song id 26 with unknown artist 41
2019-06-10 13:03:44.609061+0000 Amperfy[2528:105777] [Parser] Found song id 27 with unknown artist 41
2019-06-10 13:03:44.610666+0000 Amperfy[2528:105777] [Parser] Found song id 28 with unknown artist 41
2019-06-10 13:03:44.613099+0000 Amperfy[2528:105777] [Parser] Found song id 31 with unknown artist 57
2019-06-10 13:03:44.614204+0000 Amperfy[2528:105777] [Parser] Found song id 30 with unknown artist 57
2019-06-10 13:03:44.615306+0000 Amperfy[2528:105777] [Parser] Found song id 29 with unknown artist 57
2019-06-10 13:03:44.616334+0000 Amperfy[2528:105777] [Parser] Found song id 33 with unknown artist 57
2019-06-10 13:03:44.617374+0000 Amperfy[2528:105777] [Parser] Found song id 34 with unknown artist 41
2019-06-10 13:03:44.618902+0000 Amperfy[2528:105777] [Parser] Found song id 20 with unknown artist 39
2019-06-10 13:03:44.619492+0000 Amperfy[2528:105777] [LibrarySyncer] Lib resync: 17 Songs parsed
2019-06-10 13:03:44.685905+0000 Amperfy[2528:105766] [LibrarySyncer] All artworks are synced
2019-06-10 13:04:16.120482+0000 Amperfy[2528:105604] Play song: Unknown artist - Edge Of The Dream
2019-06-10 13:04:40.418412+0000 Amperfy[2528:105604] [LayoutConstraints] Unable to simultaneously satisfy constraints.
	Probably at least one of the constraints in the following list is one you don't want. 
	Try this: 
		(1) look at each constraint and try to figure out which you don't expect; 
		(2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x60000291fd90 UIView:0x7fcf0793a200.width == - 16   (active)>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x60000291fd90 UIView:0x7fcf0793a200.width == - 16   (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
2019-06-10 13:05:28.136731+0000 Amperfy[2528:105604] [AXMediaCommon] Unable to look up screen scale
2019-06-10 13:05:28.136827+0000 Amperfy[2528:105604] [AXMediaCommon] Unexpected physical screen orientation
2019-06-10 13:05:28.160506+0000 Amperfy[2528:105604] [AXMediaCommon] Unable to look up screen scale
2019-06-10 13:05:28.163483+0000 Amperfy[2528:105604] [AXMediaCommon] Unable to look up screen scale
2019-06-10 13:05:28.163574+0000 Amperfy[2528:105604] [AXMediaCommon] Unexpected physical screen orientation
2019-06-10 13:05:49.859681+0000 Amperfy[2528:107169] [AmpacheLibSyncer] Download playlist "rosecross" from server
2019-06-10 13:05:50.207395+0000 Amperfy[2528:107169] [AmpacheLibSyncer] Sync songs of playlist "rosecross"
2019-06-10 13:05:52.264957+0000 Amperfy[2528:105604] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Illegal attempt to establish a relationship 'song' between objects in different contexts (source = <PlaylistElement: 0x6000029b68f0> (entity: PlaylistElement; id: 0x600000aaaee0 <x-coredata:///PlaylistElement/tC3B05E8F-E8B0-4FA2-85AF-6EDB2C70769B8> ; data: {
    order = 0;
    playlist = "0xc11353cbb0b2bf20 <x-coredata://9BE5A25C-7615-4BA3-A96D-733D73C4AB8D/PlaylistManaged/p2>";
    song = nil;
}) , destination = <Song: 0x6000029b5f90> (entity: Song; id: 0xc11353cbb0cabf2a <x-coredata://9BE5A25C-7615-4BA3-A96D-733D73C4AB8D/Song/p28> ; data: {
    album = "0xc11353cbb0a2bf2e <x-coredata://9BE5A25C-7615-4BA3-A96D-733D73C4AB8D/Album/p6>";
    artist = nil;
    artwork = nil;
    dataMO = nil;
    id = 36;
    playlistElements =     (
        "0xc11353cbb09ebf24 <x-coredata://9BE5A25C-7615-4BA3-A96D-733D73C4AB8D/PlaylistElement/p9>"
    );
    syncInfo = "0xc11353cbb0b2bf26 <x-coredata://9BE5A25C-7615-4BA3-A96D-733D73C4AB8D/SyncWaveMO/p2>";
    title = Decani;
    track = 6;
    url = "https://cloud.redshift.is/apps/music/ampache/server/xml.server.php?action=play&filter=36&auth=a10c5313a78248ba469522ed9aa93285";
}))'
*** First throw call stack:
(
	0   CoreFoundation                      0x000000010649d6fb __exceptionPreprocess + 331
	1   libobjc.A.dylib                     0x0000000104ca7ac5 objc_exception_throw + 48
	2   CoreData                            0x0000000105e613a1 _PFManagedObject_coerceValueForKeyWithDescription + 2481
	3   CoreData                            0x0000000105e3de15 _sharedIMPL_setvfk_core + 229
	4   Amperfy                             0x00000001040d4d86 $s7Amperfy8PlaylistC6append4songyAA4SongC_tF + 582
	5   Amperfy                             0x00000001040c74a4 $s7Amperfy6PlayerC13addToPlaylist4songyAA4SongC_tF + 84
	6   Amperfy                             0x00000001040c7e39 $s7Amperfy6PlayerC4play4songyAA4SongC_tF + 105
	7   Amperfy                             0x000000010415a94b $s7Amperfy13SongTableCellC12touchesEnded_4withyShySo7UITouchCG_So7UIEventCSgtF + 507
	8   Amperfy                             0x000000010415ab5c $s7Amperfy13SongTableCellC12touchesEnded_4withyShySo7UITouchCG_So7UIEventCSgtFTo + 124
	9   UIKitCore                           0x000000010fcc0a09 forwardTouchMethod + 353
	10  UIKitCore                           0x000000010fcc0ad8 -[UIResponder touchesEnded:withEvent:] + 49
	11  UIKitCore                           0x000000010f8789c9 _UIGestureEnvironmentUpdate + 10367
	12  UIKitCore                           0x000000010f876108 -[UIGestureEnvironment _deliverEvent:toGestureRecognizers:usingBlock:] + 478
	13  UIKitCore                           0x000000010f875e96 -[UIGestureEnvironment _updateForEvent:window:] + 200
	14  UIKitCore                           0x000000010fcd15bc -[UIWindow sendEvent:] + 4057
	15  UIKitCore                           0x000000010fcafd16 -[UIApplication sendEvent:] + 356
	16  UIKit                               0x00000001289c14af -[UIApplicationAccessibility sendEvent:] + 85
	17  UIKitCore                           0x000000010fd80293 __dispatchPreprocessedEventFromEventQueue + 3232
	18  UIKitCore                           0x000000010fd82bb9 __handleEventQueueInternal + 5911
	19  CoreFoundation                      0x0000000106404be1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
	20  CoreFoundation                      0x0000000106404463 __CFRunLoopDoSources0 + 243
	21  CoreFoundation                      0x00000001063feb1f __CFRunLoopRun + 1231
	22  CoreFoundation                      0x00000001063fe302 CFRunLoopRunSpecific + 626
	23  GraphicsServices                    0x000000010c1742fe GSEventRunModal + 65
	24  UIKitCore                           0x000000010fc95ba2 UIApplicationMain + 140
	25  Amperfy                             0x0000000104192f6b main + 75
	26  libdyld.dylib                       0x00000001098ab541 start + 1
	27  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)

Support for downloading complete library

I'd be great if you could download the whole library in one go and if amperfy would do this automatically when new songs are added, similarly to iTunes match. Currently the only way to do this is creating a playlist containing all songs and downloading this manually but this is finicky and unreliable.

display and sort albums by year

Currently, the albums of an artist are sorted alphabetically.
Please make albums sortable by year, either per default or permanent setting.

Cydia Package

This might be a bit of an odd request. But since you don't seem to be hosting the App on the official App Store. Would you possibly consider hosting it for Jailbroken devices? Or perhaps just have an IPA file available for download.

Thanks for the client either way!

(UX) Issue: refresh playlist action is duplicated

To refresh a playlist there are currently two options:

  1. Pull down playlist
  2. Press the ... symbol and select Update from server

I propose to remove either one of these, not only because these actions are duplicated but also because it's quite easy to accidentally trigger a refresh by pulling down. Refreshing big playlists is currently very slow, so it's something which I think should be harder to do accidentally. Even better would be to refresh playlists automatically but I think this is a lot more work (and might not be possible due to limitations of ampache?)

App keeps crashing 1.0.5 (5)

The last two days I had some trouble with error messages
something regarding "token based" and then today "Entity not found, error 70".
Newly added songs were not loaded, so I tried to uninstall the app and install the newest version, but after entering the server info and login credentials, the app crashes immediately when the loading bar "syncing artists" appears.
I cannot even access the app to read the log files.
Any ideas what I can do? Thanks

playlist overwritten and emptied on server 1.0.5 (3)

Playlists are not loaded correctly from the server and appear to be empty in the app (see issue #42).
Adding songs to such a playlist in the app will work, but removes all other songs from the playlist on the server.
Because the synchronisation of newly added songs does not work properly, the user ends up with an empty playlist on the server.
The next time the app is started, the songs added via the app are gone too (see issue #43).

AppStore Version?

Thank you for creating this app for ampache!! I'm trying to setup an music streaming service, but my family uses iphones and I do not have a Mac. Is there a way you can put this app on the apple store? Thank you again!

Tracks not foud

First test.
Connection to my server ok.
Ok
Syncing, ok, found a lot of artist and albums, but only 4 track/songs !
There are about 8000 tracks, but all albums show 0 track, the 4 in ramdomly on 4 diffetent albums.

Performance: queuing a big playlist blocks the app

When queuing a big playlist the gui of the app gets blocked, I suspect this is because the whole playlist gets added to the queue at once. I don't know how hard/ easy this would be but a solution I could think of is queuing lazily, since the results aren't actually needed until:

  • the user looks/ scrolls to the part of the queue
  • the unloaded part of the queue is next to be played

Although this might also be solved by changing the queuing code to be non-blocking.

Support for self-signed certificates.

I run a Subsonic-compatible server (Navidrome) behind an Nginx reverse proxy with a self-signed certificate (Synology NAS). Login attempt from Amperfy fails with a "Login failed, Not able to login, please check credentials! message". There is no option to review or accept the certificate. Login works as expected when pointing Amperfy directly at Navidrome HTTP port.

  • Navidrome is version 0.39.0 running in Docker on a Synology NAS running DSM 6.2.3-25426 Update 3
  • Reverse proxy in use is the default Synology Ngnix
  • Amperfy is the App Store version, I can't find a version number

No such module 'LNPopupController'

i have a problem with the LNPopupController.
He can't find it.

Skype: iprinz96

würde mich über jede Hilfe freuen & ich würde mich auch sehr freuen an dem Projekt mit machen zu dürfen.

Bin selbst dabei an einer App für Ampache zu tüfteln. Bin dabei auf das Project gestoßen & Design technisch hab ich mir das genau so vorgestellt.

Code Improvement: reduce code duplication using generics

While looking trough the code I saw quite some functions which seemed to have roughly the same code but only differed in types, while I don't have any experience (other than looking trough this code :)) with swift I know from programming in C# that in the case of mostly the same functions but differing types I'd use generics. It seems that these exist in swift too: https://docs.swift.org/swift-book/LanguageGuide/Generics.html

Although functionally by changing these functions into generic ones there might not be any change I still think it would be a good idea with the whole DRY (Don't Repeat Yourself) principle and all. Having less code means you need to maintain less.

An example:

    private func playAllSongsInAlbum(album: Album) {
        guard let player = player else { return }
        player.cleanPlaylist()
        addAlbumSongsToPlaylist(album: album)
        player.play()
    }

    private func playAllSongsInPlaylist(playlist: Playlist) {
        guard let player = player else { return }
        player.cleanPlaylist()
        addPlaylistSongsToPlaylist(playlist: playlist)
        player.play()
    }

    private func addArtistSongsToPlaylist(artist: Artist) {
        guard let player = player else { return }
        player.addToPlaylist(songs: artist.songs)
    }
        
    private func addAlbumSongsToPlaylist(album: Album) {
        guard let player = player else { return }
        player.addToPlaylist(songs: album.songs)
    }

I think it would become something such as the following (although I'm not at all sure about the syntax/ whether this even compiles):

    private func addItemSongsToPlaylist<T>(item: T) {
        guard let player = player else { return }
        player.addToPlaylist(songs: item.songs)
    }
    
    private func playAllSongsInItem<T>(item: T) {
        guard let player = player else { return }
        player.cleanPlaylist()
        addItemSongsToPlaylist(item: item)
        player.play()
    }

If the behavior of the function is dependent on the type of the argument such as is the case in the following functions:

    func prepare(toWorkOnArtist artist: Artist?, with player: MusicPlayer) {
        self.artist = artist
        self.player = player
    }
    
    func prepare(toWorkOnAlbum album: Album?, with player: MusicPlayer) {
        self.album = album
        self.player = player
    }
    
    func prepare(toWorkOnPlaylist playlist: Playlist?, with player: MusicPlayer) {
        self.playlist = playlist
        self.player = player
    }

Then I think pattern matching on the types using a switch statement can be used (again not even sure whether this compiles):

func prepare<T>(toWorkOnItem item: T, with player: MusicPlayer) {
    switch item {
    case let artist as Artist:
        self.artist = artist
    case let album as Album:
        self.album = album
    case let playlist as Playlist:
        self.playlist = playlist
    }

    self.player = player
}

In general I think this would improve the overall quality of the code base. Although there might be some arguments against this which I have missed given my inexperience in regards to swift.

call for any API / change requests to make things easier for you.

I'm making a call out to all the xml-api client software devs to come over the the repo and make their issues known.

I'm working on updating Ampache to version 4 and would like feedback on those who use the API to actually tell me what they need to make it better.

So far i've added smart playlists to the playlist calls as well as recording/flagging songs.

Please come by when you can and I hope to make all ampache-related software better for everyone! :)

Album track order?

I might be missing something, but when viewing an album, it appears that tracks are listed alphabetically (by track title). Is there a way to get them listed by track number order?

Navidrome support

I'm running a Navidrome server and cannot login using Amperfy (Login failed, Not able to login, please check credentials! message). I can connect using the same address and credentials in iSub and SubStreamer as well as the web app. There are no logs server-side.

Airsonic support

I just installed this on my phone to listen to music on my Airsonic server, but while the song list does load (after a while), nothing actually plays. I also see no logs on the server.

Compatibility with latest Ampache 5 db updates

I was wondering whether amperfy is compatible with the latest Ampache 5 db updates which were merged 3 days ago:
ampache/ampache#2926

I could imagine that this would only be a backend change which would change any API details but I don't know for sure and I'd like to know before upgrading my Ampache server to the latest version.

Request feature : add Smart Playlist

Hello,

Been using for few weeks now and Amperphy is really cool. I just wanted to play the lastest songs I added on ampache using a smart list but it seems they dont show up on the playlists tab in the app. Is there a way to add them ?

Many Thanks !

App dont Update

The app Will not Update, i have to delete the app, and install it again.

Session Expired, how to renew?

After updating ampache to the newest develop version (API version 500000) and amperfy 1.0.5 (5) my session seems to have expired, how do I refresh this without resetting app data that is. Is this a bug or some missing functionality?

Amperfy seems to have saved some logs to the event log, can you access those?

UX Issue: shuffle toggle is unclear

Currently it is not clear whether shuffle is toggled on or of. I think the shuffle toggle in apples own Music app suffers of the same problem, Spotify is a bit more clear. But best would be the following (Unfortunately I only could find an example of this symbol in the KDE music player Elisa so it's a screenshot of the app itself):

Shuffle toggled off:
image

Shuffle toggled on:
image

Support for genre

Genre is currently not supported in either the library view or search, I think adding it would be a great improvement.

Request feature : Dark version

A night version would be great to avoid dizzying eyes at night or when waking up^^Just inverting colors should do it.

songs tab show displaying songs

Upload.from.GitHub.for.iOS.MOV

I tried to leave this on 1.0.5(5) through testflight but it seems didn't make it. Now that official 1.0.5 is released I decided to leave the issue on github(maybe I should've done it this way from the first place).

As seen from the video above, songs list is empty but when I start typing in the search bar it will show some results. I'm not sure if it's my server causing this but I'm reporting it anyway. Please let me know what to do if that's the case.

backend API Ampache
Server API version 441000
Client API version 500000

thanks.

Sign In dialogue needs work

This is roughly what the sign-in dialogue looks like when a password manager is installed:

Screenshot 2019-05-19 at 22 04 17
(the "Log In" button is hidden underneath the "Passwords" panel)

It would be nice if the dialogue could either be scrolled somehow or if the keyboard could be hidden after the password is entered. Or if pressing "Return" after the password would submit the form. Right now, selecting the URL again makes the "Password" panel disappear and the "Log In" button becomes visible again :)

Also, the text fields have a slightly different feel to the "usual" fields in the sense that they don't have a blinking cursor and are slightly smaller than the ones in search field for example.

Improvement: bad text contrast on currently playing screen

As you can see in the screenshot the contrast between the gray text and symbols is quite bad, this hinders readability. For me personally it's only a hindrance, but for someone who's visually impaired I'd imagine it could become unreadable. There are some good guidelines available online such as this one, although I think the easiest fix would be to simply set the color to black. You might still want to look into whether this still delivers the desired contrasts given the changing colors of the backgrounds.

image

Podcast support

This is by far the most polished iOS client I've seen for airsonic/subsonic/libresonic! However, I use the podcasts feature pretty heavily. Are there any plans to implement the podcast listening apis on this client?

Crash during sync iOS 14.5

Subsonic and Airsonic Advance, crash during Album sync at very large Database.
See message TestFlight

iOS Beta Tests

Amperfy Beta Tests

At this place the public TestFlight links for Amperfy beta versions will be published.
Details for how to participate with TestFlight can be found here.

Please create separate issue tickets for bugs in beta for the following reasons:

  • Discussions are easier to follow
  • It helps to keep track of fixed issues without everyone to get notified

[Feature]: Track seeking should show current time

I don't know all the names of these GUI elements so I hope this makes sense. But what I'd like to see is the time changing when seeking trough a song. Currently it continues to show the current time in the song. To illustrate I've annotated a screenshot of my desktop music player:

image

Here the time in red changes when moving the blue circled gui element, I think amperfy should do so too.

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.