Commit Graph

268 Commits

Author SHA1 Message Date
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
Peter Hutterer 2a3b32a4fe base: update the battery state to unknown after 5 minutes
If we don't get battery updates for too long, we don't really know anymore
what the battery is like.

Fixes #47
2018-01-31 06:48:59 +01:00
Peter Hutterer 1a25163733 config: purge all but the last 10 drawings from the config storage directory
Tuhi is not a permanent storage for drawings, this needs to be handled by the
client(s). To make sure no-one is tempted to use it as permanent storage,
always delete all but the last 10 drawings on startup.

Fixes #45
2018-01-31 06:47:18 +01:00
Peter Hutterer 83852701ec config: use os.path.join on the entry directly 2018-01-31 06:47:18 +01:00
Peter Hutterer 47f7ec104a base: remove leftover debug statement 2018-01-31 11:40:07 +10:00
Peter Hutterer 29a6b7446d Add a gitignore file 2018-01-31 10:50:41 +10:00
Benjamin Tissoires 2c8c517c71 wacom: strip out first char of firmwares
The first char is the request, so it should be filtered out to match the
display of Inkspace
2018-01-31 10:21:57 +10:00
Benjamin Tissoires ffd052921a wacom: check for is_spark instead of is_slate
Spark is the past, Slate is the future.
Spark seems to have its own protocol, while the Slate and the Folio are
supposed to have the same firmware. We should probably make Spark the
exception than the other way around.
2018-01-31 10:21:57 +10:00
Benjamin Tissoires 34e08db150 wacom: better differentiate the Slate from the Spark
Relying on the name is a bad idea because:
- the Wacom Inkspace app asks the user to change the name of the device
  on pairing
- the FW should be slightly the same between generations (Folio and Slate
  vs Intuos Pro Paper edition vs Spark)

It appears the Spark doesn't have the "Mysterious characteristics"
mentioned here. And this characteristics seems to send a wacom-like
protocol when pairing to the device or from time to time.

Attempt to differentiate between the Spark and the rest based on that
so we can hope to support the Folio too, and maybe the Intuos Pro Paper
Edition.
2018-01-31 10:21:57 +10: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
Peter Hutterer 0dc3cb5f3a README: add a warning that repairing is needed after application switching
Fixes #39
2018-01-30 08:57:28 +01:00
Peter Hutterer 6ee75bdb34 README: drop the Note subheader
Not needed, just append it to the installation instructions
2018-01-30 08:57:28 +01: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
Benjamin Tissoires 56be286d68 tuhi: fix cold plug of devices last seen in pairing mode
fix ca82af78de ("tuhi: handle cold-plugged devices").

The point of deciding whether a device was in the pairing mode was actually
ignored when building the list of available devices.
2018-01-29 09:14:41 +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
Peter Hutterer 8b50a7c2da kete/prompt: improve the help messages
Now that we have a prompt, make the various help <cmd> messages detailed
enough that someone who doesn't know tuhi well can still figure it out.
2018-01-29 10:12:04 +10:00
Benjamin Tissoires 03672a68f6 kete/prompt: add info command
convenient function to list the currently available drawings
2018-01-29 10:12:04 +10:00
Benjamin Tissoires dd84145b3b kete/prompt: implement pairing
we have to tweak a little the Searcher class for it to not prompt the
request whether to pair to the device or not.
2018-01-29 10:00:22 +10:00
Benjamin Tissoires c1a11280c0 kete/prompt: implement fetch 2018-01-29 10:00:22 +10:00
Benjamin Tissoires 60252f8649 kete/prompt: use argparse instead of home made parser 2018-01-29 09:08:22 +10:00
Benjamin Tissoires b33afcce0c kete/prompt: filter out EOF from the list of commands in the help
It doesn't make any sense to show this.
2018-01-29 09:08:22 +10:00
Benjamin Tissoires 72d19ffdad kete/prompt: re-write the last line
If a log message comes in the background, it will clear the current
command.
Rewrite the current line buffer from readline so we get more user
friendly.
2018-01-29 09:08:22 +10:00
Benjamin Tissoires a833ff2b4c kete/prompt: interleave the logs in a better way with the prompt
We overwrite the current formatter to display or not
the prompt depending if we are in the prompt or not.

To prevent races between the background events and our
current configuration, we acquire/release the lock on
the current handler.
2018-01-29 09:08:22 +10:00
Benjamin Tissoires 8bd79d6b79 kete: add a prompt for interactive commands
Only list and listen commands are currently implemented.

The Ctrl-C handling has been a little bit tricky. The default GLib
mainloop tends to add its own SIGINT handler, which prevents us to
gracefully handle the KeyboardInterrupt exception during cmdloop().

So we need to create the mainloop in TuhiKeteShellWorker directly,
but bypassing the GLib.Mainloop() python facility.
2018-01-29 09:08:22 +10:00
Benjamin Tissoires e1e5a9357b kete: fix disconnect signals on Searcher
We should disconnect the signals on stop() no matter what state we are
2018-01-29 09:08:22 +10:00
Benjamin Tissoires 403eb51ea7 kete: have a common worker implementation
For the various commands, it is easier if we have a common interface
than just a simple function call.

Each current command runs something before the mainloop is created, and
then something after the mainloop is terminated. Having such a worker
allows us to have only one place where we start the mainloop, meaning
that the interactive prompt will not try to start it more than once,
and most above, will not kill it in the middle of a command while other
commands are still running.
2018-01-29 09:08:22 +10:00
Benjamin Tissoires 8e1bba496f kete: use logger instead of plain prints for device notifications 2018-01-29 09:08:22 +10:00
Benjamin Tissoires 5a5a2bc2b8 kete: validate the device address before processing it 2018-01-29 09:08:22 +10:00
Peter Hutterer ef8747f032 README: rename 'index' to 'timestamp' in GetJSONData 2018-01-29 08:23:25 +10:00
Peter Hutterer 4efc415aa1 kete: disconnect from the device/manager signals on exit
Otherwise we resubscribe if we repeatedly call listen in interactive mode
2018-01-25 16:02:34 +10:00
Peter Hutterer 6ad127da3a kete: handle Listening property changes correctly
Previously the assumption was that any change in that property is only from
True to False
2018-01-25 16:02:34 +10:00
Peter Hutterer ab385bd981 dbus: update the listening property, not the internal variable
Otherwise the PropertiesChanged never gets sent
2018-01-25 16:02:34 +10:00
Benjamin Tissoires d4c5f2c081 kete: remove unused local variables 2018-01-25 14:58:28 +10:00