Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: blueman-project/blueman
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 2.4.3
Choose a base ref
...
head repository: blueman-project/blueman
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: main
Choose a head ref
Loading
Showing with 9,794 additions and 2,962 deletions.
  1. +6 −9 .github/workflows/check.yml
  2. +1 −1 .github/workflows/potfile.yml
  3. +55 −1 CHANGELOG.md
  4. +3 −1 Makefile.am
  5. +2 −110 apps/blueman-sendto.in
  6. +2 −1 blueman/Constants.py.in
  7. +72 −21 blueman/Functions.py
  8. +1 −2 blueman/Sdp.py
  9. +5 −5 blueman/Service.py
  10. +8 −6 blueman/bluemantyping.py
  11. +4 −3 blueman/bluez/Adapter.py
  12. +3 −1 blueman/bluez/AgentManager.py
  13. +18 −18 blueman/bluez/Base.py
  14. +9 −8 blueman/bluez/Device.py
  15. +11 −11 blueman/bluez/Manager.py
  16. +7 −6 blueman/bluez/Network.py
  17. +3 −1 blueman/bluez/NetworkServer.py
  18. +5 −0 blueman/bluez/errors.py
  19. +3 −2 blueman/bluez/obex/AgentManager.py
  20. +6 −5 blueman/bluez/obex/Client.py
  21. +5 −4 blueman/bluez/obex/Manager.py
  22. +5 −5 blueman/bluez/obex/ObjectPush.py
  23. +4 −3 blueman/bluez/obex/Session.py
  24. +9 −9 blueman/bluez/obex/Transfer.py
  25. +2 −2 blueman/config/AutoConnectConfig.py
  26. +2 −2 blueman/gobject.py
  27. +2 −2 blueman/gui/Animation.py
  28. +7 −10 blueman/gui/CommonUi.py
  29. +20 −19 blueman/gui/DeviceList.py
  30. +11 −5 blueman/gui/DeviceSelectorDialog.py
  31. +3 −3 blueman/gui/DeviceSelectorList.py
  32. +2 −3 blueman/gui/DeviceSelectorWidget.py
  33. +18 −21 blueman/gui/GenericList.py
  34. +7 −6 blueman/gui/GtkAnimation.py
  35. +35 −22 blueman/gui/Notification.py
  36. +15 −12 blueman/gui/applet/PluginDialog.py
  37. +37 −28 blueman/gui/manager/ManagerDeviceList.py
  38. +16 −12 blueman/gui/manager/ManagerDeviceMenu.py
  39. +9 −25 blueman/gui/manager/ManagerMenu.py
  40. +4 −3 blueman/gui/manager/ManagerProgressbar.py
  41. +2 −2 blueman/gui/manager/ManagerStats.py
  42. +19 −12 blueman/gui/manager/ManagerToolbar.py
  43. +10 −7 blueman/main/Adapter.py
  44. +15 −7 blueman/main/Applet.py
  45. +3 −2 blueman/main/BatteryWatcher.py
  46. +2 −2 blueman/main/Builder.py
  47. +33 −10 blueman/main/DBusProxies.py
  48. +2 −2 blueman/main/DNSServerProvider.py
  49. +14 −16 blueman/main/DbusService.py
  50. +1 −3 blueman/main/DhcpClient.py
  51. +14 −5 blueman/main/Manager.py
  52. +1 −2 blueman/main/MechanismApplication.py
  53. +15 −16 blueman/main/NetConf.py
  54. +5 −4 blueman/main/NetworkManager.py
  55. +7 −6 blueman/main/PPPConnection.py
  56. +28 −24 blueman/main/PluginManager.py
  57. +26 −23 blueman/main/PulseAudioUtils.py
  58. +125 −20 blueman/main/Sendto.py
  59. +4 −2 blueman/main/Services.py
  60. +1 −2 blueman/main/SpeedCalc.py
  61. +3 −0 blueman/main/Tray.py
  62. +47 −29 blueman/main/applet/BluezAgent.py
  63. +11 −13 blueman/main/indicators/GtkStatusIcon.py
  64. +3 −4 blueman/main/indicators/IndicatorInterface.py
  65. +22 −22 blueman/main/indicators/StatusNotifierItem.py
  66. +12 −10 blueman/plugins/AppletPlugin.py
  67. +21 −24 blueman/plugins/BasePlugin.py
  68. +6 −8 blueman/plugins/ServicePlugin.py
  69. +24 −6 blueman/plugins/applet/AutoConnect.py
  70. 0 blueman/plugins/applet/Battery.py
  71. +14 −7 blueman/plugins/applet/ConnectionNotifier.py
  72. +6 −4 blueman/plugins/applet/DBusService.py
  73. +5 −4 blueman/plugins/applet/DhcpClient.py
  74. +2 −1 blueman/plugins/applet/DisconnectItems.py
  75. +3 −3 blueman/plugins/applet/DiscvManager.py
  76. +2 −1 blueman/plugins/applet/GameControllerWakelock.py
  77. +4 −3 blueman/plugins/applet/KillSwitch.py
  78. +37 −34 blueman/plugins/applet/Menu.py
  79. +3 −3 blueman/plugins/applet/NMDUNSupport.py
  80. +3 −3 blueman/plugins/applet/NMPANSupport.py
  81. +6 −6 blueman/plugins/applet/NetUsage.py
  82. +3 −3 blueman/plugins/applet/Networking.py
  83. +3 −2 blueman/plugins/applet/PPPSupport.py
  84. +8 −4 blueman/plugins/applet/PowerManager.py
  85. +20 −20 blueman/plugins/applet/PulseAudioProfile.py
  86. +36 −33 blueman/plugins/applet/RecentConns.py
  87. +8 −7 blueman/plugins/applet/SerialManager.py
  88. +9 −8 blueman/plugins/applet/ShowConnected.py
  89. +19 −3 blueman/plugins/applet/StandardItems.py
  90. +21 −11 blueman/plugins/applet/StatusIcon.py
  91. +1 −3 blueman/plugins/applet/StatusNotifierItem.py
  92. +28 −26 blueman/plugins/applet/TransferService.py
  93. +6 −6 blueman/plugins/manager/Info.py
  94. +1 −2 blueman/plugins/manager/Notes.py
  95. +7 −9 blueman/plugins/manager/PulseAudioProfile.py
  96. +10 −9 blueman/plugins/manager/Services.py
  97. +6 −4 blueman/plugins/mechanism/Network.py
  98. +1 −1 blueman/plugins/mechanism/Ppp.py
  99. +2 −2 blueman/plugins/mechanism/Rfcomm.py
  100. +4 −7 blueman/plugins/services/Network.py
  101. +1 −2 blueman/services/DialupNetwork.py
  102. +2 −3 blueman/services/Functions.py
  103. +7 −7 blueman/services/meta/NetworkService.py
  104. +10 −10 blueman/services/meta/SerialService.py
  105. +26 −2 configure.ac
  106. +1 −0 data/icons/hicolor/48x48/status/Makefile.am
  107. +10 −6 data/org.blueman.gschema.xml
  108. +9 −8 data/ui/manager-main.ui
  109. +4 −3 meson.build
  110. +1 −0 meson_options.txt
  111. +3 −1 module/meson.build
  112. 0 po/ChangeLog
  113. +2 −0 po/LINGUAS
  114. +2 −0 po/POTFILES.in
  115. +256 −215 po/blueman.pot
  116. +269 −466 po/da.po
  117. +63 −121 po/en_GB.po
  118. +3,524 −0 po/eo.po
  119. +12 −11 po/es.po
  120. +34 −34 po/eu.po
  121. +36 −73 po/fi.po
  122. +12 −11 po/fr.po
  123. +3,531 −0 po/ga.po
  124. +240 −393 po/he.po
  125. +11 −14 po/id.po
  126. +111 −163 po/is.po
  127. +20 −18 po/mk.po
  128. +8 −6 po/nb.po
  129. +3 −3 po/ru.po
  130. +11 −16 po/sr.po
  131. +287 −451 po/uk.po
  132. +1 −2 stubs/_blueman.pyi
  133. +2 −0 stubs/gi/repository/Gtk.pyi
  134. +14 −0 test/Makefile.am
  135. +2 −0 test/apps/Makefile.am
  136. +7 −0 test/bluez/Makefile.am
  137. +4 −0 test/bluez/obex/Makefile.am
  138. +7 −0 test/gui/Makefile.am
  139. +3 −0 test/gui/applet/Makefile.am
  140. +3 −0 test/gui/manager/Makefile.am
  141. +11 −0 test/main/Makefile.am
  142. +3 −0 test/main/applet/Makefile.am
  143. +3 −0 test/main/indicators/Makefile.am
  144. +2 −3 test/main/test_dns_server_provider.py
  145. +3 −0 test/module/Makefile.am
  146. +9 −0 test/plugins/Makefile.am
  147. +3 −0 test/plugins/applet/Makefile.am
  148. +3 −0 test/plugins/manager/Makefile.am
  149. +3 −0 test/plugins/mechanism/Makefile.am
  150. +3 −0 test/plugins/services/Makefile.am
  151. +6 −0 test/services/Makefile.am
  152. +3 −0 test/services/meta/Makefile.am
  153. +2 −0 test/testhelpers/Makefile.am
