Commit Graph

73 Commits

Author SHA1 Message Date
Peter Hutterer e0949a2a5e kete: rename indices/index to timestamp
That's what it is, it hasn't been an index for a while now.
2018-02-19 10:50:41 +10:00
Peter Hutterer d0001e18ed tools: chmod +x on tuhi-live 2018-02-14 16:25:56 +10:00
Benjamin Tissoires 99a2f7bdc5 kete: parse incoming uhid data 2018-02-14 06:23:25 +10:00
Benjamin Tissoires d4dd672b2f live-mode: properly pack the fds over DBus
Keeping this one as a separate commit, so we can use it as a future
reference.
2018-02-14 06:23:25 +10:00
Benjamin Tissoires fec265cb68 live: add a script to run as root that enable live mode
we want to be able to open uhid, so we need root access.
Root access is bad, so we fork the process, and then immediately drop
the privileges to talk to the dbus dameon (or to create one).
2018-02-14 06:23:25 +10:00
Benjamin Tissoires 3eca8da251 kete: add live debugging mode
Just start/stop live mode, the debug happens in the tuhi process.

That's enough until we figure out the DBus API if we need one
2018-02-14 06:23:25 +10:00
Benjamin Tissoires 41a3c85b59 kete: export the connected state of the bluez device to the tuhiketedevice
We need this in the live mode as the connection will be longer than
the usual retrieval of the data.
2018-02-14 06:23:25 +10:00
Benjamin Tissoires e4e0a3b8aa kete: rename the script from tuhi-kete.py to kete.py
Python doesn't really like minus signs in file names, especially
when you start importing the modules. Rename kete from tuhi-kete.py
to kete.py so it makes it easier to have other scripts in the tools
folder to borrow code from kete.
2018-02-14 06:23:25 +10:00
Benjamin Tissoires 590de68269 kete: make Searcher and Listener symmetrical regarding logs
The 'searching' notification was only emitted when it goes to stop, which
means we do not get notifications when it starts.
This makes SearchStopped signal redundant for the generic case, but allows
to get notifications if the search failed to start.

Rest is just making sure we have the same handling of events in Listener
and Searcher.
2018-02-13 14:51:40 +01:00
Benjamin Tissoires d8808e144f kete: better handling of clean up of connection/disconnection of signals
If stop() is called more than once, we might try to disconnect the
signals more than once, which raises some errors.
Better having one central place that handles the disconnect properly.
2018-02-13 14:51:40 +01:00
Peter Hutterer 58220efe31 kete: don't assume all devices are unregistered when searching
Instead, wait for the signal from tuhi and then go for it.

Fixes #80
2018-02-13 14:51:40 +01:00
Peter Hutterer 94bc52efb6 kete: if listening/searching is stopped by the daemon, clean up after us 2018-02-13 14:49:39 +01:00
Benjamin Tissoires abfb0db6a8 kete: catch the ServiceUnknown exception in TuhiKeteDevice
This allows to have more symmetrical handling of the Searcher and
the Listener
2018-02-13 14:49:17 +01:00
Benjamin Tissoires c86c318d6b kete: rename the history file to be histfile
for googleability, as being said
2018-02-07 09:15:59 +01:00
Benjamin Tissoires e63785b5b2 kete: persistent history
We write the history immediately after receiving a new command,
just in case something bad happens.

Fixes #54
2018-02-07 09:38:31 +10:00
Benjamin Tissoires 9829fa6822 flatpak: ship tuhi-kete in the sandbox
To be able to run tuhi-kete, we need a tuhi server running. Provide a
script that spawns one if none is running.

Running simple 'python3 setup.py --install' started to go havoc by
complaining that /app/lib/python3.6/site-packages/easy-install.pth
was read-only.

The solution mentioned in https://github.com/flatpak/flatpak-builder/issues/5
didn't do the trick.

So using https://stackoverflow.com/questions/6301003/stopping-setup-py-from-installing-as-egg/27175492#27175492
as a trick to install the dependencies without the egg part

To start tuhi-kete:
$> flatpak run --command=tuhi-kete org.freedesktop.tuhi

Note that currently the fetched files are not available outside of the
sandbox

Related to #62
2018-02-06 09:03:47 +01:00
Peter Hutterer 5e82d1b378 Rename "pair" to "register"
"pair" is alrady taken by Bluetooth and since we have a bluetooth device here,
it can cause confusion. Use "register" instead, with an explanation in the
README for the more paranoid of us.

