Skip to content

Commit 2bb4ad1

Browse files
committed
Add PyPi packaging and prepare v0.9.0
Moved to an src-based layout Moved dependencies from requirements.txt to pyproject.toml Add project metadata into __about__.py Wrap application into a denonremote module Add file headers with SPDX metadata Fixed communication timeout bugs Added missing types Add 3 more favorite sources, now 6 Revamped, simplified and improved kv layout Power button now blinks when muted, just like the hardware Add support for maximum volume message Improved PyInstaller packaging Add assets sources Bumped dependencies versions to current stable Bumped version Update screenshots and README.md
1 parent b16632a commit 2bb4ad1

50 files changed

Lines changed: 1236 additions & 519 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ venv
66
build
77
dist
88
__pycache__
9-
# Asset sources
10-
assets
9+
.buildozer
10+
# Build version
11+
src/denonremote/__build__.py

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ Denon Remote
44
Control [Denon Professional DN-500AV surround preamplifier](https://www.denonpro.com/index.php/products/view/dn-500av)
55
remotely.
66

7-
![Screenshot](screenshot-v0.7.0-main.png)
7+
![Screenshot](data/screenshots/screenshot-v0.9.0-main.png)
88

9-
![Settings Screenshot](screenshot-v0.7.0-settings.png)
9+
![Settings Screenshot](data/screenshots/screenshot-v0.9.0-settings.png)
1010

1111
Author: Raphael Doursenaud <rdoursenaud+denonremote@gmail.com>
1212

@@ -26,7 +26,7 @@ Fonts used:
2626

2727
#### Target hardware
2828

29-
- [x] Denon Professional DN-500AV (Seems based on the same platform as the Denon AVR-1912 and AVR-2112CI.)
29+
- [x] Denon Professional DN-500AV (Seems to be based on the same platform as the Denon AVR-1912 and AVR-2112CI)
3030
- [ ] More? Contributions welcome!
3131

3232

@@ -124,7 +124,7 @@ Fonts used:
124124
- [x] [UPX](https://upx.github.io/) support
125125
- How to build:
126126
- Review [denonremote.spec](denonremote.spec)
127-
- Use `python -m PyInstaller denonremote.spec --upx-dir=c:\upx-3.96-win64`
127+
- Use `python -m PyInstaller --clean --upx-dir=c:\upx-3.96-win64 denonremote.spec`
128128
- [ ] [cx-Freeze](https://pypi.org/project/cx-Freeze/) for multiplatform support?
129129
- [ ] VST plugin? (Not required if MIDI input is implemented but would be neat to have in the monitoring section of a
130130
DAW)

buildozer.spec

Lines changed: 329 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,329 @@
1+
[app]
2+
3+
# (str) Title of your application
4+
title = Denon Remote
5+
6+
# (str) Package name
7+
package.name = denonremote
8+
9+
# (str) Package domain (needed for android/ios packaging)
10+
package.domain = org.test
11+
12+
# (str) Source code where the main.py live
13+
source.dir = src/denonremote
14+
15+
# (list) Source files to include (let empty to include all the files)
16+
source.include_exts = py,png,jpg,kv,atlas,ttf
17+
18+
# (list) List of inclusions using pattern matching
19+
source.include_patterns = assets/*,images/*.png
20+
21+
# (list) Source files to exclude (let empty to not exclude anything)
22+
source.exclude_exts = spec
23+
24+
# (list) List of directory to exclude (let empty to not exclude anything)
25+
source.exclude_dirs = .idea, build, dist, sources, venv
26+
27+
# (list) List of exclusions using pattern matching
28+
#source.exclude_patterns = license,images/*/*.jpg
29+
30+
# (str) Application versioning (method 1)
31+
#version = 0.2.0
32+
33+
# (str) Application versioning (method 2)
34+
version.regex = __version__ = ['"](.*)['"]
35+
version.filename = %(source.dir)s/__about__.py
36+
37+
# (list) Application requirements
38+
# comma separated e.g. requirements = sqlite3,kivy
39+
requirements = python3,kivy,twisted
40+
41+
# (str) Custom source folders for requirements
42+
# Sets custom source for any requirements with recipes
43+
# requirements.source.kivy = ../../kivy
44+
45+
# (list) Garden requirements
46+
#garden_requirements =
47+
48+
# (str) Presplash of the application
49+
#presplash.filename = %(source.dir)s/data/presplash.png
50+
51+
# (str) Icon of the application
52+
#icon.filename = %(source.dir)s/data/icon.png
53+
54+
# (str) Supported orientation (one of landscape, sensorLandscape, portrait or all)
55+
orientation = portrait
56+
57+
# (list) List of service to declare
58+
#services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY
59+
60+
#
61+
# OSX Specific
62+
#
63+
64+
#
65+
# author = © Copyright Info
66+
67+
# change the major version of python used by the app
68+
osx.python_version = 3
69+
70+
# Kivy version to use
71+
osx.kivy_version = 2.0.0
72+
73+
#
74+
# Android specific
75+
#
76+
77+
# (bool) Indicate if the application should be fullscreen or not
78+
fullscreen = 0
79+
80+
# (string) Presplash background color (for new android toolchain)
81+
# Supported formats are: #RRGGBB #AARRGGBB or one of the following names:
82+
# red, blue, green, black, white, gray, cyan, magenta, yellow, lightgray,
83+
# darkgray, grey, lightgrey, darkgrey, aqua, fuchsia, lime, maroon, navy,
84+
# olive, purple, silver, teal.
85+
#android.presplash_color = #FFFFFF
86+
87+
# (list) Permissions
88+
#android.permissions = INTERNET
89+
90+
# (int) Target Android API, should be as high as possible.
91+
#android.api = 27
92+
93+
# (int) Minimum API your APK will support.
94+
#android.minapi = 21
95+
96+
# (int) Android SDK version to use
97+
#android.sdk = 20
98+
99+
# (str) Android NDK version to use
100+
#android.ndk = 19b
101+
102+
# (int) Android NDK API to use. This is the minimum API your app will support, it should usually match android.minapi.
103+
#android.ndk_api = 21
104+
105+
# (bool) Use --private data storage (True) or --dir public storage (False)
106+
#android.private_storage = True
107+
108+
# (str) Android NDK directory (if empty, it will be automatically downloaded.)
109+
#android.ndk_path =
110+
111+
# (str) Android SDK directory (if empty, it will be automatically downloaded.)
112+
#android.sdk_path =
113+
114+
# (str) ANT directory (if empty, it will be automatically downloaded.)
115+
#android.ant_path =
116+
117+
# (bool) If True, then skip trying to update the Android sdk
118+
# This can be useful to avoid excess Internet downloads or save time
119+
# when an update is due and you just want to test/build your package
120+
# android.skip_update = False
121+
122+
# (bool) If True, then automatically accept SDK license
123+
# agreements. This is intended for automation only. If set to False,
124+
# the default, you will be shown the license when first running
125+
# buildozer.
126+
# android.accept_sdk_license = False
127+
128+
# (str) Android entry point, default is ok for Kivy-based app
129+
#android.entrypoint = org.renpy.android.PythonActivity
130+
131+
# (str) Android app theme, default is ok for Kivy-based app
132+
# android.apptheme = "@android:style/Theme.NoTitleBar"
133+
134+
# (list) Pattern to whitelist for the whole project
135+
#android.whitelist =
136+
137+
# (str) Path to a custom whitelist file
138+
#android.whitelist_src =
139+
140+
# (str) Path to a custom blacklist file
141+
#android.blacklist_src =
142+
143+
# (list) List of Java .jar files to add to the libs so that pyjnius can access
144+
# their classes. Don't add jars that you do not need, since extra jars can slow
145+
# down the build process. Allows wildcards matching, for example:
146+
# OUYA-ODK/libs/*.jar
147+
#android.add_jars = foo.jar,bar.jar,path/to/more/*.jar
148+
149+
# (list) List of Java files to add to the android project (can be java or a
150+
# directory containing the files)
151+
#android.add_src =
152+
153+
# (list) Android AAR archives to add (currently works only with sdl2_gradle
154+
# bootstrap)
155+
#android.add_aars =
156+
157+
# (list) Gradle dependencies to add (currently works only with sdl2_gradle
158+
# bootstrap)
159+
#android.gradle_dependencies =
160+
161+
# (list) add java compile options
162+
# this can for example be necessary when importing certain java libraries using the 'android.gradle_dependencies' option
163+
# see https://developer.android.com/studio/write/java8-support for further information
164+
# android.add_compile_options = "sourceCompatibility = 1.8", "targetCompatibility = 1.8"
165+
166+
# (list) Gradle repositories to add {can be necessary for some android.gradle_dependencies}
167+
# please enclose in double quotes
168+
# e.g. android.gradle_repositories = "maven { url 'https://kotlin.bintray.com/ktor' }"
169+
#android.add_gradle_repositories =
170+
171+
# (list) packaging options to add
172+
# see https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.PackagingOptions.html
173+
# can be necessary to solve conflicts in gradle_dependencies
174+
# please enclose in double quotes
175+
# e.g. android.add_packaging_options = "exclude 'META-INF/common.kotlin_module'", "exclude 'META-INF/*.kotlin_module'"
176+
#android.add_gradle_repositories =
177+
178+
# (list) Java classes to add as activities to the manifest.
179+
#android.add_activities = com.example.ExampleActivity
180+
181+
# (str) OUYA Console category. Should be one of GAME or APP
182+
# If you leave this blank, OUYA support will not be enabled
183+
#android.ouya.category = GAME
184+
185+
# (str) Filename of OUYA Console icon. It must be a 732x412 png image.
186+
#android.ouya.icon.filename = %(source.dir)s/data/ouya_icon.png
187+
188+
# (str) XML file to include as an intent filters in <activity> tag
189+
#android.manifest.intent_filters =
190+
191+
# (str) launchMode to set for the main activity
192+
#android.manifest.launch_mode = standard
193+
194+
# (list) Android additional libraries to copy into libs/armeabi
195+
#android.add_libs_armeabi = libs/android/*.so
196+
#android.add_libs_armeabi_v7a = libs/android-v7/*.so
197+
#android.add_libs_arm64_v8a = libs/android-v8/*.so
198+
#android.add_libs_x86 = libs/android-x86/*.so
199+
#android.add_libs_mips = libs/android-mips/*.so
200+
201+
# (bool) Indicate whether the screen should stay on
202+
# Don't forget to add the WAKE_LOCK permission if you set this to True
203+
#android.wakelock = False
204+
205+
# (list) Android application meta-data to set (key=value format)
206+
#android.meta_data =
207+
208+
# (list) Android library project to add (will be added in the
209+
# project.properties automatically.)
210+
#android.library_references =
211+
212+
# (list) Android shared libraries which will be added to AndroidManifest.xml using <uses-library> tag
213+
#android.uses_library =
214+
215+
# (str) Android logcat filters to use
216+
#android.logcat_filters = *:S python:D
217+
218+
# (bool) Copy library instead of making a libpymodules.so
219+
#android.copy_libs = 1
220+
221+
# (str) The Android arch to build for, choices: armeabi-v7a, arm64-v8a, x86, x86_64
222+
android.arch = armeabi-v7a
223+
224+
# (int) overrides automatic versionCode computation (used in build.gradle)
225+
# this is not the same as app version and should only be edited if you know what you're doing
226+
# android.numeric_version = 1
227+
228+
#
229+
# Python for android (p4a) specific
230+
#
231+
232+
# (str) python-for-android fork to use, defaults to upstream (kivy)
233+
#p4a.fork = kivy
234+
235+
# (str) python-for-android branch to use, defaults to master
236+
#p4a.branch = master
237+
238+
# (str) python-for-android git clone directory (if empty, it will be automatically cloned from github)
239+
#p4a.source_dir =
240+
241+
# (str) The directory in which python-for-android should look for your own build recipes (if any)
242+
#p4a.local_recipes =
243+
244+
# (str) Filename to the hook for p4a
245+
#p4a.hook =
246+
247+
# (str) Bootstrap to use for android builds
248+
# p4a.bootstrap = sdl2
249+
250+
# (int) connector number to specify an explicit --connector= p4a argument (eg for bootstrap flask)
251+
#p4a.connector =
252+
253+
254+
#
255+
# iOS specific
256+
#
257+
258+
# (str) Path to a custom kivy-ios folder
259+
#ios.kivy_ios_dir = ../kivy-ios
260+
# Alternately, specify the URL and branch of a git checkout:
261+
ios.kivy_ios_url = https://github.com/kivy/kivy-ios
262+
ios.kivy_ios_branch = master
263+
264+
# Another platform dependency: ios-deploy
265+
# Uncomment to use a custom checkout
266+
#ios.ios_deploy_dir = ../ios_deploy
267+
# Or specify URL and branch
268+
ios.ios_deploy_url = https://github.com/phonegap/ios-deploy
269+
ios.ios_deploy_branch = 1.7.0
270+
271+
# (str) Name of the certificate to use for signing the debug version
272+
# Get a list of available identities: buildozer ios list_identities
273+
#ios.codesign.debug = "iPhone Developer: <lastname> <firstname> (<hexstring>)"
274+
275+
# (str) Name of the certificate to use for signing the release version
276+
#ios.codesign.release = %(ios.codesign.debug)s
277+
278+
279+
[buildozer]
280+
281+
# (int) Log level (0 = error only, 1 = info, 2 = debug (with command output))
282+
log_level = 2
283+
284+
# (int) Display warning if buildozer is run as root (0 = False, 1 = True)
285+
warn_on_root = 1
286+
287+
# (str) Path to build artifact storage, absolute or relative to spec file
288+
# build_dir = ./.buildozer
289+
290+
# (str) Path to build output (i.e. .apk, .ipa) storage
291+
# bin_dir = ./bin
292+
293+
# -----------------------------------------------------------------------------
294+
# List as sections
295+
#
296+
# You can define all the "list" as [section:key].
297+
# Each line will be considered as a option to the list.
298+
# Let's take [app] / source.exclude_patterns.
299+
# Instead of doing:
300+
#
301+
#[app]
302+
#source.exclude_patterns = license,data/audio/*.wav,data/images/original/*
303+
#
304+
# This can be translated into:
305+
#
306+
#[app:source.exclude_patterns]
307+
#license
308+
#data/audio/*.wav
309+
#data/images/original/*
310+
#
311+
312+
313+
# -----------------------------------------------------------------------------
314+
# Profiles
315+
#
316+
# You can extend section / key with a profile
317+
# For example, you want to deploy a demo version of your application without
318+
# HD content. You could first change the title to add "(demo)" in the name
319+
# and extend the excluded directories to remove the HD content.
320+
#
321+
#[app@demo]
322+
#title = My Application (demo)
323+
#
324+
#[app:source.exclude_patterns@demo]
325+
#images/hd/*
326+
#
327+
# Then, invoke the command line with the "demo" profile:
328+
#
329+
#buildozer --profile demo android debug

data/assets/DN-500AV_Front.jpg

111 KB
Loading

data/assets/DN-500AV_Front.xcf

87.3 KB
Binary file not shown.

data/assets/icon_16.png

13.9 KB
Loading

data/assets/icon_24.png

19.8 KB
Loading

data/assets/icon_32.png

16.6 KB
Loading

data/assets/icon_48.png

24 KB
Loading

data/assets/icon_64.png

25.5 KB
Loading

0 commit comments

Comments
 (0)