15 changes: 6 additions & 9 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
@@ -26,12 +26,11 @@ jobs:
fail-fast: false
matrix:
python:
- "3.8"
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13-rc"
- "3.13"
- "3.14-rc"
runs-on: ubuntu-latest
container:
image: python:${{ matrix.python }}
@@ -45,12 +44,11 @@ jobs:
fail-fast: false
matrix:
python:
- "3.8"
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13-rc"
- "3.13"
- "3.14-rc"
runs-on: ubuntu-22.04
container:
image: python:${{ matrix.python }}
@@ -69,12 +67,11 @@ jobs:
fail-fast: false
matrix:
python:
- "3.8"
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13-rc"
- "3.13"
- "3.14-rc"
runs-on: ubuntu-22.04
container:
image: python:${{ matrix.python }}
2 changes: 1 addition & 1 deletion .github/workflows/potfile.yml
Original file line number Diff line number Diff line change
@@ -14,7 +14,7 @@ jobs:
- run: sudo apt-get install -y -qq --no-install-recommends autopoint gettext cython3 libglib2.0-dev python-gi-dev libbluetooth-dev
- run: CYTHONEXEC=cython3 ./autogen.sh
- run: make -C po blueman.pot-update
- uses: peter-evans/create-pull-request@v6
- uses: peter-evans/create-pull-request@v7
with:
commit-message: Update blumean.pot
branch: potfile
56 changes: 55 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,59 @@
# Changelog