Fixes #67
2018-02-02 09:23:08 +01:00
Benjamin Tissoires fc219e4c57 janitor: silence deprecated warnings
While running the app in flatpak, there are a few deprecation warnings
coming in:
PyGIDeprecationWarning: GObject.SIGNAL_RUN_FIRST is deprecated;
	use GObject.SignalFlags.RUN_FIRST instead
PyGIDeprecationWarning: GObject.property is deprecated;
	use GObject.Property instead
PyGIDeprecationWarning: GObject.MainLoop is deprecated;
	use GLib.MainLoop instead
2018-02-02 10:46:47 +10:00
Peter Hutterer b305d6e287 kete: ignore dbus errors during StopSearch
we may call StopSearch after the daemon vanished and while we're stopping all
the workers. Ignore the ServiceUnknown error here.
2018-02-02 09:56:24 +10:00
Peter Hutterer ddef5ea38a kete: allow 'help' even when not connected 2018-02-02 08:55:48 +10:00
Peter Hutterer 02e8cf53ce kete: while disconnected, print a message to that effect
$> ./tools/tuhi-kete.py
Tuhi shell control
WARNING: Tuhi daemon not running
tuhi> list
Not connected to the Tuhi daemon

Better than just a noop
2018-02-02 08:55:13 +10:00
Peter Hutterer 1f93db6ca0 kete: improve some messaging
In the normal mode (without -v) we'd see the errors, but not the messages when
we reconnect. Elevate the "connected to" message to info so it shows up.

And slight rewording, which may or may not be better.
2018-02-02 08:27:23 +10:00
Benjamin Tissoires 3e444d6a0c kete: make the shell survive the disappearing of the daemon
We need to move the mainloop in the Shell as we need to watch on the
name there.

Fixes #55
2018-02-02 08:13:30 +10:00
Benjamin Tissoires 277523c7d5 kete: stop listening when pairing a device
Or the internal state of kete is that the device is listening while
tuhi says it is not.
2018-02-02 08:13:30 +10:00
Benjamin Tissoires db2f37c561 kete: do_fetch: do not remember the worker
There is no stop() method attached to Fetcher, so we don't really need
to remember we called it once to call a NOOP
2018-02-02 08:13:30 +10:00
Benjamin Tissoires 5368e49f5d kete: rename 'list' command into 'devices'
'list' and 'listen' are just too close to each other, meaning the
completion stops at 'list' while the lazy developer/tester want to
do a 'listen'.

Change the name of the less used command so we have separate spaces
for completion
2018-02-02 08:13:30 +10:00
Benjamin Tissoires 0c829754cd tools: add the parse_log script we used to dump the raw btsnoop logs
Better keep this in a public place where it won't vanish from our disks.
Note that this is a python 2 script (because btsnoop), and it should not
be part of the installation, ever.
2018-02-02 08:00:41 +10:00
Peter Hutterer 31e1f2ad3b Export the Bluez device's object path
Rather than proxying all metadata (name, address, ...) add a reference to the
bluez device instead.

Fixes #60
2018-02-01 10:13:39 +10:00
Benjamin Tissoires 501c891a12 kete: bubble up the dbus vanished errors
Not much is done for now, but the shell is notified, which is a big step
2018-01-31 17:03:25 +01:00
Benjamin Tissoires 9b18339890 kete: remove pointless indirection class Printer
In this case, it's easier to just iterate in the do_list() call than
having a Worker element
2018-01-31 17:03:24 +01:00
Benjamin Tissoires 0bc516b13c kete: do_search: make sure we have only one searcher element
This prevents duplicate signals to be sent when the search stops
2018-01-31 17:03:24 +01:00
Benjamin Tissoires a164ea291e kete: clean up the Searcher class
now that there is no more standalone commands, the Searcher can be striped
off of its interactive bits.
2018-01-31 17:03:13 +01:00
Benjamin Tissoires c2ceba7483 kete: clean up a little bit the Worker class
The Worker subclasses now only need to implement run() and stop().
2018-01-31 16:06:09 +01:00
Benjamin Tissoires e4b0f9768d kete: drop TuhiKeteShellWorker and directly use TuhiKeteShell 2018-01-31 16:06:09 +01:00
Benjamin Tissoires 5757bcfab1 kete: move the mainloop thread into the manager
The manager handles the mainloop, so it's easier if it handles the
attached thread too.
2018-01-31 16:06:09 +01:00
Peter Hutterer 8affec2002 kete: drop the _run/_stop indirection, not necessary 2018-01-31 15:47:29 +01:00
Peter Hutterer dba5ddc60c kete: drop the non-interactive bits from tuhi-kete
Fixes #51
2018-01-31 15:47:29 +01:00
Benjamin Tissoires 5889052fb1 kete: fix log errors when the device is not paired anymore
Tuhi raise -EACCES if the UUID stored is not valid anymore.
Instead of shouting some obscure error, we should notify the
user that a pairing need to happen or the device will not talk
to us.

