Skip to content

Commit

Permalink
Merge pull request #3 from memen45/development
Browse files Browse the repository at this point in the history
Version 0.0.12 - mu
- awaiting Ampache API implementations in owncloud/music#768
- will support unlimited playlist lengths (only limited by internally available memory)
  • Loading branch information
memen45 authored Jul 12, 2020
2 parents f11bea5 + fa0221a commit a0c7baa
Show file tree
Hide file tree
Showing 33 changed files with 2,328 additions and 7 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
bin/
bin/SubMusic.prg.debug.xml
bin/SubMusic.prg
bin/SubMusic-settings.json
17 changes: 17 additions & 0 deletions .project
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>SubMusic</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>connectiq.builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>connectiq.projectNature</nature>
</natures>
</projectDescription>
24 changes: 17 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,38 @@
# SubMusic
Synchronize playlists from your server using the SubSonic API (Nextcloud - Subsonic - Ampache - Airsonic)
Synchronize playlists from your own music server: Nextcloud - Subsonic - Ampache - Airsonic.

Note there is a limitation for synchronizing larger playlists (above ~25 depending on metadata), due to how Subsonic and the watch work. Remove some songs from the playlist if you receive the -402 error during sync.
## How to use

Set up Synced Playlists | Choose from synced playlists | Enjoy your music
:-------------------------:|:-------------------------:|:-------------------------:
![](images/ConfigureSyncVIew.png) | ![](images/ChoosePlaybackView.png) | ![](images/PlaybackView.png)

## == Nextcloud ==
## How to set up
You need a music server supporting either the AmpacheAPI or the Subsonic API.

Install, enable and open the owncloud/music app. In Settings copy the URL for the SubSonic endpoint and paste it into the connect iq app settings. The URL should look like the following: "https://example.nextcloud.com/apps/music/subsonic", no trailing slash. Now enter a Description (e.g. "Garmin SubMusic") and Generate API password to enable a new access for the SubSonic API endpoint. Enter your username and the generated password in the connect iq app settings.
### == Nextcloud ==

In the connect iq app settings, choose 'Ampache API' for the 'API backend' option. Install, enable and open the owncloud/music app. In Settings copy the URL for the Ampache endpoint and paste it into the connect iq app settings. The URL should look like the following: "https://example.nextcloud.com/apps/music/ampache", no trailing slash. Now enter a Description (e.g. "Garmin SubMusic") and Generate API password to enable a new access for the Ampache API endpoint. Enter your username and the generated password in the connect iq app settings.

Only mp3 is supported, since the music app does not transcode music.

![](images/NextcloudView.png)

## == Ampache ==
### == Ampache ==

Enable the SubSonic backend in System settings in the web UI.
Requires the more recent JSON methods in order to work with the watch. Only tested on Nextcloud music app, so please report any issues! Alternatively you can enable the SubSonic backend in System settings in the web UI and select Subsonic API in the connect iq app settings. Note that there are limitations on using Subsonic as endpoint.

## == Subsonic ==
### == Subsonic ==

Should be supported now. Please report any issues!

## Known issues
Below a list of known 'issues'. These are problems that cannot be fixed by design of either the watch software or the API backends chosen.

**SubSonic API** - synchronization of large playlists (above ~25 depending on metadata) is not supported, due to how the Subsonic API is designed and how the watch works. Remove some songs from the playlist if you receive the -402 error during sync.

**General** - self-signed certificates are not supported by the watch (Sync Error: 0). Either use http or proper https certificates.

## == Support ==

If you use the "Contact Developer" option, please make sure to attach your email address to the message so I can reply. You can also go to https://github.com/memen45/SubMusic on GitHub and open an issue.
46 changes: 46 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
Version 0.0.12
- minor bug fixes
- improved support for the Ampache API (awaiting nextcloud/music update)

Version 0.0.11
- fixes playback configuration

Version 0.0.10
- rewrite of the sync engine
- alpha support for the Ampache API (limited to 20 songs per playlist)

Version 0.0.9
- added support for removing playlists before sync occured
- added handling of unsupported file types (songs will be skipped)
- improved syncing

Version 0.0.8
- fixes content-type issue on airsonic servers
- minor ui changes

Version 0.0.7
- fixes error reporting
- fixes response verifications

Version 0.0.6
- fixes multiple deletion of same playlist error

Version 0.0.5
- fixes broken sync

Version 0.0.4
- fixes strict responses from Airsonic (possibly also from other Subsonic servers)
- fixes response "ok" verification (less "Media Error Occured" and improves error reporting)
- fixed supported Subsonic API version: 1.10.2

Version 0.0.3
- fixes "Media Error Occured" on initial sync

Version 0.0.2
- fixes duplicate deletion of cached songs
- fixes deletion of playlists