## main

### Bugs fixed

* Fatal LoadException

### Changes

* Terminate applet on manager termination if it was started by manager

## 2.4.3

### Bugs fixed

* Issues with specific device names
* Deadlock between applet and manager when double-clicking the tray icon

### Changes

* Translation updates

## 2.4.2

### New features

* An option to toggle the manager window with the tray icon (the 2.3 behavior useful when there are no window decorations for closing it)

### Changes

* Only a single battery notification
* Renamed recent connections header in applet menu
* Translation updates

### Bugs fixed

* Broken audio profile applet menu items
* Missing manager window title
* Teardown of DBus mock server in tests

## 2.4.1

### Changes

* Translation updates
* Handle incompabilities with kded6 running on desktops without StatusNotifierItem support

### Bugs fixed

* Fallback for missing icons
* Correct Bluetooth state tracking in manager window
* Sporadic error on battery data (Note that there was a regression in Linux 6.8.2, 6.7.11, 6.6.23 and 6.1.83 that causes it and lots of other trouble)
* Active state on tray icon
* Broken markup in tray menu

## 2.4

### New features
@@ -39,7 +93,7 @@
* Make blueman-services a notebook
* Use the TypedDict as constructor

### Bugs fixes
### Bugs fixed

* Fix device-selected handlers
* Fix deprecations in tests
4 changes: 3 additions & 1 deletion Makefile.am
Original file line number Diff line number Diff line change
@@ -4,7 +4,8 @@ SUBDIRS = \
data \
module \
po \
sendto
sendto \
test

DIST_DOCS = \
CHANGELOG.md \
@@ -15,6 +16,7 @@ DIST_DOCS = \
EXTRA_DIST = \
${DIST_DOCS} \
meson.build \
meson_options.txt \
po/meson.build

MAINTAINERCLEANFILES = \
112 changes: 2 additions & 110 deletions apps/blueman-sendto.in
Original file line number Diff line number Diff line change
@@ -2,7 +2,6 @@
import os
import sys
import signal
import atexit
import logging
import gettext