Also fix a small sign mistake in calling os.strerror() for general
errors

Fixes #6
2018-01-31 10:21:57 +10:00
Peter Hutterer e647e20426 Export the battery level/charge state 2018-01-30 18:53:55 +10:00
Benjamin Tissoires a2df5b6ac1 kete/prompt: show meaning of the timestamps
workaround for cumberness of having to type timestamps.

Instead of having some fancy formatted timestamp, help the user
by displaying the translated value
2018-01-30 10:57:17 +10:00
Benjamin Tissoires eb0175bb19 kete: remove one debugging statement used for development
this just messes up the prompt and was meant to be removed before being
pushed/merge into master
2018-01-29 13:59:39 +01:00
Benjamin Tissoires 9f118bbe15 janitor: convert double quotes into single quotes
Let's the developers of tuhi to consume more energy in their monitor
to light up more pixel when displaying single quotes whereas double
quotes.

It also makes the whole bit more uniform.

Fixes #32
2018-01-29 21:18:06 +10:00
Benjamin Tissoires 04f25a0a38 drop .format(), switch to f{} everywhere
and change some double quotes into single quotes when encountering them.

It's a new project, so force use of Python 3.6 right now

Fixes #29
2018-01-29 21:18:06 +10:00
Benjamin Tissoires 2aa8b0dc95 kete/prompt: make completion case insensitive
because there is a high chance users will not use uppercase for
the device addresses
2018-01-29 21:02:23 +10:00
Benjamin Tissoires e7a38c3bdc kete/prompt: add command completion
allows to be much more efficient with the prompt.

I wonder if we can not reuse the argparse facilities somehow
2018-01-29 21:02:23 +10:00
Benjamin Tissoires 08bdaffd89 kete: remove custom namespace class Args
We are using argparse in the various prompt function that already
provide a NameSpace class. We can just reuse it instead of rebuilding
everything.

Given that we enforce/parse the type of the arguments, there is no
need to do more processing.
2018-01-29 21:02:23 +10:00
Benjamin Tissoires 1d3bf40a8c kete/prompt: do_fetch: allow for devices in pairable mode to be paired
this is something quite useful actually
2018-01-29 11:09:25 +01:00
Peter Hutterer 6ad3851afd wacom: set the device time to UTC time on pairing
And let us handle the local time zone conversions in the client, because
having timestamps in localtime in the daemon is confusing and error-prone (how
is the client supposed to know what localtime was?)
2018-01-29 09:44:50 +01:00
Peter Hutterer dfdface640 Colorise the output log
Modified version from
https://stackoverflow.com/questions/384076/how-can-i-color-python-logging-output

Modifications (from that post) include:
* make flake8 happy by removing whitespaces and whatnot
* move everything into a class
* add the LIGHT_* colors
* remove the magic 30+ offset, assign the real color codes instead
* remove the $BG feature, we don't need background colors
2018-01-29 09:14:53 +01:00
Peter Hutterer 7d86305b52 kete: ignore errors during exit
Errors that occur during shutdown because one of the things hasn't been set up
in the expected way do not matter. For the shell we still require a manual
user exit though.

  File "./tools/tuhi-kete.py", line 344, in stop
    self.manager.disconnect(self.s1)
AttributeError: 'Searcher' object has no attribute 's1'

  File "./tools/tuhi-kete.py", line 267, in _on_name_vanished
    self.mainloop.quit()
AttributeError: 'NoneType' object has no attribute 'quit'
2018-01-29 10:12:04 +10:00