Rename project and fix bugs
6
Makefile
@ -6,7 +6,7 @@ apk:
|
|||||||
mkdir -p ./dist
|
mkdir -p ./dist
|
||||||
|
|
||||||
fetchapk:
|
fetchapk:
|
||||||
cp ./sbapp/bin/sideband-*-release-unsigned.apk ./dist/
|
cp ./sbapp/bin/occ-*-release-unsigned.apk ./dist/
|
||||||
|
|
||||||
install:
|
install:
|
||||||
make -C sbapp install
|
make -C sbapp install
|
||||||
@ -51,8 +51,8 @@ sign_release:
|
|||||||
@read VOID
|
@read VOID
|
||||||
if [ ! -f "./key.keystore" ]; then keytool -genkey -v -keystore key.keystore -keyalg RSA -keysize 4096 -validity 10000 -alias app; fi
|
if [ ! -f "./key.keystore" ]; then keytool -genkey -v -keystore key.keystore -keyalg RSA -keysize 4096 -validity 10000 -alias app; fi
|
||||||
VERSION=$(shell ls ./dist/*.apk | cut -d\- -f 2 | head -n 1); \
|
VERSION=$(shell ls ./dist/*.apk | cut -d\- -f 2 | head -n 1); \
|
||||||
zipalign -p 4 ./dist/sideband-*-release-unsigned.apk ./dist/sideband-$$VERSION-release.apk; \
|
zipalign -p 4 ./dist/occ-*-release-unsigned.apk ./dist/occ-$$VERSION-release.apk; \
|
||||||
apksigner sign --ks-key-alias app --ks key.keystore ./dist/sideband-$$VERSION-release.apk; \
|
apksigner sign --ks-key-alias app --ks key.keystore ./dist/occ-$$VERSION-release.apk; \
|
||||||
|
|
||||||
upload:
|
upload:
|
||||||
@echo Ready to publish release, hit enter to continue
|
@echo Ready to publish release, hit enter to continue
|
||||||
|
@ -20,33 +20,33 @@ pacthfiles: patchsdl injectxml patchpycodec2
|
|||||||
patchsdl:
|
patchsdl:
|
||||||
# Pach USB HID behaviour
|
# Pach USB HID behaviour
|
||||||
cp patches/HIDDeviceUSB.java .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/bootstrap_builds/sdl2/jni/SDL/android-project/app/src/main/java/org/libsdl/app/HIDDeviceUSB.java
|
cp patches/HIDDeviceUSB.java .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/bootstrap_builds/sdl2/jni/SDL/android-project/app/src/main/java/org/libsdl/app/HIDDeviceUSB.java
|
||||||
cp patches/HIDDeviceUSB.java .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/sideband/src/main/java/org/libsdl/app/HIDDeviceUSB.java
|
cp patches/HIDDeviceUSB.java .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/occ/src/main/java/org/libsdl/app/HIDDeviceUSB.java
|
||||||
cp patches/HIDDeviceUSB.java .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/sideband/jni/SDL/android-project/app/src/main/java/org/libsdl/app/HIDDeviceUSB.java
|
cp patches/HIDDeviceUSB.java .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/occ/jni/SDL/android-project/app/src/main/java/org/libsdl/app/HIDDeviceUSB.java
|
||||||
|
|
||||||
# Pach service loader
|
# Pach service loader
|
||||||
cp patches/PythonService.java .buildozer/android/platform/python-for-android/pythonforandroid/bootstraps/common/build/src/main/java/org/kivy/android/PythonService.java
|
cp patches/PythonService.java .buildozer/android/platform/python-for-android/pythonforandroid/bootstraps/common/build/src/main/java/org/kivy/android/PythonService.java
|
||||||
cp patches/PythonService.java .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/bootstrap_builds/sdl2/src/main/java/org/kivy/android/PythonService.java
|
cp patches/PythonService.java .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/bootstrap_builds/sdl2/src/main/java/org/kivy/android/PythonService.java
|
||||||
cp patches/PythonService.java .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/sideband/src/main/java/org/kivy/android/PythonService.java
|
cp patches/PythonService.java .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/occ/src/main/java/org/kivy/android/PythonService.java
|
||||||
|
|
||||||
patchpycodec2:
|
patchpycodec2:
|
||||||
patchelf --replace-needed libcodec2.so.1.2 libcodec2.so .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/sideband/_python_bundle__arm64-v8a/_python_bundle/site-packages/pycodec2/pycodec2.so
|
patchelf --replace-needed libcodec2.so.1.2 libcodec2.so .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/occ/_python_bundle__arm64-v8a/_python_bundle/site-packages/pycodec2/pycodec2.so
|
||||||
patchelf --replace-needed libcodec2.so.1.2 libcodec2.so .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/sideband/_python_bundle__armeabi-v7a/_python_bundle/site-packages/pycodec2/pycodec2.so
|
patchelf --replace-needed libcodec2.so.1.2 libcodec2.so .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/occ/_python_bundle__armeabi-v7a/_python_bundle/site-packages/pycodec2/pycodec2.so
|
||||||
|
|
||||||
injectxml:
|
injectxml:
|
||||||
# mkdir /home/markqvist/.local/lib/python3.11/site-packages/pythonforandroid/bootstraps/sdl2/build/src/main/xml
|
# mkdir /home/markqvist/.local/lib/python3.11/site-packages/pythonforandroid/bootstraps/sdl2/build/src/main/xml
|
||||||
# Inject XML on arm64-v8a
|
# Inject XML on arm64-v8a
|
||||||
mkdir -p .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/sideband/src/main/res/xml
|
mkdir -p .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/occ/src/main/res/xml
|
||||||
mkdir -p .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/sideband/templates
|
mkdir -p .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/occ/templates
|
||||||
cp patches/device_filter.xml .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/sideband/src/main/res/xml/
|
cp patches/device_filter.xml .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/occ/src/main/res/xml/
|
||||||
cp patches/file_paths.xml .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/sideband/src/main/res/xml/
|
cp patches/file_paths.xml .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/occ/src/main/res/xml/
|
||||||
cp patches/AndroidManifest.tmpl.xml .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/sideband/templates/
|
cp patches/AndroidManifest.tmpl.xml .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/occ/templates/
|
||||||
cp patches/p4a_build.py .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/sideband/build.py
|
cp patches/p4a_build.py .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/occ/build.py
|
||||||
|
|
||||||
debug:
|
debug:
|
||||||
. venv/bin/activate; buildozer android debug
|
. venv/bin/activate; buildozer android debug
|
||||||
|
|
||||||
prebake:
|
prebake:
|
||||||
ifneq (,$(wildcard .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/sideband/src/main/res/xml/device_filter.xml))
|
ifneq (,$(wildcard .buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/occ/src/main/res/xml/device_filter.xml))
|
||||||
@echo Device filter XML exists, skipping prebake
|
@echo Device filter XML exists, skipping prebake
|
||||||
else
|
else
|
||||||
@(echo Prebaking build before patching files...)
|
@(echo Prebaking build before patching files...)
|
||||||
@ -88,10 +88,10 @@ version:
|
|||||||
@(echo $$(python ./gv.py))
|
@(echo $$(python ./gv.py))
|
||||||
|
|
||||||
install:
|
install:
|
||||||
adb install bin/sideband-$$(python ./gv.py)-arm64-v8a_armeabi-v7a-release.apk
|
adb install bin/occ-$$(python ./gv.py)-arm64-v8a_armeabi-v7a-release.apk
|
||||||
|
|
||||||
console:
|
console:
|
||||||
(adb logcat | grep "python\|sidebandservice")
|
(adb logcat | grep "python\|occservice")
|
||||||
|
|
||||||
getrns:
|
getrns:
|
||||||
(cp -rv ../../Reticulum/RNS ./)
|
(cp -rv ../../Reticulum/RNS ./)
|
||||||
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 755 B |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 905 B |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 20 KiB |
@ -3,14 +3,14 @@
|
|||||||
Comment[en_US]=Messaging, telemetry and remote control over LXMF
|
Comment[en_US]=Messaging, telemetry and remote control over LXMF
|
||||||
Comment=Messaging, telemetry and remote control over LXMF
|
Comment=Messaging, telemetry and remote control over LXMF
|
||||||
Encoding=UTF-8
|
Encoding=UTF-8
|
||||||
Exec=sideband
|
Exec=opencom_companion
|
||||||
GenericName[en_US]=LXMF client
|
GenericName[en_US]=LXMF client
|
||||||
GenericName=LXMF client
|
GenericName=LXMF client
|
||||||
Icon=io.unsigned.sideband.png
|
Icon=uk.co.liberatedsystems.opencom_companion.png
|
||||||
Categories=Utility
|
Categories=Utility
|
||||||
MimeType=
|
MimeType=
|
||||||
Name[en_US]=Sideband
|
Name[en_US]=openCom Companion
|
||||||
Name=Sideband
|
Name=openCom Companion
|
||||||
Path=
|
Path=
|
||||||
StartupNotify=true
|
StartupNotify=true
|
||||||
Terminal=false
|
Terminal=false
|
BIN
sbapp/assets/uk.co.liberatedsystems.occ.png
Normal file
After Width: | Height: | Size: 10 KiB |
@ -1,7 +1,7 @@
|
|||||||
[app]
|
[app]
|
||||||
title = Sideband
|
title = OCC
|
||||||
package.name = sideband
|
package.name = occ
|
||||||
package.domain = io.unsigned
|
package.domain = uk.co.liberatedsystems
|
||||||
|
|
||||||
source.dir = .
|
source.dir = .
|
||||||
source.include_exts = py,png,jpg,jpeg,webp,ttf,kv,pyi,typed,so,0,1,2,3,atlas,frag,html,css,js,whl,zip,gz,woff2,pdf,epub,pgm
|
source.include_exts = py,png,jpg,jpeg,webp,ttf,kv,pyi,typed,so,0,1,2,3,atlas,frag,html,css,js,whl,zip,gz,woff2,pdf,epub,pgm
|
||||||
|
@ -60,13 +60,13 @@ package_data = {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
print("Freezing Sideband "+__version__+" "+__variant__)
|
print("Freezing openCom Companion "+__version__+" "+__variant__)
|
||||||
|
|
||||||
if build_appimage:
|
if build_appimage:
|
||||||
global_excludes = [".buildozer", "build", "dist"]
|
global_excludes = [".buildozer", "build", "dist"]
|
||||||
# Dependencies are automatically detected, but they might need fine-tuning.
|
# Dependencies are automatically detected, but they might need fine-tuning.
|
||||||
appimage_options = {
|
appimage_options = {
|
||||||
"target_name": "Sideband",
|
"target_name": "openCom Companion",
|
||||||
"target_version": __version__+" "+__variant__,
|
"target_version": __version__+" "+__variant__,
|
||||||
"include_files": [],
|
"include_files": [],
|
||||||
"excludes": [],
|
"excludes": [],
|
||||||
@ -76,19 +76,19 @@ if build_appimage:
|
|||||||
}
|
}
|
||||||
|
|
||||||
cx_Freeze.setup(
|
cx_Freeze.setup(
|
||||||
name="Sideband",
|
name="openCom Companion",
|
||||||
version=__version__,
|
version=__version__,
|
||||||
author="Mark Qvist",
|
author="Liberated Embedded Systems",
|
||||||
author_email="mark@unsigned.io",
|
author_email="contact@liberatedsystems.co.uk",
|
||||||
url="https://unsigned.io/sideband",
|
url="https://git.liberatedsystems.co.uk/jacob.eva/openCom-Companion",
|
||||||
executables=[
|
executables=[
|
||||||
cx_Freeze.Executable(
|
cx_Freeze.Executable(
|
||||||
script="main.py",
|
script="main.py",
|
||||||
base="console",
|
base="console",
|
||||||
target_name="Sideband",
|
target_name="openCom Companion",
|
||||||
shortcut_name="Sideband",
|
shortcut_name="openCom Companion",
|
||||||
icon="assets/icon.png",
|
icon="assets/icon.png",
|
||||||
copyright="Copyright (c) 2024 Mark Qvist",
|
copyright="Copyright (c) 2024 Liberated Embedded Systems",
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
options={"build_appimage": appimage_options},
|
options={"build_appimage": appimage_options},
|
||||||
|
@ -5,7 +5,7 @@ __variant__ = "beta"
|
|||||||
|
|
||||||
import sys
|
import sys
|
||||||
import argparse
|
import argparse
|
||||||
parser = argparse.ArgumentParser(description="Sideband LXMF Client")
|
parser = argparse.ArgumentParser(description="openCom Companion LXMF Client")
|
||||||
parser.add_argument("-v", "--verbose", action='store_true', default=False, help="increase logging verbosity")
|
parser.add_argument("-v", "--verbose", action='store_true', default=False, help="increase logging verbosity")
|
||||||
parser.add_argument("-c", "--config", action='store', default=None, help="specify path of config directory")
|
parser.add_argument("-c", "--config", action='store', default=None, help="specify path of config directory")
|
||||||
parser.add_argument("-d", "--daemon", action='store_true', default=False, help="run as a daemon, without user interface")
|
parser.add_argument("-d", "--daemon", action='store_true', default=False, help="run as a daemon, without user interface")
|
||||||
@ -243,7 +243,7 @@ class SidebandApp(MDApp):
|
|||||||
PAUSED = 0x02
|
PAUSED = 0x02
|
||||||
STOPPING = 0x03
|
STOPPING = 0x03
|
||||||
|
|
||||||
PKGNAME = "io.unsigned.sideband"
|
PKGNAME = "uk.co.liberatedsystems.occ"
|
||||||
|
|
||||||
SERVICE_TIMEOUT = 30
|
SERVICE_TIMEOUT = 30
|
||||||
|
|
||||||
@ -252,7 +252,7 @@ class SidebandApp(MDApp):
|
|||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self.title = "Sideband"
|
self.title = "openCom Companion"
|
||||||
self.app_state = SidebandApp.STARTING
|
self.app_state = SidebandApp.STARTING
|
||||||
self.android_service = None
|
self.android_service = None
|
||||||
self.app_dir = plyer.storagepath.get_application_dir()
|
self.app_dir = plyer.storagepath.get_application_dir()
|
||||||
@ -372,7 +372,7 @@ class SidebandApp(MDApp):
|
|||||||
|
|
||||||
RNS.log("Launching platform-specific service for RNS and LXMF")
|
RNS.log("Launching platform-specific service for RNS and LXMF")
|
||||||
if RNS.vendor.platformutils.get_platform() == "android":
|
if RNS.vendor.platformutils.get_platform() == "android":
|
||||||
self.android_service = autoclass('io.unsigned.sideband.ServiceSidebandservice')
|
self.android_service = autoclass('uk.co.liberatedsystems.occ.ServiceSidebandservice')
|
||||||
mActivity = autoclass('org.kivy.android.PythonActivity').mActivity
|
mActivity = autoclass('org.kivy.android.PythonActivity').mActivity
|
||||||
argument = self.app_dir
|
argument = self.app_dir
|
||||||
self.android_service.start(mActivity, argument)
|
self.android_service.start(mActivity, argument)
|
||||||
@ -629,7 +629,7 @@ class SidebandApp(MDApp):
|
|||||||
image.save(file_path)
|
image.save(file_path)
|
||||||
|
|
||||||
i_file = File(file_path)
|
i_file = File(file_path)
|
||||||
image_uri = FileProvider.getUriForFile(mActivity, "io.unsigned.sideband.provider", i_file)
|
image_uri = FileProvider.getUriForFile(mActivity, "uk.co.liberatedsystems.occ.provider", i_file)
|
||||||
|
|
||||||
shareIntent = Intent()
|
shareIntent = Intent()
|
||||||
shareIntent.setAction(Intent.ACTION_SEND)
|
shareIntent.setAction(Intent.ACTION_SEND)
|
||||||
@ -767,7 +767,7 @@ class SidebandApp(MDApp):
|
|||||||
ok_button = MDRectangleFlatButton(text="OK",font_size=dp(18))
|
ok_button = MDRectangleFlatButton(text="OK",font_size=dp(18))
|
||||||
dialog = MDDialog(
|
dialog = MDDialog(
|
||||||
title="Storage Permission",
|
title="Storage Permission",
|
||||||
text="Sideband needs external storage permission to read offline map files.\n\nOn this Android version, the Manage All Files permission is needed, since normal external storage permission is no longer supported.\n\nSideband will only ever read and write to files you select, and does not read any other data from your system.",
|
text="openCom Companion needs external storage permission to read offline map files.\n\nOn this Android version, the Manage All Files permission is needed, since normal external storage permission is no longer supported.\n\nopenCom Companion will only ever read and write to files you select, and does not read any other data from your system.",
|
||||||
buttons=[ ok_button ],
|
buttons=[ ok_button ],
|
||||||
)
|
)
|
||||||
def dl_ok(s):
|
def dl_ok(s):
|
||||||
@ -867,7 +867,7 @@ class SidebandApp(MDApp):
|
|||||||
if RNS.vendor.platformutils.is_android() and not self.sideband.service_available():
|
if RNS.vendor.platformutils.is_android() and not self.sideband.service_available():
|
||||||
if time.time() - self.service_last_available > SidebandApp.SERVICE_TIMEOUT:
|
if time.time() - self.service_last_available > SidebandApp.SERVICE_TIMEOUT:
|
||||||
if self.app_state == SidebandApp.ACTIVE:
|
if self.app_state == SidebandApp.ACTIVE:
|
||||||
info_text = "The Reticulum and LXMF service seem to have disappeared, and Sideband is no longer connected. This should not happen, and probably indicates a bug in the background service. Please restart Sideband to regain connectivity."
|
info_text = "The Reticulum and LXMF service seem to have disappeared, and openCom Companion is no longer connected. This should not happen, and probably indicates a bug in the background service. Please restart openCom Companion to regain connectivity."
|
||||||
ok_button = MDRectangleFlatButton(text="OK",font_size=dp(18))
|
ok_button = MDRectangleFlatButton(text="OK",font_size=dp(18))
|
||||||
dialog = MDDialog(
|
dialog = MDDialog(
|
||||||
title="Error",
|
title="Error",
|
||||||
@ -1004,7 +1004,7 @@ class SidebandApp(MDApp):
|
|||||||
variant_str = ""
|
variant_str = ""
|
||||||
|
|
||||||
self.root.ids.screen_manager.app = self
|
self.root.ids.screen_manager.app = self
|
||||||
self.root.ids.app_version_info.text = "Sideband v"+__version__+variant_str
|
self.root.ids.app_version_info.text = "openCom Companion v"+__version__+variant_str
|
||||||
self.root.ids.nav_scrollview.effect_cls = ScrollEffect
|
self.root.ids.nav_scrollview.effect_cls = ScrollEffect
|
||||||
Clock.schedule_once(self.start_core, 0.25)
|
Clock.schedule_once(self.start_core, 0.25)
|
||||||
|
|
||||||
@ -1657,7 +1657,7 @@ class SidebandApp(MDApp):
|
|||||||
self.compat_error_dialog.dismiss()
|
self.compat_error_dialog.dismiss()
|
||||||
self.compat_error_dialog = MDDialog(
|
self.compat_error_dialog = MDDialog(
|
||||||
title="Could not load Codec2",
|
title="Could not load Codec2",
|
||||||
text="The Codec2 library could not be loaded. This likely means that you do not have the [b]codec2[/b] package or shared library installed on your system.\n\nThis library is normally installed automatically when Sideband is installed, but on some systems, this is not possible.\n\nTry installing it with a command such as [b]pamac install codec2[/b] or [b]apt install codec2[/b], or by compiling it from source for this system.",
|
text="The Codec2 library could not be loaded. This likely means that you do not have the [b]codec2[/b] package or shared library installed on your system.\n\nThis library is normally installed automatically when openCom Companion is installed, but on some systems, this is not possible.\n\nTry installing it with a command such as [b]pamac install codec2[/b] or [b]apt install codec2[/b], or by compiling it from source for this system.",
|
||||||
buttons=[
|
buttons=[
|
||||||
MDRectangleFlatButton(
|
MDRectangleFlatButton(
|
||||||
text="OK",
|
text="OK",
|
||||||
@ -2213,9 +2213,9 @@ class SidebandApp(MDApp):
|
|||||||
|
|
||||||
else:
|
else:
|
||||||
if self.sideband.reticulum.is_connected_to_shared_instance:
|
if self.sideband.reticulum.is_connected_to_shared_instance:
|
||||||
connectivity_status = "Sideband is connected via a shared Reticulum instance running on this system. Use the [b]rnstatus[/b] utility to obtain full connectivity info."
|
connectivity_status = "openCom Companion is connected via a shared Reticulum instance running on this system. Use the [b]rnstatus[/b] utility to obtain full connectivity info."
|
||||||
else:
|
else:
|
||||||
connectivity_status = "Sideband is currently running a standalone or master Reticulum instance on this system. Use the [b]rnstatus[/b] utility to obtain full connectivity info."
|
connectivity_status = "openCom Companion is currently running a standalone or master Reticulum instance on this system. Use the [b]rnstatus[/b] utility to obtain full connectivity info."
|
||||||
|
|
||||||
return connectivity_status
|
return connectivity_status
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -2463,8 +2463,8 @@ class SidebandApp(MDApp):
|
|||||||
str_comps += "\n - [b]Kivy[/b] (MIT License)\n - [b]Codec2[/b] (LGPL License)\n - [b]PyCodec2[/b] (BSD-3 License)"
|
str_comps += "\n - [b]Kivy[/b] (MIT License)\n - [b]Codec2[/b] (LGPL License)\n - [b]PyCodec2[/b] (BSD-3 License)"
|
||||||
str_comps += "\n - [b]PyDub[/b] (MIT License)\n - [b]PyOgg[/b] (Public Domain)"
|
str_comps += "\n - [b]PyDub[/b] (MIT License)\n - [b]PyOgg[/b] (Public Domain)"
|
||||||
str_comps += "\n - [b]GeoidHeight[/b] (LGPL License)\n - [b]Python[/b] (PSF License)"
|
str_comps += "\n - [b]GeoidHeight[/b] (LGPL License)\n - [b]Python[/b] (PSF License)"
|
||||||
str_comps += "\n\nGo to [u][ref=link]https://unsigned.io/donate[/ref][/u] to support the project.\n\nThe Sideband app is Copyright (c) 2024 Mark Qvist / unsigned.io\n\nPermission is granted to freely share and distribute binary copies of Sideband v"+__version__+" "+__variant__+", so long as no payment or compensation is charged for said distribution or sharing.\n\nIf you were charged or paid anything for this copy of Sideband, please report it to [b]license@unsigned.io[/b].\n\nTHIS IS EXPERIMENTAL SOFTWARE - SIDEBAND COMES WITH ABSOLUTELY NO WARRANTY - USE AT YOUR OWN RISK AND RESPONSIBILITY"
|
str_comps += "\n\nGo to [u][ref=link]https://unsigned.io/donate[/ref][/u] to support the upstream Sideband project.\n\nThe openCom Companion app is Copyright (c) 2024 Liberated Embedded Systems.\n\nPermission is granted to freely share and distribute binary copies of openCom Companion v"+__version__+" "+__variant__+", so long as no payment or compensation is charged for said distribution or sharing.\n\nIf you were charged or paid anything for this copy of openCom Companion, please report it to [b]contact@liberatedsystems.co.uk[/b].\n\nTHIS IS EXPERIMENTAL SOFTWARE - OPENCOM COMPANION COMES WITH ABSOLUTELY NO WARRANTY - USE AT YOUR OWN RISK AND RESPONSIBILITY"
|
||||||
info = "This is "+self.root.ids.app_version_info.text+", on RNS v"+RNS.__version__+" and LXMF v"+LXMF.__version__+".\n\nHumbly build using the following open components:\n\n"+str_comps
|
info = "This is "+self.root.ids.app_version_info.text+", on RNS v"+RNS.__version__+" and LXMF v"+LXMF.__version__+".\n\nHumbly built using the following open components:\n\n"+str_comps
|
||||||
self.information_screen.ids.information_info.text = info
|
self.information_screen.ids.information_info.text = info
|
||||||
self.information_screen.ids.information_info.bind(on_ref_press=link_exec)
|
self.information_screen.ids.information_info.bind(on_ref_press=link_exec)
|
||||||
|
|
||||||
@ -2558,7 +2558,7 @@ class SidebandApp(MDApp):
|
|||||||
|
|
||||||
info1_text = "\nYou can set your [b]Display Name[/b] to a custom value, or leave it as the default unspecified value. "
|
info1_text = "\nYou can set your [b]Display Name[/b] to a custom value, or leave it as the default unspecified value. "
|
||||||
info1_text += "This name will be included in any announces you send, and will be visible to others on the network. "
|
info1_text += "This name will be included in any announces you send, and will be visible to others on the network. "
|
||||||
info1_text += "\n\nYou can manually specify which [b]Propagation Node[/b] to use, but if none is specified, Sideband will "
|
info1_text += "\n\nYou can manually specify which [b]Propagation Node[/b] to use, but if none is specified, openCom Companion will "
|
||||||
info1_text += "automatically select one nearby."
|
info1_text += "automatically select one nearby."
|
||||||
if RNS.vendor.platformutils.is_android():
|
if RNS.vendor.platformutils.is_android():
|
||||||
info1_text += "\n\nDouble-tap any field to copy its value, and double-tap an empty field to paste into it."
|
info1_text += "\n\nDouble-tap any field to copy its value, and double-tap an empty field to paste into it."
|
||||||
@ -3133,13 +3133,13 @@ class SidebandApp(MDApp):
|
|||||||
|
|
||||||
if RNS.vendor.platformutils.get_platform() == "android":
|
if RNS.vendor.platformutils.get_platform() == "android":
|
||||||
if not self.sideband.getpersistent("service.is_controlling_connectivity"):
|
if not self.sideband.getpersistent("service.is_controlling_connectivity"):
|
||||||
info = "Sideband is connected via a shared Reticulum instance running on this system.\n\n"
|
info = "openCom Companion is connected via a shared Reticulum instance running on this system.\n\n"
|
||||||
info += "To configure connectivity, edit the relevant configuration file for the instance."
|
info += "To configure connectivity, edit the relevant configuration file for the instance."
|
||||||
self.connectivity_screen.ids.connectivity_info.text = info
|
self.connectivity_screen.ids.connectivity_info.text = info
|
||||||
con_hide_settings()
|
con_hide_settings()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
info = "By default, Sideband will try to discover and connect to any available Reticulum networks via active WiFi and/or Ethernet interfaces. If any Reticulum Transport Instances are found, Sideband will use these to connect to wider Reticulum networks. You can disable this behaviour if you don't want it.\n\n"
|
info = "By default, openCom Companion will try to discover and connect to any available Reticulum networks via active WiFi and/or Ethernet interfaces. If any Reticulum Transport Instances are found, openCom Companion will use these to connect to wider Reticulum networks. You can disable this behaviour if you don't want it.\n\n"
|
||||||
info += "You can also connect to a network via a remote or local Reticulum instance using TCP or I2P. [b]Please Note![/b] Connecting via I2P requires that you already have I2P running on your device, and that the SAM API is enabled.\n\n"
|
info += "You can also connect to a network via a remote or local Reticulum instance using TCP or I2P. [b]Please Note![/b] Connecting via I2P requires that you already have I2P running on your device, and that the SAM API is enabled.\n\n"
|
||||||
info += "For changes to connectivity to take effect, you must shut down and restart Sideband.\n"
|
info += "For changes to connectivity to take effect, you must shut down and restart Sideband.\n"
|
||||||
self.connectivity_screen.ids.connectivity_info.text = info
|
self.connectivity_screen.ids.connectivity_info.text = info
|
||||||
@ -3227,12 +3227,12 @@ class SidebandApp(MDApp):
|
|||||||
info = ""
|
info = ""
|
||||||
|
|
||||||
if self.sideband.reticulum.is_connected_to_shared_instance:
|
if self.sideband.reticulum.is_connected_to_shared_instance:
|
||||||
info = "Sideband is connected via a shared Reticulum instance running on this system.\n\n"
|
info = "openCom Companion is connected via a shared Reticulum instance running on this system.\n\n"
|
||||||
info += "To get connectivity status, use the [b]rnstatus[/b] utility.\n\n"
|
info += "To get connectivity status, use the [b]rnstatus[/b] utility.\n\n"
|
||||||
info += "To configure connectivity, edit the configuration file located at:\n\n"
|
info += "To configure connectivity, edit the configuration file located at:\n\n"
|
||||||
info += str(RNS.Reticulum.configpath)
|
info += str(RNS.Reticulum.configpath)
|
||||||
else:
|
else:
|
||||||
info = "Sideband is currently running a standalone or master Reticulum instance on this system.\n\n"
|
info = "openCom Companion is currently running a standalone or master Reticulum instance on this system.\n\n"
|
||||||
info += "To get connectivity status, use the [b]rnstatus[/b] utility.\n\n"
|
info += "To get connectivity status, use the [b]rnstatus[/b] utility.\n\n"
|
||||||
info += "To configure connectivity, edit the configuration file located at:\n\n"
|
info += "To configure connectivity, edit the configuration file located at:\n\n"
|
||||||
info += str(RNS.Reticulum.configpath)
|
info += str(RNS.Reticulum.configpath)
|
||||||
@ -3305,8 +3305,8 @@ class SidebandApp(MDApp):
|
|||||||
threading.Thread(target=lj, daemon=True).start()
|
threading.Thread(target=lj, daemon=True).start()
|
||||||
|
|
||||||
def repository_update_info(self, sender=None):
|
def repository_update_info(self, sender=None):
|
||||||
info = "Sideband includes a small repository of useful software and guides related to the Sideband and Reticulum ecosystem. You can start this repository to allow other people on your local network to download software and information directly from this device, without needing an Internet connection.\n\n"
|
info = "openCom Companion includes a small repository of useful software and guides related to the openCom Companion and Reticulum ecosystem. You can start this repository to allow other people on your local network to download software and information directly from this device, without needing an Internet connection.\n\n"
|
||||||
info += "If you want to share the Sideband application itself via the repository server, you must first download it into the local repository, using the \"Update Content\" button below.\n\n"
|
info += "If you want to share the openCom Companion application itself via the repository server, you must first download it into the local repository, using the \"Update Content\" button below.\n\n"
|
||||||
info += "To make the repository available on your local network, simply start it below, and it will become browsable on a local IP address for anyone connected to the same WiFi or wired network.\n\n"
|
info += "To make the repository available on your local network, simply start it below, and it will become browsable on a local IP address for anyone connected to the same WiFi or wired network.\n\n"
|
||||||
if self.sideband.webshare_server != None:
|
if self.sideband.webshare_server != None:
|
||||||
if RNS.vendor.platformutils.is_android():
|
if RNS.vendor.platformutils.is_android():
|
||||||
@ -3485,14 +3485,14 @@ class SidebandApp(MDApp):
|
|||||||
|
|
||||||
if RNS.vendor.platformutils.get_platform() == "android":
|
if RNS.vendor.platformutils.get_platform() == "android":
|
||||||
if not self.sideband.getpersistent("service.is_controlling_connectivity"):
|
if not self.sideband.getpersistent("service.is_controlling_connectivity"):
|
||||||
info = "Sideband is connected via a shared Reticulum instance running on this system.\n\n"
|
info = "openCom Companion is connected via a shared Reticulum instance running on this system.\n\n"
|
||||||
info += "To configure hardware parameters, edit the relevant configuration file for the instance."
|
info += "To configure hardware parameters, edit the relevant configuration file for the instance."
|
||||||
self.hardware_screen.ids.hardware_info.text = info
|
self.hardware_screen.ids.hardware_info.text = info
|
||||||
con_hide_settings()
|
con_hide_settings()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
info = "When using external hardware for communicating, you may configure various parameters, such as channel settings, modulation schemes, interface speeds and access parameters. You can set up these parameters per device type, and Sideband will apply the configuration when opening a device of that type.\n\n"
|
info = "When using external hardware for communicating, you may configure various parameters, such as channel settings, modulation schemes, interface speeds and access parameters. You can set up these parameters per device type, and openCom Companion will apply the configuration when opening a device of that type.\n\n"
|
||||||
info += "Hardware configurations can also be exported or imported as [i]config motes[/i], which are self-contained plaintext strings that are easy to share with others. When importing a config mote, Sideband will automatically set all relevant parameters as specified within it.\n\n"
|
info += "Hardware configurations can also be exported or imported as [i]config motes[/i], which are self-contained plaintext strings that are easy to share with others. When importing a config mote, openCom Companion will automatically set all relevant parameters as specified within it.\n\n"
|
||||||
info += "For changes to hardware parameters to take effect, you must shut down and restart Sideband.\n"
|
info += "For changes to hardware parameters to take effect, you must shut down and restart Sideband.\n"
|
||||||
self.hardware_screen.ids.hardware_info.text = info
|
self.hardware_screen.ids.hardware_info.text = info
|
||||||
|
|
||||||
@ -3500,11 +3500,11 @@ class SidebandApp(MDApp):
|
|||||||
info = ""
|
info = ""
|
||||||
|
|
||||||
if self.sideband.reticulum.is_connected_to_shared_instance:
|
if self.sideband.reticulum.is_connected_to_shared_instance:
|
||||||
info = "Sideband is connected via a shared Reticulum instance running on this system.\n\n"
|
info = "openCom Companion is connected via a shared Reticulum instance running on this system.\n\n"
|
||||||
info += "To configure hardware parameters, edit the configuration file located at:\n\n"
|
info += "To configure hardware parameters, edit the configuration file located at:\n\n"
|
||||||
info += str(RNS.Reticulum.configpath)
|
info += str(RNS.Reticulum.configpath)
|
||||||
else:
|
else:
|
||||||
info = "Sideband is currently running a standalone or master Reticulum instance on this system.\n\n"
|
info = "openCom Companion is currently running a standalone or master Reticulum instance on this system.\n\n"
|
||||||
info += "To configure hardware parameters, edit the configuration file located at:\n\n"
|
info += "To configure hardware parameters, edit the configuration file located at:\n\n"
|
||||||
info += str(RNS.Reticulum.configpath)
|
info += str(RNS.Reticulum.configpath)
|
||||||
|
|
||||||
@ -4855,7 +4855,7 @@ class SidebandApp(MDApp):
|
|||||||
self.bind_clipboard_actions(self.keys_screen.ids)
|
self.bind_clipboard_actions(self.keys_screen.ids)
|
||||||
|
|
||||||
self.keys_screen.ids.keys_scrollview.effect_cls = ScrollEffect
|
self.keys_screen.ids.keys_scrollview.effect_cls = ScrollEffect
|
||||||
info = "Your primary encryption keys are stored in a Reticulum Identity within the Sideband app. If you want to backup this Identity for later use on this or another device, you can export it as a plain text blob, with the key data encoded in Base32 format. This will allow you to restore your address in Sideband or other LXMF clients at a later point.\n\n[b]Warning![/b] Anyone that gets access to the key data will be able to control your LXMF address, impersonate you, and read your messages. In is [b]extremely important[/b] that you keep the Identity data secure if you export it.\n\nBefore displaying or exporting your Identity data, make sure that no machine or person in your vicinity is able to see, copy or record your device screen or similar."
|
info = "Your primary encryption keys are stored in a Reticulum Identity within the openCom Companion app. If you want to backup this Identity for later use on this or another device, you can export it as a plain text blob, with the key data encoded in Base32 format. This will allow you to restore your address in openCom Companion or other LXMF clients at a later point.\n\n[b]Warning![/b] Anyone that gets access to the key data will be able to control your LXMF address, impersonate you, and read your messages. In is [b]extremely important[/b] that you keep the Identity data secure if you export it.\n\nBefore displaying or exporting your Identity data, make sure that no machine or person in your vicinity is able to see, copy or record your device screen or similar."
|
||||||
|
|
||||||
if not RNS.vendor.platformutils.get_platform() == "android":
|
if not RNS.vendor.platformutils.get_platform() == "android":
|
||||||
self.widget_hide(self.keys_screen.ids.keys_share)
|
self.widget_hide(self.keys_screen.ids.keys_share)
|
||||||
@ -4938,7 +4938,7 @@ class SidebandApp(MDApp):
|
|||||||
new_id.to_file(self.sideband.identity_path)
|
new_id.to_file(self.sideband.identity_path)
|
||||||
|
|
||||||
yes_button = MDRectangleFlatButton(text="OK",font_size=dp(18))
|
yes_button = MDRectangleFlatButton(text="OK",font_size=dp(18))
|
||||||
dialog = MDDialog(text="[b]The provided Identity key data was imported[/b]\n\nThe app will now exit. Please restart Sideband to use the new Identity.", buttons=[ yes_button ])
|
dialog = MDDialog(text="[b]The provided Identity key data was imported[/b]\n\nThe app will now exit. Please restart openCom Companion to use the new Identity.", buttons=[ yes_button ])
|
||||||
def dl_yes(s):
|
def dl_yes(s):
|
||||||
dialog.dismiss()
|
dialog.dismiss()
|
||||||
self.quit_action(sender=self)
|
self.quit_action(sender=self)
|
||||||
@ -4982,12 +4982,12 @@ class SidebandApp(MDApp):
|
|||||||
self.bind_clipboard_actions(self.plugins_screen.ids)
|
self.bind_clipboard_actions(self.plugins_screen.ids)
|
||||||
|
|
||||||
self.plugins_screen.ids.plugins_scrollview.effect_cls = ScrollEffect
|
self.plugins_screen.ids.plugins_scrollview.effect_cls = ScrollEffect
|
||||||
info1 = "You can extend Sideband functionality with command and service plugins. This lets you to add your own custom functionality, or add community-developed features.\n"
|
info1 = "You can extend openCom Companion functionality with command and service plugins. This lets you to add your own custom functionality, or add community-developed features.\n"
|
||||||
info2 = "[b]Take extreme caution![/b]\nIf you add a plugin that you did not write yourself, make [b]absolutely[/b] sure you know what it is doing! Loaded plugins have full access to your Sideband application, and should only be added if you are completely certain they are trustworthy.\n\n"
|
info2 = "[b]Take extreme caution![/b]\nIf you add a plugin that you did not write yourself, make [b]absolutely[/b] sure you know what it is doing! Loaded plugins have full access to your openCom Companion application, and should only be added if you are completely certain they are trustworthy.\n\n"
|
||||||
info2 += "[i]Command Plugins[/i] allow you to define custom commands that can be carried out in response to LXMF command messages, and they can respond with any kind of information or data to the requestor (or to any LXMF address).\n\n"
|
info2 += "[i]Command Plugins[/i] allow you to define custom commands that can be carried out in response to LXMF command messages, and they can respond with any kind of information or data to the requestor (or to any LXMF address).\n\n"
|
||||||
info2 += "By using [i]Service Plugins[/i], you can start additional services or programs within the Sideband application context, that other plugins (or Sideband itself) can interact with.\n\n"
|
info2 += "By using [i]Service Plugins[/i], you can start additional services or programs within the openCom Companion application context, that other plugins (or openCom Companion itself) can interact with.\n\n"
|
||||||
info2 += "With [i]Telemetry Plugins[/i], you can add custom telemetry from external devices and services to the Sideband telemetry system.\n\n"
|
info2 += "With [i]Telemetry Plugins[/i], you can add custom telemetry from external devices and services to the openCom Companion telemetry system.\n\n"
|
||||||
info2 += "Restart Sideband for changes to these settings to take effect."
|
info2 += "Restart openCom Companion for changes to these settings to take effect."
|
||||||
self.plugins_screen.ids.plugins_info1.text = info1
|
self.plugins_screen.ids.plugins_info1.text = info1
|
||||||
self.plugins_screen.ids.plugins_info2.text = info2
|
self.plugins_screen.ids.plugins_info2.text = info2
|
||||||
|
|
||||||
@ -5611,7 +5611,7 @@ class SidebandApp(MDApp):
|
|||||||
self.map_settings_screen = Builder.load_string(layout_map_settings_screen)
|
self.map_settings_screen = Builder.load_string(layout_map_settings_screen)
|
||||||
self.map_settings_screen.app = self
|
self.map_settings_screen.app = self
|
||||||
self.root.ids.screen_manager.add_widget(self.map_settings_screen)
|
self.root.ids.screen_manager.add_widget(self.map_settings_screen)
|
||||||
self.map_settings_screen.ids.map_config_info.text = "\n\nSideband can use map sources from the Internet, or a map source stored locally on this device in MBTiles format."
|
self.map_settings_screen.ids.map_config_info.text = "\n\nopenCom Companion can use map sources from the Internet, or a map source stored locally on this device in MBTiles format."
|
||||||
self.map_settings_screen.ids.map_settings_scrollview.effect_cls = ScrollEffect
|
self.map_settings_screen.ids.map_settings_scrollview.effect_cls = ScrollEffect
|
||||||
self.map_settings_init()
|
self.map_settings_init()
|
||||||
|
|
||||||
@ -5984,19 +5984,19 @@ class SidebandApp(MDApp):
|
|||||||
threading.Thread(target=lj, daemon=True).start()
|
threading.Thread(target=lj, daemon=True).start()
|
||||||
|
|
||||||
guide_text1 = """
|
guide_text1 = """
|
||||||
[size=18dp][b]Introduction[/b][/size][size=5dp]\n \n[/size]Welcome to [i]Sideband[/i], an LXMF client for Android, Linux and macOS. With Sideband, you can communicate with other people or LXMF-compatible systems over Reticulum networks using LoRa, Packet Radio, WiFi, I2P, or anything else Reticulum supports.
|
[size=18dp][b]Introduction[/b][/size][size=5dp]\n \n[/size]Welcome to [i]openCom Companion[/i], an LXMF client for Android, Linux and macOS. With openCom Companion, you can communicate with other people or LXMF-compatible systems over Reticulum networks using LoRa, Packet Radio, WiFi, I2P, or anything else Reticulum supports.
|
||||||
|
|
||||||
This short guide will give you a basic introduction to the concepts that underpin Sideband and LXMF (which is the protocol that Sideband uses to communicate). If you are not already familiar with LXMF and Reticulum, it is probably a good idea to read this guide, since Sideband is very different from other messaging apps."""
|
This short guide will give you a basic introduction to the concepts that underpin openCom Companion and LXMF (which is the protocol that openCom Companion uses to communicate). If you are not already familiar with LXMF and Reticulum, it is probably a good idea to read this guide, since openCom Companion is very different from other messaging apps."""
|
||||||
guide_text2 = """
|
guide_text2 = """
|
||||||
[size=18dp][b]Communication Without Subjection[/b][/size][size=5dp]\n \n[/size]Sideband is completely free, permission-less, anonymous and infrastructure-less. Sideband uses the peer-to-peer and distributed messaging system LXMF. There is no sign-up, no service providers, no "end-user license agreements", no data theft and no surveillance. You own the system.
|
[size=18dp][b]Communication Without Subjection[/b][/size][size=5dp]\n \n[/size]openCom Companion is completely free, permission-less, anonymous and infrastructure-less. openCom Companion uses the peer-to-peer and distributed messaging system LXMF. There is no sign-up, no service providers, no "end-user license agreements", no data theft and no surveillance. You own the system.
|
||||||
|
|
||||||
This also means that Sideband operates differently than what you might be used to. It does not need a connection to a server on the Internet to function, and you do not have an account anywhere."""
|
This also means that openCom Companion operates differently than what you might be used to. It does not need a connection to a server on the Internet to function, and you do not have an account anywhere."""
|
||||||
|
|
||||||
guide_text3 = """
|
guide_text3 = """
|
||||||
[size=18dp][b]Operating Principles[/b][/size][size=5dp]\n \n[/size]When Sideband is started on your device for the first time, it randomly generates a set of cryptographic keys. These keys are then used to create an LXMF address for your use. Any other endpoint in [i]any[/i] Reticulum network will be able to send data to this address, as long as there is [i]some sort of physical connection[/i] between your device and the remote endpoint. You can also move around to other Reticulum networks with this address, even ones that were never connected to the network the address was created on, or that didn't exist when the address was created. The address is yours to keep and control for as long (or short) a time you need it, and you can always delete it and create a new one."""
|
[size=18dp][b]Operating Principles[/b][/size][size=5dp]\n \n[/size]When openCom Companion is started on your device for the first time, it randomly generates a set of cryptographic keys. These keys are then used to create an LXMF address for your use. Any other endpoint in [i]any[/i] Reticulum network will be able to send data to this address, as long as there is [i]some sort of physical connection[/i] between your device and the remote endpoint. You can also move around to other Reticulum networks with this address, even ones that were never connected to the network the address was created on, or that didn't exist when the address was created. The address is yours to keep and control for as long (or short) a time you need it, and you can always delete it and create a new one."""
|
||||||
|
|
||||||
guide_text4 = """
|
guide_text4 = """
|
||||||
[size=18dp][b]Becoming Reachable[/b][/size][size=5dp]\n \n[/size]To establish reachability for any Reticulum address on a network, an [i]announce[/i] must be sent. Sideband does not do this automatically by default, but can be configured to do so every time the program starts. To send an announce manually, press the [i]Announce[/i] button in the [i]Conversations[/i] section of the program. When you send an announce, you make your LXMF address reachable for real-time messaging to the entire network you are connected to. Even in very large networks, you can expect global reachability for your address to be established in under a minute.
|
[size=18dp][b]Becoming Reachable[/b][/size][size=5dp]\n \n[/size]To establish reachability for any Reticulum address on a network, an [i]announce[/i] must be sent. openCom Companion does not do this automatically by default, but can be configured to do so every time the program starts. To send an announce manually, press the [i]Announce[/i] button in the [i]Conversations[/i] section of the program. When you send an announce, you make your LXMF address reachable for real-time messaging to the entire network you are connected to. Even in very large networks, you can expect global reachability for your address to be established in under a minute.
|
||||||
|
|
||||||
If you don't move to other places in the network, and keep connected through the same hubs or gateways, it is generally not necessary to send an announce more often than once every week. If you change your entry point to the network, you may want to send an announce, or you may just want to stay quiet."""
|
If you don't move to other places in the network, and keep connected through the same hubs or gateways, it is generally not necessary to send an announce more often than once every week. If you change your entry point to the network, you may want to send an announce, or you may just want to stay quiet."""
|
||||||
|
|
||||||
@ -6009,12 +6009,12 @@ The Propagation Nodes also distribute copies of messages between each other, suc
|
|||||||
[size=18dp][b]Packets Find A Way[/b][/size][size=5dp]\n \n[/size]Connections in Reticulum networks can be wired or wireless, span many intermediary hops, run over fast links or ultra-low bandwidth radio, tunnel over the Invisible Internet (I2P), private networks, satellite connections, serial lines or anything else that Reticulum can carry data over. In most cases it will not be possible to know what path data takes in a Reticulum network, and no transmitted packets carries any identifying characteristics, apart from a destination address. There is no source addresses in Reticulum. As long as you do not reveal any connecting details between your person and your LXMF address, you can remain anonymous. Sending messages to others does not reveal [i]your[/i] address to anyone else than the intended recipient."""
|
[size=18dp][b]Packets Find A Way[/b][/size][size=5dp]\n \n[/size]Connections in Reticulum networks can be wired or wireless, span many intermediary hops, run over fast links or ultra-low bandwidth radio, tunnel over the Invisible Internet (I2P), private networks, satellite connections, serial lines or anything else that Reticulum can carry data over. In most cases it will not be possible to know what path data takes in a Reticulum network, and no transmitted packets carries any identifying characteristics, apart from a destination address. There is no source addresses in Reticulum. As long as you do not reveal any connecting details between your person and your LXMF address, you can remain anonymous. Sending messages to others does not reveal [i]your[/i] address to anyone else than the intended recipient."""
|
||||||
|
|
||||||
guide_text7 = """
|
guide_text7 = """
|
||||||
[size=18dp][b]Be Yourself, Be Unknown, Stay Free[/b][/size][size=5dp]\n \n[/size]Even with the above characteristics in mind, you [b]must remember[/b] that LXMF and Reticulum is not a technology that can guarantee anonymising connections that are already de-anonymised! If you use Sideband to connect to TCP Reticulum hubs over the clear Internet, from a network that can be tied to your personal identity, an adversary may learn that you are generating LXMF traffic. If you want to avoid this, it is recommended to use I2P to connect to Reticulum hubs on the Internet. Or only connecting from within pure Reticulum networks, that take one or more hops to reach connections that span the Internet. This is a complex topic, with many more nuances than can be covered here. You are encouraged to ask on the various Reticulum discussion forums if you are in doubt.
|
[size=18dp][b]Be Yourself, Be Unknown, Stay Free[/b][/size][size=5dp]\n \n[/size]Even with the above characteristics in mind, you [b]must remember[/b] that LXMF and Reticulum is not a technology that can guarantee anonymising connections that are already de-anonymised! If you use openCom Companion to connect to TCP Reticulum hubs over the clear Internet, from a network that can be tied to your personal identity, an adversary may learn that you are generating LXMF traffic. If you want to avoid this, it is recommended to use I2P to connect to Reticulum hubs on the Internet. Or only connecting from within pure Reticulum networks, that take one or more hops to reach connections that span the Internet. This is a complex topic, with many more nuances than can be covered here. You are encouraged to ask on the various Reticulum discussion forums if you are in doubt.
|
||||||
|
|
||||||
If you use Reticulum and LXMF on hardware that does not carry any identifiers tied to you, it is possible to establish a completely free and anonymous communication system with Reticulum and LXMF clients."""
|
If you use Reticulum and LXMF on hardware that does not carry any identifiers tied to you, it is possible to establish a completely free and anonymous communication system with Reticulum and LXMF clients."""
|
||||||
|
|
||||||
guide_text8 = """
|
guide_text8 = """
|
||||||
[size=18dp][b]Keyboard Shortcuts[/b][/size][size=5dp]\n \n[/size]To ease navigation and operation of the program, Sideband has keyboard shortcuts mapped to the most common actions. A reference is included below.
|
[size=18dp][b]Keyboard Shortcuts[/b][/size][size=5dp]\n \n[/size]To ease navigation and operation of the program, openCom Companion has keyboard shortcuts mapped to the most common actions. A reference is included below.
|
||||||
|
|
||||||
[b]Quick Actions[/b]
|
[b]Quick Actions[/b]
|
||||||
- [b]Ctrl-W[/b] Go back
|
- [b]Ctrl-W[/b] Go back
|
||||||
@ -6054,7 +6054,7 @@ If you use Reticulum and LXMF on hardware that does not carry any identifiers ti
|
|||||||
- Hold [b]Alt[/b] to navigate more finely"""
|
- Hold [b]Alt[/b] to navigate more finely"""
|
||||||
|
|
||||||
guide_text9 = """
|
guide_text9 = """
|
||||||
[size=18dp][b]Please Support This Project[/b][/size][size=5dp]\n \n[/size]It took me more than seven years to design and built the entire ecosystem of software and hardware that makes this possible. If this project is valuable to you, please go to [u][ref=link]https://unsigned.io/donate[/ref][/u] to support the project with a donation. Every donation directly makes the entire Reticulum project possible.
|
[size=18dp][b]Please Support The Upstream Project[/b][/size][size=5dp]\n \n[/size]It took Mark Qvist more than seven years to design and built the entire ecosystem of software and hardware that supports openCom Companion and the openCom line of RNodes. If this project is valuable to you, please go to [u][ref=link]https://unsigned.io/donate[/ref][/u] to support his project with a donation. Every donation directly makes the entire Reticulum project possible.
|
||||||
|
|
||||||
Thank you very much for using Free Communications Systems.
|
Thank you very much for using Free Communications Systems.
|
||||||
"""
|
"""
|
||||||
@ -6113,7 +6113,7 @@ Thank you very much for using Free Communications Systems.
|
|||||||
self.root.ids.screen_manager.transition = self.slide_transition
|
self.root.ids.screen_manager.transition = self.slide_transition
|
||||||
self.root.ids.screen_manager.transition.direction = direction
|
self.root.ids.screen_manager.transition.direction = direction
|
||||||
|
|
||||||
info = "The [b]Local Broadcasts[/b] feature will allow you to send and listen for local broadcast transmissions on connected radio, LoRa and WiFi interfaces.\n\n[b]Local Broadcasts[/b] makes it easy to establish public information exchange with anyone in direct radio range, or even with large areas far away using the [i]Remote Broadcast Repeater[/i] feature.\n\nThese features are not yet implemented in Sideband.\n\nWant it faster? Go to [u][ref=link]https://unsigned.io/donate[/ref][/u] to support the project."
|
info = "The [b]Local Broadcasts[/b] feature will allow you to send and listen for local broadcast transmissions on connected radio, LoRa and WiFi interfaces.\n\n[b]Local Broadcasts[/b] makes it easy to establish public information exchange with anyone in direct radio range, or even with large areas far away using the [i]Remote Broadcast Repeater[/i] feature.\n\nThese features are not yet implemented in openCom Companion.\n\nWant it faster? Go to [u][ref=link]https://unsigned.io/donate[/ref][/u] to support the project."
|
||||||
if self.theme_cls.theme_style == "Dark":
|
if self.theme_cls.theme_style == "Dark":
|
||||||
info = "[color=#"+dark_theme_text_color+"]"+info+"[/color]"
|
info = "[color=#"+dark_theme_text_color+"]"+info+"[/color]"
|
||||||
self.broadcasts_screen.ids.broadcasts_info.text = info
|
self.broadcasts_screen.ids.broadcasts_info.text = info
|
||||||
@ -6165,7 +6165,7 @@ if not args.daemon:
|
|||||||
|
|
||||||
def run():
|
def run():
|
||||||
if args.daemon:
|
if args.daemon:
|
||||||
RNS.log("Starting Sideband in daemon mode")
|
RNS.log("Starting openCom Companion in daemon mode")
|
||||||
sideband = SidebandCore(
|
sideband = SidebandCore(
|
||||||
None,
|
None,
|
||||||
config_path=args.config,
|
config_path=args.config,
|
||||||
|
@ -139,7 +139,7 @@
|
|||||||
|
|
||||||
<provider
|
<provider
|
||||||
android:name="android.support.v4.content.FileProvider"
|
android:name="android.support.v4.content.FileProvider"
|
||||||
android:authorities="io.unsigned.sideband.provider"
|
android:authorities="uk.co.liberatedsystems.occ.provider"
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
android:grantUriPermissions="true">
|
android:grantUriPermissions="true">
|
||||||
<!-- ressource file to create -->
|
<!-- ressource file to create -->
|
||||||
|
@ -130,7 +130,7 @@ public class PythonService extends Service implements Runnable {
|
|||||||
} else {
|
} else {
|
||||||
// for android 8+ we need to create our own channel
|
// for android 8+ we need to create our own channel
|
||||||
// https://stackoverflow.com/questions/47531742/startforeground-fail-after-upgrade-to-android-8-1
|
// https://stackoverflow.com/questions/47531742/startforeground-fail-after-upgrade-to-android-8-1
|
||||||
String NOTIFICATION_CHANNEL_ID = "io.unsigned.sideband.reticulum";
|
String NOTIFICATION_CHANNEL_ID = "uk.co.liberatedsystems.occ.reticulum";
|
||||||
String channelName = "Background Service";
|
String channelName = "Background Service";
|
||||||
NotificationChannel chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName,
|
NotificationChannel chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName,
|
||||||
NotificationManager.IMPORTANCE_NONE);
|
NotificationManager.IMPORTANCE_NONE);
|
||||||
@ -142,7 +142,7 @@ public class PythonService extends Service implements Runnable {
|
|||||||
manager.createNotificationChannel(chan);
|
manager.createNotificationChannel(chan);
|
||||||
|
|
||||||
Notification.Builder builder = new Notification.Builder(context, NOTIFICATION_CHANNEL_ID);
|
Notification.Builder builder = new Notification.Builder(context, NOTIFICATION_CHANNEL_ID);
|
||||||
builder.setContentTitle("Sideband Active");
|
builder.setContentTitle("openCom Companion Active");
|
||||||
// builder.setContentText("Reticulum Active");
|
// builder.setContentText("Reticulum Active");
|
||||||
builder.setContentIntent(pIntent);
|
builder.setContentIntent(pIntent);
|
||||||
// builder.setOngoing(true);
|
// builder.setOngoing(true);
|
||||||
|
@ -66,7 +66,7 @@ class SidebandService():
|
|||||||
if android_api_version < 26:
|
if android_api_version < 26:
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
package_name = "io.unsigned.sideband"
|
package_name = "uk.co.liberatedsystems.occ"
|
||||||
|
|
||||||
if not self.notification_service:
|
if not self.notification_service:
|
||||||
self.notification_service = cast(NotificationManager, self.app_context.getSystemService(
|
self.notification_service = cast(NotificationManager, self.app_context.getSystemService(
|
||||||
@ -83,7 +83,7 @@ class SidebandService():
|
|||||||
group_id += "."+str(context_id)
|
group_id += "."+str(context_id)
|
||||||
|
|
||||||
if not title or title == "":
|
if not title or title == "":
|
||||||
channel_name = "Sideband"
|
channel_name = "openCom Companion"
|
||||||
else:
|
else:
|
||||||
channel_name = title
|
channel_name = title
|
||||||
|
|
||||||
@ -344,10 +344,12 @@ class SidebandService():
|
|||||||
|
|
||||||
if self.sideband.interface_rnode != None:
|
if self.sideband.interface_rnode != None:
|
||||||
if self.sideband.interface_rnode.online:
|
if self.sideband.interface_rnode.online:
|
||||||
if self.sideband.interface_rnode is RNS.Interfaces.Android.RNodeMultiInterface.RNodeMultiInterface:
|
if type(self.sideband.interface_rnode) is RNS.Interfaces.Android.RNodeMultiInterface.RNodeMultiInterface:
|
||||||
rs = ""
|
rs = ""
|
||||||
for subinterface in self.sideband.interface_rnode.subinterfaces:
|
for subinterface in self.sideband.interface_rnode.subinterfaces:
|
||||||
|
if subinterface is not int:
|
||||||
rs += "On-air at "+str(subinterface.bitrate_kbps)+" Kbps \n" # \todo does this work?
|
rs += "On-air at "+str(subinterface.bitrate_kbps)+" Kbps \n" # \todo does this work?
|
||||||
|
RNS.log("On-air iteration!", RNS.LOG_DEBUG) # debug
|
||||||
else:
|
else:
|
||||||
rs = "On-air at "+str(self.sideband.interface_rnode.bitrate_kbps)+" Kbps"
|
rs = "On-air at "+str(self.sideband.interface_rnode.bitrate_kbps)+" Kbps"
|
||||||
else:
|
else:
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<link rel="stylesheet" href="css/water.css">
|
<link rel="stylesheet" href="css/water.css">
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="gfx/icon.png">
|
<link rel="shortcut icon" type="image/x-icon" href="gfx/icon.png">
|
||||||
<meta charset="utf-8"/>
|
<meta charset="utf-8"/>
|
||||||
<title>Sideband Repository</title>
|
<title>openCom Companion Repository</title>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -5,17 +5,17 @@
|
|||||||
<link rel="stylesheet" href="css/water.css">
|
<link rel="stylesheet" href="css/water.css">
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="gfx/icon.png">
|
<link rel="shortcut icon" type="image/x-icon" href="gfx/icon.png">
|
||||||
<meta charset="utf-8"/>
|
<meta charset="utf-8"/>
|
||||||
<title>Sideband Repository</title>
|
<title>openCom Companion Repository</title>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<span class="logo">Sideband Repo</span>
|
<span class="logo">openCom Companion Repo</span>
|
||||||
<p><center><span class="menu"><a href="index.html">Start</a> | <a href="pkgs.html">Software</a> | <a href="guides.html">Guides</a></span></center></p><hr><h2>Hello!</h2>
|
<p><center><span class="menu"><a href="index.html">Start</a> | <a href="pkgs.html">Software</a> | <a href="guides.html">Guides</a></span></center></p><hr><h2>Hello!</h2>
|
||||||
<table style="margin-bottom: 1.5em;">
|
<table style="margin-bottom: 1.5em;">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="vertical-align:middle;padding-left: 0;">
|
<td style="vertical-align:middle;padding-left: 0;">
|
||||||
You have connected to the <b>Sideband Repository</b>.<br/>
|
You have connected to the <b>openCom Companion Repository</b>.<br/>
|
||||||
<br/>
|
<br/>
|
||||||
Feel free to download any information and resources from here. Select a section to browse and download packages and information.<br/>
|
Feel free to download any information and resources from here. Select a section to browse and download packages and information.<br/>
|
||||||
</td>
|
</td>
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<link rel="stylesheet" href="css/water.css">
|
<link rel="stylesheet" href="css/water.css">
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="gfx/icon.png">
|
<link rel="shortcut icon" type="image/x-icon" href="gfx/icon.png">
|
||||||
<meta charset="utf-8"/>
|
<meta charset="utf-8"/>
|
||||||
<title>Sideband Repository</title>
|
<title>openCom Companion Repository</title>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -13,6 +13,8 @@ import RNS.Interfaces.Interface as Interface
|
|||||||
|
|
||||||
import multiprocessing.connection
|
import multiprocessing.connection
|
||||||
|
|
||||||
|
import traceback #debug
|
||||||
|
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from threading import Lock
|
from threading import Lock
|
||||||
from .res import sideband_fb_data
|
from .res import sideband_fb_data
|
||||||
@ -157,7 +159,7 @@ class SidebandCore():
|
|||||||
self.version_str = ""
|
self.version_str = ""
|
||||||
|
|
||||||
if config_path == None:
|
if config_path == None:
|
||||||
self.app_dir = plyer.storagepath.get_home_dir()+"/.config/sideband"
|
self.app_dir = plyer.storagepath.get_home_dir()+"/.config/occ"
|
||||||
if self.app_dir.startswith("file://"):
|
if self.app_dir.startswith("file://"):
|
||||||
self.app_dir = self.app_dir.replace("file://", "")
|
self.app_dir = self.app_dir.replace("file://", "")
|
||||||
else:
|
else:
|
||||||
@ -167,19 +169,19 @@ class SidebandCore():
|
|||||||
|
|
||||||
self.rns_configdir = None
|
self.rns_configdir = None
|
||||||
if RNS.vendor.platformutils.is_android():
|
if RNS.vendor.platformutils.is_android():
|
||||||
self.app_dir = android_app_dir+"/io.unsigned.sideband/files/"
|
self.app_dir = android_app_dir+"/uk.co.liberatedsystems.occ/files/"
|
||||||
self.cache_dir = self.app_dir+"/cache"
|
self.cache_dir = self.app_dir+"/cache"
|
||||||
self.rns_configdir = self.app_dir+"/app_storage/reticulum"
|
self.rns_configdir = self.app_dir+"/app_storage/reticulum"
|
||||||
self.asset_dir = self.app_dir+"/app/assets"
|
self.asset_dir = self.app_dir+"/app/assets"
|
||||||
elif RNS.vendor.platformutils.is_darwin():
|
elif RNS.vendor.platformutils.is_darwin():
|
||||||
core_path = os.path.abspath(__file__)
|
core_path = os.path.abspath(__file__)
|
||||||
self.asset_dir = core_path.replace("/sideband/core.py", "/assets")
|
self.asset_dir = core_path.replace("/occ/core.py", "/assets")
|
||||||
elif RNS.vendor.platformutils.get_platform() == "linux":
|
elif RNS.vendor.platformutils.get_platform() == "linux":
|
||||||
core_path = os.path.abspath(__file__)
|
core_path = os.path.abspath(__file__)
|
||||||
self.asset_dir = core_path.replace("/sideband/core.py", "/assets")
|
self.asset_dir = core_path.replace("/occ/core.py", "/assets")
|
||||||
elif RNS.vendor.platformutils.is_windows():
|
elif RNS.vendor.platformutils.is_windows():
|
||||||
core_path = os.path.abspath(__file__)
|
core_path = os.path.abspath(__file__)
|
||||||
self.asset_dir = core_path.replace("\\sideband\\core.py", "\\assets")
|
self.asset_dir = core_path.replace("\\occ\\core.py", "\\assets")
|
||||||
else:
|
else:
|
||||||
self.asset_dir = plyer.storagepath.get_application_dir()+"/sbapp/assets"
|
self.asset_dir = plyer.storagepath.get_application_dir()+"/sbapp/assets"
|
||||||
|
|
||||||
@ -202,9 +204,9 @@ class SidebandCore():
|
|||||||
if not os.path.isdir(self.app_dir+"/app_storage"):
|
if not os.path.isdir(self.app_dir+"/app_storage"):
|
||||||
os.makedirs(self.app_dir+"/app_storage")
|
os.makedirs(self.app_dir+"/app_storage")
|
||||||
|
|
||||||
self.config_path = self.app_dir+"/app_storage/sideband_config"
|
self.config_path = self.app_dir+"/app_storage/occ_config"
|
||||||
self.identity_path = self.app_dir+"/app_storage/primary_identity"
|
self.identity_path = self.app_dir+"/app_storage/primary_identity"
|
||||||
self.db_path = self.app_dir+"/app_storage/sideband.db"
|
self.db_path = self.app_dir+"/app_storage/occ.db"
|
||||||
self.lxmf_storage = self.app_dir+"/app_storage/"
|
self.lxmf_storage = self.app_dir+"/app_storage/"
|
||||||
self.log_dir = self.app_dir+"/app_storage/"
|
self.log_dir = self.app_dir+"/app_storage/"
|
||||||
self.tmp_dir = self.app_dir+"/app_storage/tmp"
|
self.tmp_dir = self.app_dir+"/app_storage/tmp"
|
||||||
@ -242,7 +244,8 @@ class SidebandCore():
|
|||||||
self.clear_exports_dir()
|
self.clear_exports_dir()
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
RNS.log("Error while configuring Sideband: "+str(e), RNS.LOG_ERROR)
|
RNS.log("Error while configuring openCom Companion: "+str(e), RNS.LOG_ERROR)
|
||||||
|
RNS.log(traceback.format_exc())# debug
|
||||||
|
|
||||||
if load_config_only:
|
if load_config_only:
|
||||||
return
|
return
|
||||||
@ -297,11 +300,11 @@ class SidebandCore():
|
|||||||
local_share_dir = os.path.expanduser("~/.local/share")
|
local_share_dir = os.path.expanduser("~/.local/share")
|
||||||
app_entry_dir = os.path.expanduser("~/.local/share/applications")
|
app_entry_dir = os.path.expanduser("~/.local/share/applications")
|
||||||
icon_dir = os.path.expanduser("~/.local/share/icons/hicolor/512x512/apps")
|
icon_dir = os.path.expanduser("~/.local/share/icons/hicolor/512x512/apps")
|
||||||
de_filename = "io.unsigned.sideband.desktop"
|
de_filename = "uk.co.liberatedsystems.occ.desktop"
|
||||||
de_source = self.asset_dir+"/"+de_filename
|
de_source = self.asset_dir+"/"+de_filename
|
||||||
de_target = app_entry_dir+"/"+de_filename
|
de_target = app_entry_dir+"/"+de_filename
|
||||||
icn_source = self.asset_dir+"/icon.png"
|
icn_source = self.asset_dir+"/icon.png"
|
||||||
icn_target = icon_dir+"/io.unsigned.sideband.png"
|
icn_target = icon_dir+"/uk.co.liberatedsystems.occ.png"
|
||||||
if os.path.isdir(local_share_dir):
|
if os.path.isdir(local_share_dir):
|
||||||
if not os.path.exists(app_entry_dir):
|
if not os.path.exists(app_entry_dir):
|
||||||
os.makedirs(app_entry_dir)
|
os.makedirs(app_entry_dir)
|
||||||
@ -355,7 +358,7 @@ class SidebandCore():
|
|||||||
os.unlink(fpath)
|
os.unlink(fpath)
|
||||||
|
|
||||||
def __init_config(self):
|
def __init_config(self):
|
||||||
RNS.log("Creating new Sideband configuration...")
|
RNS.log("Creating new openCom Companion configuration...")
|
||||||
if os.path.isfile(self.identity_path):
|
if os.path.isfile(self.identity_path):
|
||||||
self.identity = RNS.Identity.from_file(self.identity_path)
|
self.identity = RNS.Identity.from_file(self.identity_path)
|
||||||
else:
|
else:
|
||||||
@ -433,12 +436,12 @@ class SidebandCore():
|
|||||||
channel_keys = sorted(self.config["hw_rnode_channels"].keys())
|
channel_keys = sorted(self.config["hw_rnode_channels"].keys())
|
||||||
self.config["hw_rnode_channel_index"] = 0
|
self.config["hw_rnode_channel_index"] = 0
|
||||||
self.config["hw_rnode_channel"] = channel_keys[0]
|
self.config["hw_rnode_channel"] = channel_keys[0]
|
||||||
self.config["hw_rnode_frequency"] = None
|
self.config["hw_rnode_frequency"] = self.config["hw_rnode_channels"]["Channel 1"] * 1000000
|
||||||
self.config["hw_rnode_modulation"] = "LoRa"
|
self.config["hw_rnode_modulation"] = "LoRa"
|
||||||
self.config["hw_rnode_preset_index"] = 0
|
self.config["hw_rnode_preset_index"] = 0
|
||||||
self.config["hw_rnode_bandwidth"] = 62500
|
self.config["hw_rnode_bandwidth"] = self.config["hw_rnode_presets_cfg"][0][0]
|
||||||
self.config["hw_rnode_spreading_factor"] = 8
|
self.config["hw_rnode_spreading_factor"] = self.config["hw_rnode_presets_cfg"][0][1]
|
||||||
self.config["hw_rnode_coding_rate"] = 6
|
self.config["hw_rnode_coding_rate"] = self.config["hw_rnode_presets_cfg"][0][2]
|
||||||
self.config["hw_rnode_tx_power"] = 22
|
self.config["hw_rnode_tx_power"] = 22
|
||||||
self.config["hw_rnode_secondary_modem"] = False
|
self.config["hw_rnode_secondary_modem"] = False
|
||||||
self.config["hw_rnode_sec_presets_cfg"] = [[1625000, 5, 5, 100, 100], [1625000, 7, 6, 100, 100], [1625000, 9, 7, 100, 100], [1625000, 12, 8, 100, 100]]
|
self.config["hw_rnode_sec_presets_cfg"] = [[1625000, 5, 5, 100, 100], [1625000, 7, 6, 100, 100], [1625000, 9, 7, 100, 100], [1625000, 12, 8, 100, 100]]
|
||||||
@ -453,12 +456,12 @@ class SidebandCore():
|
|||||||
channel_keys = sorted(self.config["hw_rnode_sec_channels"].keys())
|
channel_keys = sorted(self.config["hw_rnode_sec_channels"].keys())
|
||||||
self.config["hw_rnode_sec_channel_index"] = 0
|
self.config["hw_rnode_sec_channel_index"] = 0
|
||||||
self.config["hw_rnode_sec_channel"] = channel_keys[0]
|
self.config["hw_rnode_sec_channel"] = channel_keys[0]
|
||||||
self.config["hw_rnode_sec_frequency"] = None
|
self.config["hw_rnode_sec_frequency"] = self.config["hw_rnode_sec_channels"]["Channel 1"] * 1000000
|
||||||
self.config["hw_rnode_sec_modulation"] = "LoRa"
|
self.config["hw_rnode_sec_modulation"] = "LoRa"
|
||||||
self.config["hw_rnode_sec_preset_index"] = 0
|
self.config["hw_rnode_sec_preset_index"] = 0
|
||||||
self.config["hw_rnode_sec_bandwidth"] = 62500
|
self.config["hw_rnode_sec_bandwidth"] = self.config["hw_rnode_presets_cfg"][0][0]
|
||||||
self.config["hw_rnode_sec_spreading_factor"] = 8
|
self.config["hw_rnode_sec_spreading_factor"] = self.config["hw_rnode_presets_cfg"][0][1]
|
||||||
self.config["hw_rnode_sec_coding_rate"] = 6
|
self.config["hw_rnode_sec_coding_rate"] = self.config["hw_rnode_presets_cfg"][0][2]
|
||||||
self.config["hw_rnode_tx_power"] = 5
|
self.config["hw_rnode_tx_power"] = 5
|
||||||
self.config["hw_rnode_beaconinterval"] = None
|
self.config["hw_rnode_beaconinterval"] = None
|
||||||
self.config["hw_rnode_beacondata"] = None
|
self.config["hw_rnode_beacondata"] = None
|
||||||
@ -515,13 +518,13 @@ class SidebandCore():
|
|||||||
self.save_configuration()
|
self.save_configuration()
|
||||||
|
|
||||||
def __load_config(self):
|
def __load_config(self):
|
||||||
RNS.log("Loading Sideband identity...", RNS.LOG_DEBUG)
|
RNS.log("Loading openCom Companion identity...", RNS.LOG_DEBUG)
|
||||||
self.identity = RNS.Identity.from_file(self.identity_path)
|
self.identity = RNS.Identity.from_file(self.identity_path)
|
||||||
|
|
||||||
self.rpc_addr = ("127.0.0.1", 48165)
|
self.rpc_addr = ("127.0.0.1", 48165)
|
||||||
self.rpc_key = RNS.Identity.full_hash(self.identity.get_private_key())
|
self.rpc_key = RNS.Identity.full_hash(self.identity.get_private_key())
|
||||||
|
|
||||||
RNS.log("Loading Sideband configuration... "+str(self.config_path), RNS.LOG_DEBUG)
|
RNS.log("Loading openCom Companion configuration... "+str(self.config_path), RNS.LOG_DEBUG)
|
||||||
config_file = open(self.config_path, "rb")
|
config_file = open(self.config_path, "rb")
|
||||||
self.config = msgpack.unpackb(config_file.read())
|
self.config = msgpack.unpackb(config_file.read())
|
||||||
config_file.close()
|
config_file.close()
|
||||||
@ -790,7 +793,7 @@ class SidebandCore():
|
|||||||
self.__db_indices()
|
self.__db_indices()
|
||||||
|
|
||||||
def __reload_config(self):
|
def __reload_config(self):
|
||||||
RNS.log("Reloading Sideband configuration... ", RNS.LOG_DEBUG)
|
RNS.log("Reloading openCom Companion configuration... ", RNS.LOG_DEBUG)
|
||||||
with open(self.config_path, "rb") as config_file:
|
with open(self.config_path, "rb") as config_file:
|
||||||
config_data = config_file.read()
|
config_data = config_file.read()
|
||||||
|
|
||||||
@ -804,7 +807,7 @@ class SidebandCore():
|
|||||||
RNS.log("Error while reloading configuration: "+str(e), RNS.LOG_ERROR)
|
RNS.log("Error while reloading configuration: "+str(e), RNS.LOG_ERROR)
|
||||||
|
|
||||||
def __save_config(self):
|
def __save_config(self):
|
||||||
RNS.log("Saving Sideband configuration...", RNS.LOG_DEBUG)
|
RNS.log("Saving openCom Companion configuration...", RNS.LOG_DEBUG)
|
||||||
def save_function():
|
def save_function():
|
||||||
while self.saving_configuration:
|
while self.saving_configuration:
|
||||||
time.sleep(0.15)
|
time.sleep(0.15)
|
||||||
@ -816,7 +819,7 @@ class SidebandCore():
|
|||||||
self.saving_configuration = False
|
self.saving_configuration = False
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.saving_configuration = False
|
self.saving_configuration = False
|
||||||
RNS.log("Error while saving Sideband configuration: "+str(e), RNS.LOG_ERROR)
|
RNS.log("Error while saving openCom Companion configuration: "+str(e), RNS.LOG_ERROR)
|
||||||
|
|
||||||
threading.Thread(target=save_function, daemon=True).start()
|
threading.Thread(target=save_function, daemon=True).start()
|
||||||
|
|
||||||
@ -831,7 +834,7 @@ class SidebandCore():
|
|||||||
|
|
||||||
if plugins_enabled:
|
if plugins_enabled:
|
||||||
if plugins_path != None:
|
if plugins_path != None:
|
||||||
RNS.log("Loading Sideband plugins...", RNS.LOG_DEBUG)
|
RNS.log("Loading openCom Companion plugins...", RNS.LOG_DEBUG)
|
||||||
if os.path.isdir(plugins_path):
|
if os.path.isdir(plugins_path):
|
||||||
for file in os.listdir(plugins_path):
|
for file in os.listdir(plugins_path):
|
||||||
if file.lower().endswith(".py"):
|
if file.lower().endswith(".py"):
|
||||||
@ -3131,7 +3134,7 @@ class SidebandCore():
|
|||||||
target_port = self.owner_app.usb_devices[0]["port"]
|
target_port = self.owner_app.usb_devices[0]["port"]
|
||||||
RNS.Interfaces.Android.RNodeInterface.RNodeInterface.bluetooth_control(port=target_port, pairing_mode = True)
|
RNS.Interfaces.Android.RNodeInterface.RNodeInterface.bluetooth_control(port=target_port, pairing_mode = True)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.setstate("hardware_operation.error", "An error occurred while trying to communicate with the device. Please make sure that Sideband has been granted permissions to access the device.\n\nThe reported error was:\n\n[i]"+str(e)+"[/i]")
|
self.setstate("hardware_operation.error", "An error occurred while trying to communicate with the device. Please make sure that openCom Companion has been granted permissions to access the device.\n\nThe reported error was:\n\n[i]"+str(e)+"[/i]")
|
||||||
else:
|
else:
|
||||||
RNS.log("Could not execute RNode Bluetooth control command, no USB devices available", RNS.LOG_ERROR)
|
RNS.log("Could not execute RNode Bluetooth control command, no USB devices available", RNS.LOG_ERROR)
|
||||||
self.setstate("executing.bt_pair", False)
|
self.setstate("executing.bt_pair", False)
|
||||||
@ -3786,7 +3789,7 @@ class SidebandCore():
|
|||||||
self.message_router.ignore_stamps()
|
self.message_router.ignore_stamps()
|
||||||
|
|
||||||
# TODO: Update to announce call in LXMF when full 0.5.0 support is added (get app data from LXMRouter instead)
|
# TODO: Update to announce call in LXMF when full 0.5.0 support is added (get app data from LXMRouter instead)
|
||||||
# Currently overrides the LXMF routers auto-generated announce data so that Sideband will announce old-format
|
# Currently overrides the LXMF routers auto-generated announce data so that openCom Companion will announce old-format
|
||||||
# LXMF announces if require_stamps is disabled.
|
# LXMF announces if require_stamps is disabled.
|
||||||
# if not self.config["lxmf_require_stamps"]:
|
# if not self.config["lxmf_require_stamps"]:
|
||||||
# self.lxmf_destination.set_default_app_data(self.get_display_name_bytes)
|
# self.lxmf_destination.set_default_app_data(self.get_display_name_bytes)
|
||||||
@ -4255,7 +4258,7 @@ class SidebandCore():
|
|||||||
thread.start()
|
thread.start()
|
||||||
|
|
||||||
self.setstate("core.started", True)
|
self.setstate("core.started", True)
|
||||||
RNS.log("Sideband Core "+str(self)+" version "+str(self.version_str)+" started")
|
RNS.log("openCom Companion Core "+str(self)+" version "+str(self.version_str)+" started")
|
||||||
|
|
||||||
def stop_webshare(self):
|
def stop_webshare(self):
|
||||||
if self.webshare_server != None:
|
if self.webshare_server != None:
|
||||||
|
@ -86,17 +86,17 @@ class Telemetry():
|
|||||||
|
|
||||||
|
|
||||||
self.screen.ids.telemetry_scrollview.effect_cls = ScrollEffect
|
self.screen.ids.telemetry_scrollview.effect_cls = ScrollEffect
|
||||||
info = "\nSideband allows you to securely share telemetry, such as location and sensor data, with people, custom programs, "
|
info = "\nopenCom Companion allows you to securely share telemetry, such as location and sensor data, with people, custom programs, "
|
||||||
info += "machines or other systems over LXMF. You have complete control over what kind of telemetry to send, and who you share "
|
info += "machines or other systems over LXMF. You have complete control over what kind of telemetry to send, and who you share "
|
||||||
info += "it with.\n\nTelemetry data is never sent to, via or processed by any external services or servers, but is carried "
|
info += "it with.\n\nTelemetry data is never sent to, via or processed by any external services or servers, but is carried "
|
||||||
info += "exclusively within encrypted LXMF messages over Reticulum, and only to the destinations you define.\n\nWhen telemetry "
|
info += "exclusively within encrypted LXMF messages over Reticulum, and only to the destinations you define.\n\nWhen telemetry "
|
||||||
info += "is enabled, it is possible to embed telemetry data in normal messages on a per-peer basis. You can control this from "
|
info += "is enabled, it is possible to embed telemetry data in normal messages on a per-peer basis. You can control this from "
|
||||||
info += "the [b]Conversations[/b] list, by selecting the [b]Edit[/b] option for the relevant peer.\n\nYou can also define a "
|
info += "the [b]Conversations[/b] list, by selecting the [b]Edit[/b] option for the relevant peer.\n\nYou can also define a "
|
||||||
info += "[b]Telemetry Collector[/b], that Sideband can automatically send telemetry to on a periodic basis. By default, only "
|
info += "[b]Telemetry Collector[/b], that openCom Companion can automatically send telemetry to on a periodic basis. By default, only "
|
||||||
info += "your own telemetry will be sent to the collector, but by enabling the [b]Send all known to collector[/b] option, you "
|
info += "your own telemetry will be sent to the collector, but by enabling the [b]Send all known to collector[/b] option, you "
|
||||||
info += "can forward all known telemetry to the collector. This can also be used to aggregate telemetry from multiple different "
|
info += "can forward all known telemetry to the collector. This can also be used to aggregate telemetry from multiple different "
|
||||||
info += "collectors, or create chains of transmission.\n\nBy activating the [b]Enable collector[/b] option, this instance of "
|
info += "collectors, or create chains of transmission.\n\nBy activating the [b]Enable collector[/b] option, this instance of "
|
||||||
info += "Sideband will become a Telemetry Collector, and other authorized peers will be able to query its collected data.\n"
|
info += "openCom Companion will become a Telemetry Collector, and other authorized peers will be able to query its collected data.\n"
|
||||||
|
|
||||||
if self.app.theme_cls.theme_style == "Dark":
|
if self.app.theme_cls.theme_style == "Dark":
|
||||||
info = "[color=#"+self.app.dark_theme_text_color+"]"+info+"[/color]"
|
info = "[color=#"+self.app.dark_theme_text_color+"]"+info+"[/color]"
|
||||||
@ -327,7 +327,7 @@ class Telemetry():
|
|||||||
self.app.root.ids.screen_manager.add_widget(self.sensors_screen)
|
self.app.root.ids.screen_manager.add_widget(self.sensors_screen)
|
||||||
self.app.bind_clipboard_actions(self.sensors_screen.ids)
|
self.app.bind_clipboard_actions(self.sensors_screen.ids)
|
||||||
|
|
||||||
info3 = "\nTo include a specific type of telemetry data while sending, it must be enabled below. Please note that some sensor types are not supported on all devices. Sideband will only be able to read a specific type of sensor if your device actually includes hardware for it.\n"
|
info3 = "\nTo include a specific type of telemetry data while sending, it must be enabled below. Please note that some sensor types are not supported on all devices. openCom Companion will only be able to read a specific type of sensor if your device actually includes hardware for it.\n"
|
||||||
if self.app.theme_cls.theme_style == "Dark":
|
if self.app.theme_cls.theme_style == "Dark":
|
||||||
info3 = "[color=#"+self.app.dark_theme_text_color+"]"+info3+"[/color]"
|
info3 = "[color=#"+self.app.dark_theme_text_color+"]"+info3+"[/color]"
|
||||||
self.sensors_screen.ids.telemetry_info3.text = info3
|
self.sensors_screen.ids.telemetry_info3.text = info3
|
||||||
@ -887,7 +887,7 @@ MDScreen:
|
|||||||
MDLabel:
|
MDLabel:
|
||||||
id: telemetry_info5
|
id: telemetry_info5
|
||||||
markup: True
|
markup: True
|
||||||
text: "\\n[i]Read this section before enabling any advanced configuration options[/i]\\n\\nBy using the following options in combination with the basic settings above, it is possible to achieve a broad variety of telemetry collection, sharing and distribution systems. Both distributed, centralised, private and public configurations are possible. This section briefly explains the available options. For more details, refer to the full manual.\\n\\nIf the [b]Embed telemetry to all trusted[/b] option is enabled, Sideband will automatically embed telemetry data in outgoing messages to all peers marked as trusted.\\n\\nWith the [b]Sync all known telemetry to collector[/b] option enabled, Sideband will send not only its own, but all collected telemetry data to the specified collector address. This can be useful for aggregating data from many different areas onto collectors, and for distributed configurations.\\n\\nIf the [b]Always use propagation for telemetry[/b] option is enabled, Sideband will never attempt to directly delivery outbound telemetry, but will always send it via the active propagation node.\\n\\nThe [b]Try propagation if direct delivery fails[/b] option will make Sideband attempt to send outbound telemetry via the active propagation node, if direct delivery to the recipient fails.\\n\\nIf [b]Allow requests from all trusted[/b] is enabled, any peer marked as trusted will be able to perform requests on this Sideband instance.\\n\\n[b]Warning![/b] If the option [b]Allow requests from anyone[/b] is enabled, [i]any peer[/i], on [i]all reachable reticules[/i] will be able to query and access telemetry data stored on this instance. This can be very useful for emergency situations, rescue operations and public coordination, but should be used with [b]extreme caution[/b].\\n\\n[b]Requests[/b] enables remote peers to query telemetry data collected by this instance, and to run available statistics commands. Available commands are currently [b]ping[/b], which requests a small response message, [b]echo[/b] which requests an echo reply of the specified text, and [b]sig[/b] which requests a sigal report, if available.\\n"
|
text: "\\n[i]Read this section before enabling any advanced configuration options[/i]\\n\\nBy using the following options in combination with the basic settings above, it is possible to achieve a broad variety of telemetry collection, sharing and distribution systems. Both distributed, centralised, private and public configurations are possible. This section briefly explains the available options. For more details, refer to the full manual.\\n\\nIf the [b]Embed telemetry to all trusted[/b] option is enabled, openCom Companion will automatically embed telemetry data in outgoing messages to all peers marked as trusted.\\n\\nWith the [b]Sync all known telemetry to collector[/b] option enabled, openCom Companion will send not only its own, but all collected telemetry data to the specified collector address. This can be useful for aggregating data from many different areas onto collectors, and for distributed configurations.\\n\\nIf the [b]Always use propagation for telemetry[/b] option is enabled, openCom Companion will never attempt to directly delivery outbound telemetry, but will always send it via the active propagation node.\\n\\nThe [b]Try propagation if direct delivery fails[/b] option will make openCom Companion attempt to send outbound telemetry via the active propagation node, if direct delivery to the recipient fails.\\n\\nIf [b]Allow requests from all trusted[/b] is enabled, any peer marked as trusted will be able to perform requests on this openCom Companion instance.\\n\\n[b]Warning![/b] If the option [b]Allow requests from anyone[/b] is enabled, [i]any peer[/i], on [i]all reachable reticules[/i] will be able to query and access telemetry data stored on this instance. This can be very useful for emergency situations, rescue operations and public coordination, but should be used with [b]extreme caution[/b].\\n\\n[b]Requests[/b] enables remote peers to query telemetry data collected by this instance, and to run available statistics commands. Available commands are currently [b]ping[/b], which requests a small response message, [b]echo[/b] which requests an echo reply of the specified text, and [b]sig[/b] which requests a sigal report, if available.\\n"
|
||||||
size_hint_y: None
|
size_hint_y: None
|
||||||
text_size: self.width, None
|
text_size: self.width, None
|
||||||
height: self.texture_size[1]
|
height: self.texture_size[1]
|
||||||
|
14
setup.py
@ -67,17 +67,17 @@ package_data = {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
print("Packaging Sideband "+__version__+" "+__variant__)
|
print("Packaging openCom Companion "+__version__+" "+__variant__)
|
||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
name="sbapp",
|
name="occ",
|
||||||
version=__version__,
|
version=__version__,
|
||||||
author="Mark Qvist",
|
author="Liberated Embedded Systems",
|
||||||
author_email="mark@unsigned.io",
|
author_email="contact@liberatedsystems.co.uk",
|
||||||
description="LXMF client for Android, Linux and macOS allowing you to communicate with people or LXMF-compatible systems over Reticulum networks using LoRa, Packet Radio, WiFi, I2P, or anything else Reticulum supports.",
|
description="LXMF client for Android, Linux and macOS allowing you to communicate with people or LXMF-compatible systems over Reticulum networks using LoRa, Packet Radio, WiFi, I2P, or anything else Reticulum supports.",
|
||||||
long_description=long_description,
|
long_description=long_description,
|
||||||
long_description_content_type="text/markdown",
|
long_description_content_type="text/markdown",
|
||||||
url="https://unsigned.io/sideband",
|
url="https://git.liberatedsystems.co.uk/jacob.eva/opencom_companion",
|
||||||
packages=packages,
|
packages=packages,
|
||||||
package_data=package_data,
|
package_data=package_data,
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
@ -87,8 +87,8 @@ setuptools.setup(
|
|||||||
"Operating System :: OS Independent",
|
"Operating System :: OS Independent",
|
||||||
],
|
],
|
||||||
data_files = [
|
data_files = [
|
||||||
('share/applications', ['sbapp/assets/io.unsigned.sideband.desktop']),
|
('share/applications', ['sbapp/assets/uk.co.liberatedsystems.occ.desktop']),
|
||||||
('share/icons/hicolor/512x512/apps', ['sbapp/assets/io.unsigned.sideband.png']),
|
('share/icons/hicolor/512x512/apps', ['sbapp/assets/uk.co.liberatedsystems.occ.png']),
|
||||||
],
|
],
|
||||||
entry_points= {
|
entry_points= {
|
||||||
'console_scripts': [
|
'console_scripts': [
|
||||||
|