@@ -19,120 +18,13 @@ if 'BLUEMAN_SOURCE' in os.environ:
_ = gettext.gettext
gettext.textdomain("@GETTEXT_PACKAGE@")

from blueman.Functions import (
setup_icon_path,
check_bluetooth_status,
set_proc_title,
create_parser,
create_logger,
bmexit
)
from blueman.main.Sendto import Sender
from blueman.bluez.Manager import Manager
from blueman.bluez.errors import DBusNoSuchAdapterError
from blueman.gui.DeviceSelectorDialog import DeviceSelectorDialog
from blueman.Functions import set_proc_title, create_parser, create_logger
from blueman.main.Sendto import SendTo

# Workaround introspection bug, gnome bug 622084
signal.signal(signal.SIGINT, signal.SIG_DFL)


class SendTo:
def __init__(self, parsed_args):
setup_icon_path()

check_bluetooth_status(_("Bluetooth needs to be turned on for file sending to work"), bmexit)

if not parsed_args.files:
self.files = self.select_files()
else:
self.files = [os.path.abspath(f) for f in parsed_args.files]

self.device = None
manager = Manager()
adapter = None
adapters = manager.get_adapters()
last_adapter_name = Gio.Settings(schema_id="org.blueman.general")["last-adapter"]

if len(adapters) == 0:
logging.error("Error: No Adapters present")
bmexit()

if parsed_args.source is not None:
try:
adapter = manager.get_adapter(parsed_args.source)
except DBusNoSuchAdapterError:
logging.error("Unknown adapter, trying first available")
pass

if adapter is None:
try:
adapter = manager.get_adapter(last_adapter_name)
except DBusNoSuchAdapterError:
adapter = manager.get_adapter()

self.adapter_path = adapter.get_object_path()

if parsed_args.delete:
def delete_files():
for file in self.files:
os.unlink(file)
atexit.register(delete_files)

if parsed_args.device is None:
if not self.select_device():
bmexit()

self.do_send()

else:
d = manager.find_device(parsed_args.device, self.adapter_path)
if d is None:
bmexit("Unknown bluetooth device")

self.device = d
self.do_send()

def do_send(self):
if not self.files:
logging.warning("No files to send")
bmexit()

sender = Sender(self.device, self.adapter_path, self.files)

def on_result(sender, res):
Gtk.main_quit()

sender.connect("result", on_result)

@staticmethod
def select_files():
d = Gtk.FileChooserDialog(title=_("Select files to send"), icon_name='blueman-send-symbolic', select_multiple=True)
d.add_buttons(_("_Cancel"), Gtk.ResponseType.REJECT, _("_OK"), Gtk.ResponseType.ACCEPT)
resp = d.run()

if resp == Gtk.ResponseType.ACCEPT:
files = d.get_filenames()
d.destroy()
return files
else:
d.destroy()
quit()

def select_device(self):
adapter_name = os.path.split(self.adapter_path)[-1]
d = DeviceSelectorDialog(discover=True, adapter_name=adapter_name)
resp = d.run()
d.close()
if resp == Gtk.ResponseType.ACCEPT:
if d.selection:
self.adapter_path, self.device = d.selection
return True
else:
return False
else:
return False


if __name__ == '__main__':
parser = create_parser(syslog=True)
parser.add_argument("-d", "--device", "--dest", dest="device", action="store",
3 changes: 2 additions & 1 deletion blueman/Constants.py.in
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
__all__ = ["VERSION", "PACKAGE", "WEBSITE", "ICON_PATH", "PIXMAP_PATH", "UI_PATH", "BIN_DIR"]
__all__ = ["VERSION", "PACKAGE", "WEBSITE", "ICON_PATH", "PIXMAP_PATH", "UI_PATH", "BIN_DIR", "BLUETOOTHD_PATH"]

VERSION = "@VERSION@"
PACKAGE = "@PACKAGE@"
@@ -8,6 +8,7 @@ BIN_DIR = "@BINDIR@"
LOCALEDIR = "@LOCALEDIR@"
ICON_PATH = "@icondir@"
PIXMAP_PATH = "@pkgdatadir@/pixmaps"
BLUETOOTHD_PATH = "@bluetoothd_path@"
UI_PATH = "@pkgdatadir@/ui"
DHCP_CONFIG_FILE = "@dhconfig@"
POLKIT = @POLKIT@
Loading