Version 0.0.1
- show available playlists in Configure Sync menu
- only delete songs when not present in any playlist
- incremental change supported (only download new songs)
38 changes: 38 additions & 0 deletions manifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<!-- This is a generated file. It is highly recommended that you DO NOT edit this file. --><iq:manifest xmlns:iq="http://www.garmin.com/xml/connectiq" version="3">
<iq:application entry="SubMusicApp" id="62436b93f69e4823a8b41854b6684b4a" launcherIcon="@Drawables.LauncherIcon" name="@Strings.AppName" type="audio-content-provider-app" version="0.0.12">
<iq:products>
<iq:product id="fenix5plus"/>
<iq:product id="fenix5splus"/>
<iq:product id="fenix5xplus"/>
<iq:product id="fenix6pro"/>
<iq:product id="fenix6spro"/>
<iq:product id="fenix6xpro"/>
<iq:product id="fr245m"/>
<iq:product id="fr645m"/>
<iq:product id="fr945"/>
<iq:product id="legacyherocaptainmarvel"/>
<iq:product id="legacyherofirstavenger"/>
<iq:product id="legacysagadarthvader"/>
<iq:product id="legacysagarey"/>
<iq:product id="marqadventurer"/>
<iq:product id="marqathlete"/>
<iq:product id="marqaviator"/>
<iq:product id="marqcaptain"/>
<iq:product id="marqcommander"/>
<iq:product id="marqdriver"/>
<iq:product id="marqexpedition"/>
<iq:product id="venu"/>
<iq:product id="vivoactive3m"/>
<iq:product id="vivoactive3mlte"/>
<iq:product id="vivoactive4"/>
<iq:product id="vivoactive4s"/>
</iq:products>
<iq:permissions>
<iq:uses-permission id="Communications"/>
</iq:permissions>
<iq:languages>
<iq:language>eng</iq:language>
</iq:languages>
<iq:barrels/>
</iq:application>
</iq:manifest>
38 changes: 38 additions & 0 deletions manifest_beta.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<!-- This is a generated file. It is highly recommended that you DO NOT edit this file. --><iq:manifest xmlns:iq="http://www.garmin.com/xml/connectiq" version="3">
<iq:application entry="SubMusicApp" id="6d9f6da76574473eab1e442631fd1b04" launcherIcon="@Drawables.LauncherIcon" name="@Strings.AppName" type="audio-content-provider-app" version="0.0.3">
<iq:products>
<iq:product id="fenix5plus"/>
<iq:product id="fenix5splus"/>
<iq:product id="fenix5xplus"/>
<iq:product id="fenix6pro"/>
<iq:product id="fenix6spro"/>
<iq:product id="fenix6xpro"/>
<iq:product id="fr245m"/>
<iq:product id="fr645m"/>
<iq:product id="fr945"/>
<iq:product id="legacyherocaptainmarvel"/>
<iq:product id="legacyherofirstavenger"/>
<iq:product id="legacysagadarthvader"/>
<iq:product id="legacysagarey"/>
<iq:product id="marqadventurer"/>
<iq:product id="marqathlete"/>
<iq:product id="marqaviator"/>
<iq:product id="marqcaptain"/>
<iq:product id="marqcommander"/>
<iq:product id="marqdriver"/>
<iq:product id="marqexpedition"/>
<iq:product id="venu"/>
<iq:product id="vivoactive3m"/>
<iq:product id="vivoactive3mlte"/>
<iq:product id="vivoactive4"/>
<iq:product id="vivoactive4s"/>
</iq:products>
<iq:permissions>
<iq:uses-permission id="Communications"/>
</iq:permissions>
<iq:languages>
<iq:language>eng</iq:language>
</iq:languages>
<iq:barrels/>
</iq:application>
</iq:manifest>
1 change: 1 addition & 0 deletions monkey.jungle
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
project.manifest = manifest.xml
Binary file added resources/drawables/Cloud_Music_icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
19 changes: 19 additions & 0 deletions resources/drawables/Cloud_Music_icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions resources/drawables/drawables.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<drawables>
<bitmap id="LauncherIcon" filename="Cloud_Music_icon.png" />
</drawables>
Binary file added resources/drawables/launcher_icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions resources/properties.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<properties>
<property id="API_standard" type="number">0</property>
<property id="subsonic_API_URL" type="string">https://demo.nextcloud.com/apps/music/subsonic</property>
<property id="subsonic_API_usr" type="string">user</property>
<property id="subsonic_API_key" type="string">key</property>
</properties>
17 changes: 17 additions & 0 deletions resources/settings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<settings>
<setting propertyKey="@Properties.API_standard" title="@Strings.ApiStandard">
<settingConfig type="list">
<listEntry value="0">@Strings.ApiStandardSubsonic</listEntry>
<listEntry value="1">@Strings.ApiStandardAmpache</listEntry>
</settingConfig>
</setting>
<setting propertyKey="@Properties.subsonic_API_URL" title="@Strings.ServerAddress">
<settingConfig type="alphaNumeric" required="true" />
</setting>
<setting propertyKey="@Properties.subsonic_API_usr" title="@Strings.ServerUser">
<settingConfig type="alphaNumeric" required="true" />
</setting>
<setting propertyKey="@Properties.subsonic_API_key" title="@Strings.ServerKey">
<settingConfig type="alphaNumeric" required="true" />
</setting>
</settings>
19 changes: 19 additions & 0 deletions resources/strings/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<strings>
<string id="AppName">SubMusic</string>

<string id="AppVersionTitle">0.0.12-mu</string>
<string id="ApiStandard">API backend</string>
<string id="ApiStandardSubsonic">Subsonic API</string>
<string id="ApiStandardAmpache">Ampache API - beta</string>
<string id="ServerAddress">Server Address</string>
<string id="ServerUser">Username</string>
<string id="ServerKey">API key</string>

<string id="configureSyncMessage">Configure\nSync</string>
<string id="configurePlaybackMessage">Configure\nPlayback</string>

<string id="syncMenuTitle">Choose sync</string>
<string id="fetchingSongs">Fetching Songs...</string>
<string id="fetchingPlaylists">Fetching Playlists...</string>
<string id="playbackMenuTitle">Playlists</string>
</strings>
Loading

0 comments on commit a0c7baa

Please sign in to comment.