13 Commits

Author SHA1 Message Date
austinried
3053e2b5c9 add changelog for 1.0.1 2021-09-02 18:01:58 +09:00
austinried
7f1585a6ad bump version 1.0.1 2021-09-02 17:23:38 +09:00
austinried
704edfbaaf remove unused permissions 2021-09-01 18:23:13 +09:00
austinried
5622c007f2 fix text cutting off bottom w/fixed height 2021-09-01 15:11:24 +09:00
austinried
3719a71e0f Merge branch 'master' of github.com:austinried/subtracks 2021-09-01 14:53:10 +09:00
aux4
44fb9a022d update readme coming soon 2021-09-01 10:17:38 +09:00
austinried
45cc51192a Merge branch 'master' of github.com:austinried/subtracks 2021-08-27 15:42:22 +09:00
aux4
d981690ba6 update readme with google play link 2021-08-27 15:41:39 +09:00
austinried
161a621d71 address xmldom security issue
https://github.com/advisories/GHSA-6fc8-4gx4-v693
2021-08-27 13:11:03 +09:00
austinried
7da1afa643 bump version 1.0.0 for release 2021-08-27 11:17:58 +09:00
austinried
77e89fc9e2 add version number to about setion 2021-08-27 09:58:49 +09:00
austinried
36e97cb621 update metadata per google play standards 2021-08-26 16:38:30 +09:00
austinried
c539376cc4 add metadata for stores 2021-08-26 16:10:49 +09:00
24 changed files with 64 additions and 20 deletions

View File

