Files
community-plugins/phone-connect
CSY2569andGitHub 16d66a5b18 fix(phone-connect): zh-Hans locale, aliasMap, box padding, volume, config data loss, interval, dead settings, slider, UI issues (#199)
* fix(phone-connect): zh-Hans locale, switcher aliasMap, box padding

- Rename zh_hans -> zh-Hans (plugin.toml value, en.json key) and add
  the missing translations/zh-Hans.json. The zh_hans tag does not match
  BCP 47, so the framework's materialize step dropped the Chinese
  translation file and t() returned raw dot keys in the UI.
- Add missing aliasMap definition in switcher() so the multi-device
  panel no longer errors on aliasMap[id]. Fixes #176.
- Replace ui.box({padding=...}) with ui.row({padding=...}); box does
  not support the padding prop, causing ui-tree warnings on open.

Supersedes #190 (which covers only the aliasMap fix).

* fix(phone-connect): volume quoting, config data loss, interval, dead settings, slider, UI issues

1. media_set_volume: shellQuote the <int32> variant arg (was unquoted,
   shell treated < as redirect; same fix as media_seek).
2. onConfigChanged: track last-applied custom_image/device_alias values
   so unrelated config edits (e.g. language switch) no longer wipe a
   device's image/alias. Seed trackers at init so reload is safe too.
3. state_update_interval=0: return 3600000ms + guard in update() to
   skip auto-refresh, matching the '0 disables' description.
4. Remove 4 dead settings (show_ongoing_media, show_device_placeholder,
   scan_subdirectories, max_recent_images) declared but never read,
   plus orphan recent_images translation keys.
5. Media slider: freeze value during drag via per-device dragState so
   the 1s service refresh doesn't yank the slider back. Also fixes
   onDragEnd seeking to a stale seekPos.
6. Minor: runCli reports cli_failed not no_backend; browse uses runAsync
   not runInTerminal; charging color priority over low-battery; device
   name falls back to d.name; fix comment mismatches.

* chore: bump version to 0.1.1

* fix: use lowercase zh-hans translation key to pass CI validation

CI rejects uppercase in translation keys (zh-Hans). The translation key
and label_key are now lowercase zh-hans, while the file name stays
zh-Hans.json (required by the framework's materialize step) and the
select value stays zh-Hans (used to build the file path).
2026-08-01 08:56:54 -04:00
..

Phone Connect

Control your KDE Connect-paired phone from the Noctalia bar.

Plugin

Entry Type Id
icefish/phone-connect plugin —
bar widget icefish/phone-connect:bar
tile shortcut icefish/phone-connect:tile
details panel icefish/phone-connect:details
details_floating panel icefish/phone-connect:details_floating
details_widget panel icefish/phone-connect:details_widget
kde service icefish/phone-connect:kde

Usage

Add the bar widget and control-center tile from Settings, then click either to open the details panel.

Open panels from the shell:

noctalia msg panel-toggle icefish/phone-connect:details
noctalia msg panel-toggle icefish/phone-connect:details_floating
noctalia msg panel-toggle icefish/phone-connect:details_widget

Send IPC events to the service:

noctalia msg plugin icefish/phone-connect:kde all refresh
noctalia msg plugin icefish/phone-connect:kde all cmd '{"op":"ring","device":"<id>"}'

Features

  • Device status — battery level, charging state, network type (5G/LTE), pairing
  • Quick actions — ring, ping, send clipboard, share text/files/URLs, SMS, SFTP browser
  • Media control — play/pause/skip/seek, album art, now-playing (MPRIS)
  • Customization — per-device image and alias, three panel placements
  • Language — English / Simplified Chinese

Requirements

  • kdeconnect — KDE Connect daemon and CLI
  • gdbus — ships with glib2
  • sshfs — optional, for phone file browsing

Settings

Setting Default Description
State Update Interval 30 Seconds between device refreshes
Show Charging Fill true Highlight bar widget when charging
Show Clipboard Action true Show clipboard button in panel
Device Image — Custom image for selected device
Device Alias Your-Phone Custom display name
Language en English / 简体中文
Panel Placement attached Attached / Floating center / Below widget

IPC

Event Payload Description
refresh — Full device refresh
cmd JSON {"op":"…","device":"…"} Execute an operation

Supported ops: ring, ping, clipboard, share_text, share_url, share_file, pair, accept, reject, unpair, browse, sms_send, launch_sms_app, media, media_seek, select, refresh, set_image.

Notes

  • Communicates with KDE Connect via DBus (gdbus call) and CLI (kdeconnect-cli)
  • Persists user preferences to pluginDataDir()/state.json
  • No external network requests; all logic runs locally