@@ -5,19 +5,23 @@ Subtracks is an Android open source music streaming app for [Subsonic-API-compat
# Screenshots
<p float="left">
<img src="assets/screenshots/01_home.png" alt="home" width="200"/>
<img src="assets/screenshots/02_now-playing.png" alt="now playing" width="200"/>
<img src="assets/screenshots/03_library-albums.png" alt="library albums" width="200"/>
<img src="assets/screenshots/04_album.png" alt="album view" width="200"/>
<img src="metadata/en-US/images/phoneScreenshots/01_home.png" alt="home" width="200"/>
<img src="metadata/en-US/images/phoneScreenshots/02_now-playing.png" alt="now playing" width="200"/>
<img src="metadata/en-US/images/phoneScreenshots/03_library-albums.png" alt="library albums" width="200"/>
<img src="metadata/en-US/images/phoneScreenshots/04_album.png" alt="album view" width="200"/>
</p>
# Download
<p float="left">
<a href="https://github.com/austinried/subtracks/releases/latest" disabled><img src="assets/github-badge.png" width="250"/></a>
<a href="https://play.google.com/store/apps/details?id=com.subtracks"><img src="assets/google-play-badge.png" width="250"/></a>
<a href="https://github.com/austinried/subtracks/releases/latest"><img src="assets/github-badge.png" width="250"/></a>
</p>
> :warning: Note: each download source above is signed with a different key, so you cannot switch between them without first uninstalling and then re-installing the app.
# Features
- Album and artist art display by default (full-res in detail/now playing views)
- Gapless playback
- Mulitple server support
- Filterable/sortable album and artist library views
- Search artists, albums, and songs
@@ -36,3 +40,4 @@ Subtracks is an Android open source music streaming app for [Subsonic-API-compat
- Queue management (add/remove/sort)
- Multi-select actions
- Performance & animation improvements
- More shuffle play modes

View File

@@ -134,8 +134,8 @@ android {
applicationId "com.subtracks"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName '0.1.0'
versionCode 3
versionName '1.0.1'
}
splits {
abi {

View File

@@ -1,5 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.subtracks">
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.subtracks" xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission tools:node="remove" android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission tools:node="remove" android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application android:name=".MainApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="false" android:theme="@style/AppTheme" android:usesCleartextTraffic="true">
<activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode" android:launchMode="singleTask" android:windowSoftInputMode="adjustPan">
<intent-filter>

View File

@@ -156,13 +156,13 @@ const infoStyles = StyleSheet.create({
justifyContent: 'center',
},
title: {
height: 28,
minHeight: 30,
fontFamily: font.bold,
fontSize: 22,
color: colors.text.primary,
},
artist: {
height: 20,
minHeight: 21,
fontFamily: font.regular,
fontSize: 16,
color: colors.text.secondary,
@@ -363,7 +363,7 @@ const controlsStyles = StyleSheet.create({
alignItems: 'center',
justifyContent: 'space-between',
paddingTop: 10,
paddingBottom: 54,
paddingBottom: 40,
},
play: {
marginHorizontal: 30,
@@ -419,7 +419,6 @@ const NowPlayingView: React.FC<NowPlayingProps> = ({ navigation }) => {
const styles = StyleSheet.create({
container: {
flex: 1,
// paddingTop: StatusBar.currentHeight,
},
content: {
flex: 1,

View File

@@ -17,6 +17,7 @@ import React, { useCallback, useState } from 'react'
import { KeyboardTypeOptions, Linking, Modal, Pressable, StatusBar, StyleSheet, Text, View } from 'react-native'
import { ScrollView } from 'react-native-gesture-handler'
import Icon from 'react-native-vector-icons/MaterialCommunityIcons'
import { version } from '../../package.json'
const ServerItem = React.memo<{
server: Server
@@ -286,6 +287,9 @@ const SettingsContent = React.memo(() => {
buttonStyle="hollow"
/>
<Header style={styles.header}>About</Header>
<Text style={styles.text}>
<Text style={styles.bold}>Subtracks</Text> version {version}
</Text>
<Button
disabled={clearing}
style={styles.button}
@@ -396,6 +400,14 @@ const styles = StyleSheet.create({
modalTextSubmit: {
marginLeft: 15,
},
text: {
color: 'white',
fontFamily: font.regular,
fontSize: 16,
},
bold: {
fontFamily: font.bold,
},
})
export default Settings

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 KiB

View File

@@ -0,0 +1 @@
Initial release

View File

@@ -0,0 +1 @@
Initial 1.0.0 release

View File

@@ -0,0 +1,4 @@
## Changes
- Remove unused permissions (read/write external storage)
- Fix text cutting off on Now Playing screen

View File

@@ -0,0 +1,12 @@
Subtracks is an Android open source music streaming app for Subsonic-API-compatible servers (Subsonic, Navidrome, Airsonic, and more). It's designed to give you clean and convenient access to your music in the style of modern media players.
Features
- Album and artist art display by default (full-res in detail/now playing views)
- Gapless playback
- Mulitple server support
- Filterable/sortable album and artist library views
- Search artists, albums, and songs
- Scrobble support
- Max bitrate and buffer size settings
- Loop and shuffle playback options
- Long-press for context menu shortcuts

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

Before

Width:  |  Height:  |  Size: 649 KiB

After

Width:  |  Height:  |  Size: 649 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 MiB

After

Width:  |  Height:  |  Size: 1.8 MiB

View File

Before

Width:  |  Height:  |  Size: 905 KiB

After

Width:  |  Height:  |  Size: 905 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

Before

Width:  |  Height:  |  Size: 437 KiB

After

Width:  |  Height:  |  Size: 437 KiB

View File

Before

Width:  |  Height:  |  Size: 444 KiB

After

Width:  |  Height:  |  Size: 444 KiB

View File

@@ -0,0 +1 @@
A music streaming app for Subsonic-API-compatible servers

1
metadata/en-US/title.txt Normal file
View File

@@ -0,0 +1 @@
Subtracks

View File

@@ -1,6 +1,6 @@
{
"name": "subtracks",
"version": "0.1.0",
"version": "1.0.1",
"private": true,
"license": "GPL-3.0-only",
"scripts": {
@@ -26,6 +26,7 @@
"@react-navigation/bottom-tabs": "^5.11.11",
"@react-navigation/material-top-tabs": "^5.3.15",
"@react-navigation/native": "^5.9.4",
"@xmldom/xmldom": "^0.7.2",
"immer": "^9.0.5",
"lodash.debounce": "^4.0.8",
"md5": "^2.3.0",
@@ -45,7 +46,6 @@
"react-native-vector-icons": "^8.1.0",
"react-native-webview": "^11.13.0",
"uuid": "^8.3.2",
"xmldom": "^0.5.0",
"zustand": "^3.5.7"
},
"devDependencies": {
@@ -59,7 +59,7 @@
"@types/react-native-vector-icons": "^6.4.7",
"@types/react-test-renderer": "^16.9.2",
"@types/uuid": "^8.3.0",
"@types/xmldom": "^0.1.30",
"@types/xmldom": "^0.1.31",
"babel-jest": "^26.6.3",
"babel-plugin-module-resolver": "^4.1.0",
"eslint": "^7.14.0",

View File

@@ -46,7 +46,7 @@
"allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */,
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */,
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
"skipLibCheck": false /* Skip type checking of declaration files. */
"skipLibCheck": false /* Skip type checking of declaration files. */,
/* Source Map Options */
// "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
@@ -57,6 +57,7 @@
/* Experimental Options */
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
"resolveJsonModule": true
},
"exclude": ["node_modules", "babel.config.js", "metro.config.js", "jest.config.js"]
}

View File

@@ -1388,10 +1388,10 @@
resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.0.tgz#215c231dff736d5ba92410e6d602050cce7e273f"
integrity sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==
"@types/xmldom@^0.1.30":
version "0.1.30"
resolved "https://registry.yarnpkg.com/@types/xmldom/-/xmldom-0.1.30.tgz#d36d9a7d64af4693d3b18d5dc02ce432a95be12e"
integrity sha512-edqgAFXMEtVvaBZ3YnhamvmrHjoYpuxETmnb0lbTZmf/dXpAsO9ZKotUO4K2rn2SIZBDFCMOuA7fOe0H6dRZcA==
"@types/xmldom@^0.1.31":
version "0.1.31"
resolved "https://registry.yarnpkg.com/@types/xmldom/-/xmldom-0.1.31.tgz#519b647cfc66debf82cdf50e49763c8fdee553d6"
integrity sha512-bVy7s0nvaR5D1mT1a8ZkByHWNOGb6Vn4yi5TWhEdmyKlAG+08SA7Md6+jH+tYmMLueAwNeWvHHpeKrr6S4c4BA==
"@types/yargs-parser@*":
version "20.2.0"
@@ -1465,6 +1465,11 @@
dependencies:
eslint-visitor-keys "^1.1.0"
"@xmldom/xmldom@^0.7.2":
version "0.7.2"
resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.2.tgz#d920079e66806b2626b5311955f6a7c4bed1cba8"
integrity sha512-t/Zqo0ewes3iq6zGqEqJNUWI27Acr3jkmSUNp6E3nl0Z2XbtqAG5XYqPNLdYonILmhcxANsIidh69tHzjXtuRg==
abab@^2.0.3, abab@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"