From 5b357110ae4f744f32bd4312c7871a8f38ed50a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Bj=C3=A4reholt?= Date: Fri, 7 May 2021 21:03:38 +0200 Subject: [PATCH] feat: changed docs theme, added v0.10 changelog, lots of small misc changes --- .github/workflows/build.yml | 3 + .gitignore | 3 + .gitmodules | 3 + Makefile | 16 +- media | 1 + poetry.lock | 296 +++++++++++++++------ pyproject.toml | 9 +- src/_static/css/custom.css | 13 + src/architecture.rst | 18 +- src/banner.png | Bin 37229 -> 0 bytes src/changelog.rst | 134 ++++++---- src/changelog/v0_10.md | 437 +++++++++++++++++++++++++++++++ src/conf.py | 46 ++-- src/configuration.rst | 22 +- src/features/filtering-data.rst | 4 +- src/features/pausing-logging.rst | 4 +- src/features/user-interface.rst | 21 +- src/importers.rst | 4 +- src/index.rst | 9 +- src/introduction.rst | 14 +- src/server-compare.rst | 12 + src/watchers.rst | 34 +-- 22 files changed, 880 insertions(+), 223 deletions(-) create mode 100644 .gitmodules create mode 160000 media delete mode 100644 src/banner.png create mode 100644 src/changelog/v0_10.md create mode 100644 src/server-compare.rst diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e8fb3b5..5587747 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,6 +11,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + with: + submodules: recursive + - name: Set up Python 3.7 uses: actions/setup-python@v1 with: diff --git a/.gitignore b/.gitignore index ba349fd..0d5ceaa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ _build .*cache dist + +# generated from md by pandoc +src/changelog/*.rst diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..d4b7a1b --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "media"] + path = media + url = https://github.com/ActivityWatch/media.git diff --git a/Makefile b/Makefile index f3bec71..cb15391 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,19 @@ # Makefile for Sphinx documentation -# + +md_changelogs := $(wildcard src/changelog/*.md) +md_changelogs_output = $(patsubst %.md, %.rst, $(md_changelogs)) + +build: $(md_changelogs_output) + make html + +src/changelog/%.rst: src/changelog/%.md + pandoc $^ -f gfm -o $@ + +_build/html: + make build + +open: + xdg-open _build/html/index.html # You can set these variables from the command line. SPHINXOPTS = diff --git a/media b/media new file mode 160000 index 0000000..7eeb8d6 --- /dev/null +++ b/media @@ -0,0 +1 @@ +Subproject commit 7eeb8d665b1aeb2825457c7e178e14a99d18283c diff --git a/poetry.lock b/poetry.lock index 171f76e..b9225d1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -49,24 +49,24 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "aw-client" -version = "0.3.1" +version = "0.5.0" description = "Client library for ActivityWatch" category = "main" optional = false -python-versions = "^3.6" +python-versions = "^3.7" develop = false [package.dependencies] -aw-core = "branch master" +aw-core = "^0.5" click = "^7.1.1" -persist-queue = "^0.5.0" +persist-queue = "^0.6.0" requests = "^2.22.0" [package.source] type = "git" url = "https://github.com/ActivityWatch/aw-client.git" reference = "master" -resolved_reference = "bbcd1d6f5ddeddbdee62cf92471ff928499ab219" +resolved_reference = "2b18d1a5ac47321d67dba67a3ee16944d244aad1" [[package]] name = "aw-core" @@ -74,7 +74,7 @@ version = "0.5.0" description = "Core library for ActivityWatch" category = "main" optional = false -python-versions = "^3.6" +python-versions = "^3.7" develop = false [package.dependencies] @@ -94,7 +94,7 @@ mongo = ["pymongo (>=3.10.0,<4.0.0)"] type = "git" url = "https://github.com/ActivityWatch/aw-core.git" reference = "master" -resolved_reference = "c7ba6d2b7ec289aaf26ce9282cde26a386a587e5" +resolved_reference = "b11fbe08a0405dec01380493f7b3261163cc6878" [[package]] name = "aw-server" @@ -117,11 +117,11 @@ flask-restx = "^0.2.0" type = "git" url = "https://github.com/ActivityWatch/aw-server.git" reference = "master" -resolved_reference = "f0d650035c0524222da62ad29e154740d89104d0" +resolved_reference = "4e07cd1a2ae3c5138781d4615d6afcf2bcf8f9fb" [[package]] name = "babel" -version = "2.9.0" +version = "2.9.1" description = "Internationalization utilities" category = "main" optional = false @@ -130,6 +130,21 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.dependencies] pytz = ">=2015.7" +[[package]] +name = "beautifulsoup4" +version = "4.9.3" +description = "Screen-scraping library" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +soupsieve = {version = ">1.2", markers = "python_version >= \"3.0\""} + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + [[package]] name = "certifi" version = "2020.12.5" @@ -162,17 +177,6 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -[[package]] -name = "commonmark" -version = "0.9.1" -description = "Python parser for the CommonMark Markdown spec" -category = "main" -optional = false -python-versions = "*" - -[package.extras] -test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] - [[package]] name = "docutils" version = "0.16" @@ -325,6 +329,38 @@ python-versions = "*" six = "*" tornado = {version = "*", markers = "python_version > \"2.7\""} +[[package]] +name = "m2r2" +version = "0.2.7" +description = "Markdown and reStructuredText in a single file." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +docutils = "*" +mistune = "*" + +[[package]] +name = "markdown-it-py" +version = "1.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +category = "main" +optional = false +python-versions = "~=3.6" + +[package.dependencies] +attrs = ">=19,<21" +typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} + +[package.extras] +code_style = ["pre-commit (==2.6)"] +compare = ["commonmark (>=0.9.1,<0.10.0)", "markdown (>=3.2.2,<3.3.0)", "mistletoe-ebp (>=0.10.0,<0.11.0)", "mistune (>=0.8.4,<0.9.0)", "panflute (>=1.12,<2.0)"] +linkify = ["linkify-it-py (>=1.0,<2.0)"] +plugins = ["mdit-py-plugins"] +rtd = ["myst-nb (==0.13.0a1)", "pyyaml", "sphinx (>=2,<4)", "sphinx-copybutton", "sphinx-panels (>=0.4.0,<0.5.0)", "sphinx-book-theme"] +testing = ["coverage", "psutil", "pytest (>=3.6,<4)", "pytest-benchmark (>=3.2,<4.0)", "pytest-cov", "pytest-regressions"] + [[package]] name = "markupsafe" version = "1.1.1" @@ -333,6 +369,52 @@ category = "main" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +[[package]] +name = "mdit-py-plugins" +version = "0.2.8" +description = "Collection of plugins for markdown-it-py" +category = "main" +optional = false +python-versions = "~=3.6" + +[package.dependencies] +markdown-it-py = ">=1.0,<2.0" + +[package.extras] +code_style = ["pre-commit (==2.6)"] +rtd = ["myst-parser (==0.14.0a3)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] +testing = ["coverage", "pytest (>=3.6,<4)", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mistune" +version = "0.8.4" +description = "The fastest markdown parser in pure Python" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "myst-parser" +version = "0.14.0" +description = "An extended commonmark compliant parser, with bridges to docutils & sphinx." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +docutils = ">=0.15,<0.18" +jinja2 = "*" +markdown-it-py = ">=1.0.0,<2.0.0" +mdit-py-plugins = ">=0.2.8,<0.3.0" +pyyaml = "*" +sphinx = ">=2.1,<4" + +[package.extras] +code_style = ["pre-commit (>=2.12,<3.0)"] +linkify = ["linkify-it-py (>=1.0,<2.0)"] +rtd = ["ipython", "sphinx-book-theme (>=0.1.0,<0.2.0)", "sphinx-panels (>=0.5.2,<0.6.0)", "sphinxcontrib-bibtex (>=2.1,<3.0)"] +testing = ["beautifulsoup4", "coverage", "docutils (>=0.17.0,<0.18.0)", "pytest (>=3.6,<4)", "pytest-cov", "pytest-regressions"] + [[package]] name = "packaging" version = "20.9" @@ -362,7 +444,7 @@ python-versions = "*" [[package]] name = "persist-queue" -version = "0.5.1" +version = "0.6.0" description = "A thread-safe disk based persistent queue in Python." category = "main" optional = false @@ -379,9 +461,26 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "pydata-sphinx-theme" +version = "0.6.3" +description = "Bootstrap-based Sphinx theme from the PyData community" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +beautifulsoup4 = "*" +docutils = "<0.17" +sphinx = "*" + +[package.extras] +coverage = ["pytest-cov", "codecov", "sphinx", "numpydoc", "recommonmark", "pandas", "pytest", "pytest-regressions", "beautifulsoup4", "jupyter-sphinx", "plotly", "numpy", "xarray", "docutils (==0.16)"] +test = ["sphinx", "numpydoc", "recommonmark", "pandas", "pytest", "pytest-regressions", "beautifulsoup4", "jupyter-sphinx", "plotly", "numpy", "xarray", "docutils (==0.16)"] + [[package]] name = "pygments" -version = "2.8.1" +version = "2.9.0" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false @@ -427,19 +526,6 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -[[package]] -name = "recommonmark" -version = "0.6.0" -description = "A docutils-compatibility bridge to CommonMark, enabling you to write CommonMark inside of Docutils & Sphinx projects." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -commonmark = ">=0.8.1" -docutils = ">=0.11" -sphinx = ">=1.3.1" - [[package]] name = "requests" version = "2.25.1" @@ -460,7 +546,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] [[package]] name = "six" -version = "1.15.0" +version = "1.16.0" description = "Python 2 and 3 compatibility utilities" category = "main" optional = false @@ -474,6 +560,14 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "soupsieve" +version = "2.2.1" +description = "A modern CSS selector implementation for Beautiful Soup." +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "sphinx" version = "3.5.4" @@ -523,15 +617,26 @@ tornado = ">=3.2" watchdog = ">=0.7.1" [[package]] -name = "sphinx-rtd-theme" -version = "0.4.3" -description = "Read the Docs theme for Sphinx" +name = "sphinx-book-theme" +version = "0.1.0" +description = "Jupyter Book: Create an online book with Jupyter Notebooks" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" [package.dependencies] -sphinx = "*" +beautifulsoup4 = ">=4.6.1,<5" +click = "*" +docutils = ">=0.15" +pydata-sphinx-theme = ">=0.6.0,<0.7.0" +pyyaml = "*" +sphinx = ">=2,<4" + +[package.extras] +code_style = ["pre-commit (>=2.7.0,<2.8.0)"] +live-dev = ["sphinx-autobuild", "web-compile (>=0.2.1,<0.3.0)"] +sphinx = ["folium", "numpy", "matplotlib", "ipywidgets", "pandas", "nbclient", "myst-nb (>=0.11.1,<0.12.0)", "sphinx-togglebutton (>=0.2.1)", "sphinx-copybutton", "plotly", "sphinxcontrib-bibtex (>=2.2,<3.0)", "sphinx-thebe", "ablog (>=0.10.13,<0.11.0)", "sphinxext-opengraph"] +testing = ["myst-nb (>=0.11.1,<0.12.0)", "sphinx-thebe", "coverage", "pytest (>=6.0.1,<6.1.0)", "pytest-cov", "pytest-regressions (>=2.0.1,<2.1.0)"] [[package]] name = "sphinx-tabs" @@ -654,7 +759,7 @@ python-versions = ">= 3.5" [[package]] name = "typing-extensions" -version = "3.7.4.3" +version = "3.10.0.0" description = "Backported and Experimental Type Hints for Python 3.5+" category = "main" optional = false @@ -675,7 +780,7 @@ brotli = ["brotlipy (>=0.6.0)"] [[package]] name = "watchdog" -version = "2.0.2" +version = "2.1.0" description = "Filesystem events monitoring" category = "main" optional = false @@ -711,7 +816,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "c8fb0e7b13bbbf07c46ee49fd5841bfef14fad8e442911dfbc065e26b63e0090" +content-hash = "521e3bc1d20a43da07638802e7bc7a617d96b169d19425dc3f4f04005984be02" [metadata.files] alabaster = [ @@ -738,8 +843,13 @@ aw-client = [] aw-core = [] aw-server = [] babel = [ - {file = "Babel-2.9.0-py2.py3-none-any.whl", hash = "sha256:9d35c22fcc79893c3ecc85ac4a56cde1ecf3f19c540bba0922308a6c06ca6fa5"}, - {file = "Babel-2.9.0.tar.gz", hash = "sha256:da031ab54472314f210b0adcff1588ee5d1d1d0ba4dbd07b94dba82bde791e05"}, + {file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"}, + {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, +] +beautifulsoup4 = [ + {file = "beautifulsoup4-4.9.3-py2-none-any.whl", hash = "sha256:4c98143716ef1cb40bf7f39a8e3eec8f8b009509e74904ba3a7b315431577e35"}, + {file = "beautifulsoup4-4.9.3-py3-none-any.whl", hash = "sha256:fff47e031e34ec82bf17e00da8f592fe7de69aeea38be00523c04623c04fb666"}, + {file = "beautifulsoup4-4.9.3.tar.gz", hash = "sha256:84729e322ad1d5b4d25f805bfa05b902dd96450f43842c4e99067d5e1369eb25"}, ] certifi = [ {file = "certifi-2020.12.5-py2.py3-none-any.whl", hash = "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"}, @@ -757,10 +867,6 @@ colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] -commonmark = [ - {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, - {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, -] docutils = [ {file = "docutils-0.16-py2.py3-none-any.whl", hash = "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af"}, {file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"}, @@ -808,6 +914,14 @@ jsonschema = [ livereload = [ {file = "livereload-2.6.3.tar.gz", hash = "sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869"}, ] +m2r2 = [ + {file = "m2r2-0.2.7-py3-none-any.whl", hash = "sha256:a1b87b00f4d5163a3616253fca4c045f8351818cd803ba2e24af8897442a0eae"}, + {file = "m2r2-0.2.7.tar.gz", hash = "sha256:fbf72ade9f648d41658f97c5267687431612451f36b65761a138fbc276294df5"}, +] +markdown-it-py = [ + {file = "markdown-it-py-1.0.0.tar.gz", hash = "sha256:d40d537a9bc4cb5fba6d3fa8d769ffac394f1a54d373efdf6675469b6d38f8ec"}, + {file = "markdown_it_py-1.0.0-py3-none-any.whl", hash = "sha256:ac9e0f051ffd2aabecdd83b41b8fb71d7ab24005a3e0e63f192138dd699a6932"}, +] markupsafe = [ {file = "MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161"}, {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"}, @@ -862,6 +976,18 @@ markupsafe = [ {file = "MarkupSafe-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8"}, {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"}, ] +mdit-py-plugins = [ + {file = "mdit-py-plugins-0.2.8.tar.gz", hash = "sha256:5991cef645502e80a5388ec4fc20885d2313d4871e8b8e320ca2de14ac0c015f"}, + {file = "mdit_py_plugins-0.2.8-py3-none-any.whl", hash = "sha256:1833bf738e038e35d89cb3a07eb0d227ed647ce7dd357579b65343740c6d249c"}, +] +mistune = [ + {file = "mistune-0.8.4-py2.py3-none-any.whl", hash = "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"}, + {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, +] +myst-parser = [ + {file = "myst-parser-0.14.0.tar.gz", hash = "sha256:fc262959a74cdc799d7fa9b30c320c17187485b9a1e8c39e988fc12f3adff63c"}, + {file = "myst_parser-0.14.0-py3-none-any.whl", hash = "sha256:8d7db76e2f33cd1dc1fe0c76af9f09e5cf19ce2c2e85074bc82f272c0f7c08ce"}, +] packaging = [ {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, @@ -873,15 +999,19 @@ peewee = [ {file = "peewee-3.14.4.tar.gz", hash = "sha256:9e356b327c2eaec6dd42ecea6f4ddded025793dba906a3d065a0452e726c51a2"}, ] persist-queue = [ - {file = "persist-queue-0.5.1.tar.gz", hash = "sha256:27a44e6376bdaff1375f09ba6e14f633192cd2bdc593b948a752d80edea4d68c"}, - {file = "persist_queue-0.5.1-py2.py3-none-any.whl", hash = "sha256:9e2890660305847609bcbfa814ce38229b3629ea98e6fd8fb858bf9533a98d83"}, + {file = "persist-queue-0.6.0.tar.gz", hash = "sha256:e73dd62545d37e519247d96368bfa5c510fde66999a338d6d2d44790dc10f89b"}, + {file = "persist_queue-0.6.0-py2.py3-none-any.whl", hash = "sha256:b7a6a6e642bed23076f03d15d08d87aebad32029f3e702cc10f5b86d6fbd0cb7"}, ] port-for = [ {file = "port-for-0.3.1.tar.gz", hash = "sha256:b16a84bb29c2954db44c29be38b17c659c9c27e33918dec16b90d375cc596f1c"}, ] +pydata-sphinx-theme = [ + {file = "pydata-sphinx-theme-0.6.3.tar.gz", hash = "sha256:32e0580ef985734d652eec2bf25e0995a330a9d4f76deaa353571ce8e180ab14"}, + {file = "pydata_sphinx_theme-0.6.3-py3-none-any.whl", hash = "sha256:f0fee20dc33fa5efa6b9be57368be760d236d8b9c1486b14ad1d17b7e7e0db04"}, +] pygments = [ - {file = "Pygments-2.8.1-py3-none-any.whl", hash = "sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8"}, - {file = "Pygments-2.8.1.tar.gz", hash = "sha256:2656e1a6edcdabf4275f9a3640db59fd5de107d88e8663c5d4e9a0fa62f77f94"}, + {file = "Pygments-2.9.0-py3-none-any.whl", hash = "sha256:d66e804411278594d764fc69ec36ec13d9ae9147193a1740cd34d272ca383b8e"}, + {file = "Pygments-2.9.0.tar.gz", hash = "sha256:a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f"}, ] pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, @@ -928,22 +1058,22 @@ pyyaml = [ {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, ] -recommonmark = [ - {file = "recommonmark-0.6.0-py2.py3-none-any.whl", hash = "sha256:2ec4207a574289355d5b6ae4ae4abb29043346ca12cdd5f07d374dc5987d2852"}, - {file = "recommonmark-0.6.0.tar.gz", hash = "sha256:29cd4faeb6c5268c633634f2d69aef9431e0f4d347f90659fd0aab20e541efeb"}, -] requests = [ {file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"}, {file = "requests-2.25.1.tar.gz", hash = "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804"}, ] six = [ - {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, - {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] snowballstemmer = [ {file = "snowballstemmer-2.1.0-py2.py3-none-any.whl", hash = "sha256:b51b447bea85f9968c13b650126a888aabd4cb4463fca868ec596826325dedc2"}, {file = "snowballstemmer-2.1.0.tar.gz", hash = "sha256:e997baa4f2e9139951b6f4c631bad912dfd3c792467e2f03d7239464af90e914"}, ] +soupsieve = [ + {file = "soupsieve-2.2.1-py3-none-any.whl", hash = "sha256:c2c1c2d44f158cdbddab7824a9af8c4f83c76b1e23e049479aa432feb6c4c23b"}, + {file = "soupsieve-2.2.1.tar.gz", hash = "sha256:052774848f448cf19c7e959adf5566904d525f33a3f8b6ba6f6f8f26ec7de0cc"}, +] sphinx = [ {file = "Sphinx-3.5.4-py3-none-any.whl", hash = "sha256:2320d4e994a191f4b4be27da514e46b3d6b420f2ff895d064f52415d342461e8"}, {file = "Sphinx-3.5.4.tar.gz", hash = "sha256:19010b7b9fa0dc7756a6e105b2aacd3a80f798af3c25c273be64d7beeb482cb1"}, @@ -952,9 +1082,9 @@ sphinx-autobuild = [ {file = "sphinx-autobuild-0.7.1.tar.gz", hash = "sha256:66388f81884666e3821edbe05dd53a0cfb68093873d17320d0610de8db28c74e"}, {file = "sphinx_autobuild-0.7.1-py2-none-any.whl", hash = "sha256:e60aea0789cab02fa32ee63c7acae5ef41c06f1434d9fd0a74250a61f5994692"}, ] -sphinx-rtd-theme = [ - {file = "sphinx_rtd_theme-0.4.3-py2.py3-none-any.whl", hash = "sha256:00cf895504a7895ee433807c62094cf1e95f065843bf3acd17037c3e9a2becd4"}, - {file = "sphinx_rtd_theme-0.4.3.tar.gz", hash = "sha256:728607e34d60456d736cc7991fd236afb828b21b82f956c5ea75f94c8414040a"}, +sphinx-book-theme = [ + {file = "sphinx-book-theme-0.1.0.tar.gz", hash = "sha256:b2db884eb9a843f7864a5660322ac7b0b9cd762f31341dedb4530f1546675bbd"}, + {file = "sphinx_book_theme-0.1.0-py3-none-any.whl", hash = "sha256:182e57262e76c657a8f3082b0922f3617c8b0cb3e4c4079fa6b2ae9b2a5d3ae9"}, ] sphinx-tabs = [ {file = "sphinx-tabs-1.3.0.tar.gz", hash = "sha256:54132c8a57aa19bba6e17fe26eb94ea9df531708ff3f509b119313b32d0d5aff"}, @@ -1038,32 +1168,32 @@ tornado = [ {file = "tornado-6.1.tar.gz", hash = "sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791"}, ] typing-extensions = [ - {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, - {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, - {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, + {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"}, + {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"}, + {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"}, ] urllib3 = [ {file = "urllib3-1.26.4-py2.py3-none-any.whl", hash = "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df"}, {file = "urllib3-1.26.4.tar.gz", hash = "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937"}, ] watchdog = [ - {file = "watchdog-2.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1f518a6940cde8720b8826a705c164e6b9bd6cf8c00f14269ffac51e017e06ec"}, - {file = "watchdog-2.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:74528772516228f6a015a647027057939ff0b695a0b864cb3037e8e1aabc7ca0"}, - {file = "watchdog-2.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1cd715c4fb803581ded8943f39a51f21c17375d009ca9e3398d6b20638863a70"}, - {file = "watchdog-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:41b1a773f364f232b5bc184688e8d60451745d9e0971ac60c648bd47be8f4733"}, - {file = "watchdog-2.0.2-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:035f4816daf3c62e03503c267620f3aa8fc7472df85ff3ef1e0c100ea1ed2744"}, - {file = "watchdog-2.0.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e0114e48ee981b38e328eaa0d5a625c7b4fc144b8dc7f7637749d6b5f7fefb0e"}, - {file = "watchdog-2.0.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:d2fcbc15772a82cd139c803a513c45b0fbc72a10a8a34dc2a8b429110b6f1236"}, - {file = "watchdog-2.0.2-py3-none-manylinux2014_armv7l.whl", hash = "sha256:adda34bfe6db05485c1dfcd98232bdec385f991fe16358750c2163473eefb985"}, - {file = "watchdog-2.0.2-py3-none-manylinux2014_i686.whl", hash = "sha256:a412b1914e27f67b0a10e1ee19b5d035a9f7c115a062bbbd640653d9820ba4c8"}, - {file = "watchdog-2.0.2-py3-none-manylinux2014_ppc64.whl", hash = "sha256:89102465764e453609463cf620e744da1b0aa1f9f321b05961e2e7e15b3c9d8b"}, - {file = "watchdog-2.0.2-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:3e933f3567c4521dd1a5d59fd54a522cae90bebcbeb8b74b84a2f33c90f08388"}, - {file = "watchdog-2.0.2-py3-none-manylinux2014_s390x.whl", hash = "sha256:19675b8d1f00dabe74a0e66d87980623250d9360a21612e8c27b70a4b214ceeb"}, - {file = "watchdog-2.0.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d54e187b76053982180532cb7fd31152201c438b348c456f699929f8a89e786d"}, - {file = "watchdog-2.0.2-py3-none-win32.whl", hash = "sha256:13c9ff58508dce55ba416eb0ef7af5aa5858558f2ec51112f099fd03503b670b"}, - {file = "watchdog-2.0.2-py3-none-win_amd64.whl", hash = "sha256:0f7e9de9ba84af15e9e9fc29c3b13c972daa4d2b11de29aa86b26a26bc877c06"}, - {file = "watchdog-2.0.2-py3-none-win_ia64.whl", hash = "sha256:ac6adbdf32e1d180574f9d0819e80259ae48e68727e80c3d950ed5a023714c3e"}, - {file = "watchdog-2.0.2.tar.gz", hash = "sha256:532fedd993e75554671faa36cd04c580ced3fae084254a779afbbd8aaf00566b"}, + {file = "watchdog-2.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:af1d42ac65bf3f851d787e723a950d9c878c4ef0ff3381a2196d36b0c4b6d39c"}, + {file = "watchdog-2.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8a75022cacbd0ad66ab8a9059322a76a43164ea020b373cbc28ddbacf9410b14"}, + {file = "watchdog-2.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37bf90ef22b666fb0b5c1ea4375c9cbf43f1ff72489a91bf6f0370ba13e09b2a"}, + {file = "watchdog-2.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:66193c811498ff539d0312091bdcbd98cce03b5425b8fa918c80f21a278e8358"}, + {file = "watchdog-2.1.0-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5472ee2d23eaedf16c4b5088897cd9f50cd502074f508011180466d678cdf62a"}, + {file = "watchdog-2.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a079aceede99b83a4cf4089f6e2243c864f368b60f4cce7bf46286f3cfcc8947"}, + {file = "watchdog-2.1.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:da1ca0845bbc92606b08a08988d8dbcba514a16c209be29d211b13cf0d5be2fd"}, + {file = "watchdog-2.1.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:5a62491c035646130c290a4cb773d7de103ac0202ac8305404bdb7db17ab5c3f"}, + {file = "watchdog-2.1.0-py3-none-manylinux2014_i686.whl", hash = "sha256:8c8ff287308a2ba5148aa450d742198d838636b65de52edd3eccfa4c86bf8004"}, + {file = "watchdog-2.1.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:05544fdd1cdc00b5231fb564f17428c5d502756419008cb8045be5b297eac21c"}, + {file = "watchdog-2.1.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:8ab111b71fba4f8f77baa39d42bf923d085f64869396497518c43297fe1ec4e7"}, + {file = "watchdog-2.1.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:06ee7b77a8169f9828f8d24fc3d3d99b2216e1d2f7085b5913022a55161da758"}, + {file = "watchdog-2.1.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:c2d37a9df96d8f9ea560c0824f179168d8501f3e614b5e9f2168b38fe6ef3c12"}, + {file = "watchdog-2.1.0-py3-none-win32.whl", hash = "sha256:6c6fa079abddea664f7ecda0a02636ca276f095bd26f474c23b3f968f1e938ec"}, + {file = "watchdog-2.1.0-py3-none-win_amd64.whl", hash = "sha256:80afa2b32aac3abc7fb6ced508fc612997a0c8fb0f497217d54c524ff52e9e3a"}, + {file = "watchdog-2.1.0-py3-none-win_ia64.whl", hash = "sha256:b8fb08629f52d3e0a060b93d711824f2b06fb8e0d09ad453f2a93d0c97d6b1ec"}, + {file = "watchdog-2.1.0.tar.gz", hash = "sha256:55316efab52f659b8b7b59730680bfb27ac003522f24c44f6bcd60c4e3736ccd"}, ] werkzeug = [ {file = "Werkzeug-1.0.1-py2.py3-none-any.whl", hash = "sha256:2de2a5db0baeae7b2d2664949077c2ac63fbd16d98da0ff71837f7d1dea3fd43"}, diff --git a/pyproject.toml b/pyproject.toml index e2bc0e8..79a465a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,14 +8,15 @@ packages = [{ include = "src/" }] [tool.poetry.dependencies] python = "^3.7" -sphinx = "^3.0.3" -sphinx-autobuild = "^0.7.1" -sphinx_rtd_theme = "^0.4.3" -recommonmark = "^0.6.0" aw-core = {git = "https://github.com/ActivityWatch/aw-core.git", rev = "master"} aw-server = {git = "https://github.com/ActivityWatch/aw-server.git", rev = "master"} aw-client = {git = "https://github.com/ActivityWatch/aw-client.git", rev = "master"} +sphinx = "^3.0.3" +sphinx-autobuild = "^0.7.1" +sphinx-book-theme = "^0.1.0" sphinx-tabs = "^1.1.13" +m2r2 = "^0.2.7" +myst-parser = "^0.14.0" [tool.poetry.dev-dependencies] diff --git a/src/_static/css/custom.css b/src/_static/css/custom.css index 1a33610..2cc2758 100644 --- a/src/_static/css/custom.css +++ b/src/_static/css/custom.css @@ -2,6 +2,19 @@ text-decoration: line-through; } +code { + /* inspired by the style in GitHub's markdown renderer */ + font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace; + font-size: 85%; + padding: 0.2em 0.3em; + margin: 0; + /* on GitHub alpha component is 0.05 */ + background-color: rgba(27,31,35,0.07); + border: 1px solid rgba(27,31,25,0.2); + border-radius: 6px; + color: rgb(51, 51, 51); +} + .rst-content .section ul p { margin-bottom: 0px !important; } diff --git a/src/architecture.rst b/src/architecture.rst index cb62a1c..912ceb2 100644 --- a/src/architecture.rst +++ b/src/architecture.rst @@ -32,8 +32,8 @@ User interfaces ActivityWatch currently has two user interfaces, aw-qt and aw-webui. - - :gh-aw:`aw-qt` - Manages the server and watchers to make ActivityWatch easy to use for end-users. - - :gh-aw:`aw-webui` - Offers visualization and an overview of the database. Hosted by aw-server in the bundle. +- :gh-aw:`aw-qt` - Manages the server and watchers to make ActivityWatch easy to use for end-users. +- :gh-aw:`aw-webui` - Offers visualization and an overview of the database. Hosted by aw-server in the bundle. Libraries --------- @@ -45,10 +45,10 @@ aw-core The aw-core library contains many of the essential parts of ActivityWatch, notably: - - The `buckets-and-events` - - The datastore layer - - Event transformation and queries - - Utilities (configuration, logging, decorators) +- The `buckets-and-events` +- The datastore layer +- Event transformation and queries +- Utilities (configuration, logging, decorators) aw-client ^^^^^^^^^ @@ -58,9 +58,9 @@ A client could both be a watcher which sends data as well as a visualizer which Currently the primary client library is written in Python (known simply as aw-client) but a client library written in JavaScript is on the way and is expected to have the same level of support in the future. - - :gh-aw:`aw-client` (Python) - - :gh-aw:`aw-client-js` (TypeScript/JavaScript, beta) - - :gh-aw:`aw-client-rust` (Rust, work in progress) +- :gh-aw:`aw-client` (Python) +- :gh-aw:`aw-client-js` (TypeScript/JavaScript, beta) +- :gh-aw:`aw-client-rust` (Rust, work in progress) aw-analysis ^^^^^^^^^^^ diff --git a/src/banner.png b/src/banner.png deleted file mode 100644 index 9ed1418f1659f90a0a3f4f195af53585cc0930f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37229 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. +- Categorization is finally here! Including visualizations and settings. The UX still leaves some things to be desired, but it's a great start. +- Daily and Summary views are now merged into one so that you get all the goodies of the Daily view but for arbitrary timeperiods like days/weeks/months! +- Updated the start page, including links to resources like the `user survey `_. Server: - - New unique device ID is now exposed through the info API endpoint, a pre-requisite for building the much requested sync feature. - - Now contains the transforms needed for categorization. +- New unique device ID is now exposed through the info API endpoint, a pre-requisite for building the much requested sync feature. +- Now contains the transforms needed for categorization. Other: - - There is now a Windows installer available, and it automatically sets up autostart! +- There is now a Windows installer available, and it automatically sets up autostart! +-------- v0.8.0b9 -------- @@ -131,8 +143,9 @@ Released 2019-07-03 Web UI: - - Now includes the Summary view for summarizing activity across weekly/monthly/yearly timeperiods! +- Now includes the Summary view for summarizing activity across weekly/monthly/yearly timeperiods! +-------- v0.8.0b8 -------- @@ -143,19 +156,20 @@ Released 2019-03-09 Server: - - Import and export APIs are now usable +- Import and export APIs are now usable Web UI: - - Added Stopwatch functionality - - Added ability to import buckets from export - - Bucket export button now does a full export that includes metadata +- Added Stopwatch functionality +- Added ability to import buckets from export +- Bucket export button now does a full export that includes metadata Other: - - The lowest version of Python supported for building ActivityWatch is now 3.6. - - Fixed PyInstaller-built releases on Windows +- The lowest version of Python supported for building ActivityWatch is now 3.6. +- Fixed PyInstaller-built releases on Windows +-------- v0.8.0b7 -------- @@ -163,17 +177,19 @@ Released 2018-11-03 Web UI: - - Fix broken editor bucket visualization +- Fix broken editor bucket visualization Misc: - - CI Improvements +- CI Improvements +------------------- v0.8.0b2 - v0.8.0b6 ------------------- No changelog written. +-------- v0.8.0b1 -------- @@ -205,6 +221,7 @@ Other: - Windows: Console window and taskbar icon now hidden by default (:issue:`139`) - All issues assigned to the v0.8 milestone can be found :gh-aw:`on GitHub ` +------ v0.7.1 ------ @@ -213,6 +230,7 @@ Released 2017-11-06 - Actually fixed the timezone issue in the web UI (:issue:`117`). - All issues assigned to the v0.7 milestone can be found :gh-aw:`on GitHub `. +-------- v0.7.0b4 -------- @@ -224,6 +242,7 @@ Released 2017-10-22 - Fixed packaging bugs (macOS, PyInstaller). - The web extension now has a better look and notifies if connection to server failed. +-------- v0.7.0b3 -------- @@ -232,6 +251,7 @@ Released 2017-08-25 - Even more improvements to the web UI. - Major improvements to the documentation, notably instructions on how to install from builds and sources. +-------- v0.7.0b2 -------- @@ -239,6 +259,7 @@ Released 2017-08-09 - Improvements to the web UI: a new visualization method (the "today" view) and information for users about the state of the project on the first page. +-------- v0.7.0b1 -------- @@ -257,6 +278,7 @@ There have been several major changes since v0.6. Much of it wont end up here bu - A lot of bug fixes (and hopefully not too many new bugs). - Vastly improved code quality. +---------------- v0.6.0 and older ---------------- diff --git a/src/changelog/v0_10.md b/src/changelog/v0_10.md new file mode 100644 index 0000000..e65dfe2 --- /dev/null +++ b/src/changelog/v0_10.md @@ -0,0 +1,437 @@ +The changelog is written on a per-submodule basis. Look under the Feature subheaders for the most user-affecting changes. + +## Summary + + - ✨ New editable views + - ✨ Timeline (barchart) visualization + - ✨ Update checks + - 🍎 Better support for macOS + - πŸͺŸ Support for Microsoft Edge + - πŸ› Many bug fixes + - πŸ•ΈοΈ The "sunburst clock" vis was removed (temporarily, see https://github.com/ActivityWatch/activitywatch/issues/508#issuecomment-730396764) + - And a lot more... + +## activitywatch (bundle repo) + +#### ✨ Features (1) + - feat: improved generation of changelog ([`7e6acf2`](https://github.com/ActivityWatch/activitywatch/commit/7e6acf2)) + +
πŸ› Fixes (3) +

+ + - fix: fixed inclusion of aw-webui for use with aw-server-rust (fixes [#441](https://github.com/ActivityWatch/activitywatch/issues/441)) ([`2c3fe73`](https://github.com/ActivityWatch/activitywatch/commit/2c3fe73)) + - fix: fixed generation of changelog for subsubmodules ([`77b39b5`](https://github.com/ActivityWatch/activitywatch/commit/77b39b5)) + - fix: switched from biplist to plistlib (following dmgbuild's example) ([`5ddb5f6`](https://github.com/ActivityWatch/activitywatch/commit/5ddb5f6)) + +

+ +
πŸ”¨ Misc (12) +

+ + - docs: updated screenshot in README ([`42bf20c`](https://github.com/ActivityWatch/activitywatch/commit/42bf20c)) + - docs: updated FUNDING.yml ([`c779d75`](https://github.com/ActivityWatch/activitywatch/commit/c779d75)) + - Use git describe --tags --abbrev=0 to retrieve current activitywatch version in aw.spec ([`47cd07e`](https://github.com/ActivityWatch/activitywatch/commit/47cd07e)) + - docs: fixed stray end tag in README ([`b1a89d7`](https://github.com/ActivityWatch/activitywatch/commit/b1a89d7)) + - README: Removed outdated statement that import is not supported ([`370b073`](https://github.com/ActivityWatch/activitywatch/commit/370b073)) + - docs: fixed emoji in bug report issue template title ([`89d8a4f`](https://github.com/ActivityWatch/activitywatch/commit/89d8a4f)) + - docs: updated issue templates ([#429](https://github.com/ActivityWatch/activitywatch/issues/429)) ([`5c139b9`](https://github.com/ActivityWatch/activitywatch/commit/5c139b9)) + - docs: added commit message guidelines to CONTRIBUTING.md ([#415](https://github.com/ActivityWatch/activitywatch/issues/415)) ([`29ad429`](https://github.com/ActivityWatch/activitywatch/commit/29ad429)) + - Merge pull request [#401](https://github.com/ActivityWatch/activitywatch/issues/401) from gwynevans/docTweak ([`b1e8934`](https://github.com/ActivityWatch/activitywatch/commit/b1e8934)) + - Add explanation of AFK acronym to README ([`5193cd1`](https://github.com/ActivityWatch/activitywatch/commit/5193cd1)) + - docs: added new script to build changelog ([#381](https://github.com/ActivityWatch/activitywatch/issues/381)) ([`8ed9754`](https://github.com/ActivityWatch/activitywatch/commit/8ed9754)) + - docs: added GitHub actions badge to README ([`b33711a`](https://github.com/ActivityWatch/activitywatch/commit/b33711a)) + +

+ +## aw-webui + +#### ✨ Features (22) + - feat: made timeline view full-width ([`bba8b35`](https://github.com/ActivityWatch/aw-webui/commit/bba8b35)) + - feat: added stop time to timeline tooltip (fixes[[#200](https://github.com/ActivityWatch/aw-webui/issues/200)](https://github.com/ActivityWatch/aw-webui/issues/200)#issuecomment-674582218) ([`f0e8b4c`](https://github.com/ActivityWatch/aw-webui/commit/f0e8b4c)) + - feat: refactored ActivityEditor into ActivityView, added better info when missing data ([`94f0959`](https://github.com/ActivityWatch/aw-webui/commit/94f0959)) + - feat: added new view modal ([`a0ec9a5`](https://github.com/ActivityWatch/aw-webui/commit/a0ec9a5)) + - feat: added delete view and restore views to default ([`129fdd9`](https://github.com/ActivityWatch/aw-webui/commit/129fdd9)) + - feat: implemented save/cancel when editing view ([`ef52f1e`](https://github.com/ActivityWatch/aw-webui/commit/ef52f1e)) + - feat: added buttons to edit/save view, made ActivityView delegate to ActivityEditor if view_id is 'editor' ([`1beade2`](https://github.com/ActivityWatch/aw-webui/commit/1beade2)) + - feat: added ability to add new views and visualizations ([`6578e7f`](https://github.com/ActivityWatch/aw-webui/commit/6578e7f)) + - feat: continued work on customizable views, fixing a few bugs ([`783733b`](https://github.com/ActivityWatch/aw-webui/commit/783733b)) + - feat: started working on customizable views ([`382308f`](https://github.com/ActivityWatch/aw-webui/commit/382308f)) + - feat: poll user satisfaction and calls to action ([#229](https://github.com/ActivityWatch/aw-webui/issues/229)) ([`f9e0bbf`](https://github.com/ActivityWatch/aw-webui/commit/f9e0bbf)) + - feat: added options to WIP Calendar visualization ([`4e7303a`](https://github.com/ActivityWatch/aw-webui/commit/4e7303a)) + - feat: check for new releases (ActivityWatch/activitywatch[#114](https://github.com/ActivityWatch/aw-webui/issues/114)) ([`b9fe58b`](https://github.com/ActivityWatch/aw-webui/commit/b9fe58b)) + - feat: added proper timeline labeling for stopwatch events ([`5e1afd8`](https://github.com/ActivityWatch/aw-webui/commit/5e1afd8)) + - feat: Add custom hovertext for editor summary and project ([`437a882`](https://github.com/ActivityWatch/aw-webui/commit/437a882)) + - feat: Better user experience when importing buckets ([`d59cf32`](https://github.com/ActivityWatch/aw-webui/commit/d59cf32)) + - feat: Add delete button to EventEditor modal ([`a4cd0b0`](https://github.com/ActivityWatch/aw-webui/commit/a4cd0b0)) + - feat: started working on calendar visualization ([`2b6f6c3`](https://github.com/ActivityWatch/aw-webui/commit/2b6f6c3)) + - feat: Add first/last event to Bucket view ([`915a4cf`](https://github.com/ActivityWatch/aw-webui/commit/915a4cf)) + - feat: ported new Activity view to Android ([`13777cb`](https://github.com/ActivityWatch/aw-webui/commit/13777cb)) + - feat: added support for Edge browser ([`d495f7f`](https://github.com/ActivityWatch/aw-webui/commit/d495f7f)) + - feat: added active history data to demomode, removed excessive logging ([`107ae4d`](https://github.com/ActivityWatch/aw-webui/commit/107ae4d)) + +
πŸ› Fixes (35) +

+ + - fix: added chromium.exe to browser appnames (fixes[[#503](https://github.com/ActivityWatch/aw-webui/issues/503)](https://github.com/ActivityWatch/activitywatch/issues/503)) ([`541e99c`](https://github.com/ActivityWatch/aw-webui/commit/541e99c)) + - fix: improved border-color of events in timeline visualization ([`935354a`](https://github.com/ActivityWatch/aw-webui/commit/935354a)) + - fix: added (commented out) sunburst_clock to SelectableVisualization.vue ([`d4f2b3c`](https://github.com/ActivityWatch/aw-webui/commit/d4f2b3c)) + - fix: fixed missing href, added Discord to links in Home.vue ([`6b5a67b`](https://github.com/ActivityWatch/aw-webui/commit/6b5a67b)) + - fix: minor satisfaction poll fixes ([`392cf8c`](https://github.com/ActivityWatch/aw-webui/commit/392cf8c)) + - fix: fixed invalid type ([`105afdc`](https://github.com/ActivityWatch/aw-webui/commit/105afdc)) + - fix: added linting for tests and fixed lint issues ([`fc5cbe9`](https://github.com/ActivityWatch/aw-webui/commit/fc5cbe9)) + - fix: changed sometimes missing unicode character to icon in CategoryTree ([`50b3258`](https://github.com/ActivityWatch/aw-webui/commit/50b3258)) + - fix: change button to only show for range ([#449](https://github.com/ActivityWatch/aw-webui/issues/449) from activitywatch) ([`0c36bbe`](https://github.com/ActivityWatch/aw-webui/commit/0c36bbe)) + - fix: fix timeline updating before new range is selected ([#449](https://github.com/ActivityWatch/aw-webui/issues/449) from activitywatch) ([`444980a`](https://github.com/ActivityWatch/aw-webui/commit/444980a)) + - fix: fix timeline updating before new range is selected ([#449](https://github.com/ActivityWatch/aw-webui/issues/449) from activitywatch) ([`d2ebb9c`](https://github.com/ActivityWatch/aw-webui/commit/d2ebb9c)) + - fix: Update aw-client-js ([`1448792`](https://github.com/ActivityWatch/aw-webui/commit/1448792)) + - fix: cleaned up queries, unifying more into canonicalQuery ([`03a1242`](https://github.com/ActivityWatch/aw-webui/commit/03a1242)) + - fix: Fix incompatibility with aw-server-python ([`1d3bfd1`](https://github.com/ActivityWatch/aw-webui/commit/1d3bfd1)) + - fix: Fix VisTimeline errors ([`61d2461`](https://github.com/ActivityWatch/aw-webui/commit/61d2461)) + - fix: Fix previously broken ts types ([`2902651`](https://github.com/ActivityWatch/aw-webui/commit/2902651)) + - fix: Fix previously broken ts types ([`e356b24`](https://github.com/ActivityWatch/aw-webui/commit/e356b24)) + - fix: Fix linting issues ([`ccddac7`](https://github.com/ActivityWatch/aw-webui/commit/ccddac7)) + - fix: Fix broken getBucketWithEvents ([`554f3f7`](https://github.com/ActivityWatch/aw-webui/commit/554f3f7)) + - fix: Set headers on tables where they belong ([`f08a43b`](https://github.com/ActivityWatch/aw-webui/commit/f08a43b)) + - fix: Fix 'Updated' field in buckets view for aw-server-rust ([`490901d`](https://github.com/ActivityWatch/aw-webui/commit/490901d)) + - fix: reintroduced active events for barchart visualization ([`2acb3cb`](https://github.com/ActivityWatch/aw-webui/commit/2acb3cb)) + - fix: fixed [#206](https://github.com/ActivityWatch/aw-webui/issues/206), incorrectly escaping backslashes in regex ([`554d05a`](https://github.com/ActivityWatch/aw-webui/commit/554d05a)) + - fix: fixed bug where opening Activity view didn't correctly use today as default date ([`903ad77`](https://github.com/ActivityWatch/aw-webui/commit/903ad77)) + - fix: added 'Firefox-esr' to browser appnames, fixes [#204](https://github.com/ActivityWatch/aw-webui/issues/204) ([`b6f91e3`](https://github.com/ActivityWatch/aw-webui/commit/b6f91e3)) + - fix: Merge window and browser queries ([`f9bcaed`](https://github.com/ActivityWatch/aw-webui/commit/f9bcaed)) + - fix: Subview is now kept when changing date in Activity view ([`f31c75c`](https://github.com/ActivityWatch/aw-webui/commit/f31c75c)) + - fix: fixed filter by category on Android ([`80479d2`](https://github.com/ActivityWatch/aw-webui/commit/80479d2)) + - fix: fixed incorrect references to state ([`0ded48d`](https://github.com/ActivityWatch/aw-webui/commit/0ded48d)) + - fix: Fixed very minor misplacement of button ([`a65623f`](https://github.com/ActivityWatch/aw-webui/commit/a65623f)) + - fix: fixed use of wrong bucket ([`83d14ca`](https://github.com/ActivityWatch/aw-webui/commit/83d14ca)) + - fix: readded active history caching ([`035d4cc`](https://github.com/ActivityWatch/aw-webui/commit/035d4cc)) + - fix: Add notice to download browser watcher if no buckets exist ([`f167565`](https://github.com/ActivityWatch/aw-webui/commit/f167565)) + - fix: See host if only editor buckets exist ([`59197ce`](https://github.com/ActivityWatch/aw-webui/commit/59197ce)) + - fix: Make week start on Monday instead of Sunday ([`dd6abc4`](https://github.com/ActivityWatch/aw-webui/commit/dd6abc4)) + +

+ +
πŸ”¨ Misc (76) +

+ + - Merge pull request [#233](https://github.com/ActivityWatch/aw-webui/issues/233) from ActivityWatch/dev/customizable-views ([`8e886b4`](https://github.com/ActivityWatch/aw-webui/commit/8e886b4)) + - refactor: split 'settings' Vuex store into 'categories' and 'views' ([`2788c14`](https://github.com/ActivityWatch/aw-webui/commit/2788c14)) + - test: fixed e2e screenshot test ([`50e2c0d`](https://github.com/ActivityWatch/aw-webui/commit/50e2c0d)) + - Merge pull request [#167](https://github.com/ActivityWatch/aw-webui/issues/167) from Mte90/patch-1 ([`2c5a934`](https://github.com/ActivityWatch/aw-webui/commit/2c5a934)) + - fix linting ([`526cfdc`](https://github.com/ActivityWatch/aw-webui/commit/526cfdc)) + - remove trailing whitespaces ([`49f3e2e`](https://github.com/ActivityWatch/aw-webui/commit/49f3e2e)) + - fix linting ([`894bf64`](https://github.com/ActivityWatch/aw-webui/commit/894bf64)) + - Merge branch 'master' into patch-1 ([`2e52832`](https://github.com/ActivityWatch/aw-webui/commit/2e52832)) + - docs: fixed comment in PeriodUsage.vue ([#230](https://github.com/ActivityWatch/aw-webui/issues/230)) ([`7912a32`](https://github.com/ActivityWatch/aw-webui/commit/7912a32)) + - Merge pull request [#211](https://github.com/ActivityWatch/aw-webui/issues/211) from ActivityWatch/dev/calendar ([`bfc24c9`](https://github.com/ActivityWatch/aw-webui/commit/bfc24c9)) + - Merge branch 'master' into dev/calendar ([`376e44f`](https://github.com/ActivityWatch/aw-webui/commit/376e44f)) + - Merge pull request [#225](https://github.com/ActivityWatch/aw-webui/issues/225) from billangli/dev/check-for-new-releases ([`707c45a`](https://github.com/ActivityWatch/aw-webui/commit/707c45a)) + - clean up code ([`f8b876b`](https://github.com/ActivityWatch/aw-webui/commit/f8b876b)) + - add aliasing to jest config ([`a8b35d9`](https://github.com/ActivityWatch/aw-webui/commit/a8b35d9)) + - ignore screenshot.test.js from npm test script ([`81a6985`](https://github.com/ActivityWatch/aw-webui/commit/81a6985)) + - Merge pull request [#219](https://github.com/ActivityWatch/aw-webui/issues/219) from billangli/dev/timeline-input-button ([`02a37cc`](https://github.com/ActivityWatch/aw-webui/commit/02a37cc)) + - move initial request to be called from InputTimeInterval ([`050f700`](https://github.com/ActivityWatch/aw-webui/commit/050f700)) + - Change select from v-bind to v-model ([`435896a`](https://github.com/ActivityWatch/aw-webui/commit/435896a)) + - lint-fix ([`7a39a23`](https://github.com/ActivityWatch/aw-webui/commit/7a39a23)) + - Merge branch 'dev/timeline-input-button' of https://github.com/billangli/aw-webui into dev/timeline-input-button ([`6e1eedb`](https://github.com/ActivityWatch/aw-webui/commit/6e1eedb)) + - style: fixed lints, applied prettier v2 style, removed old Log view ([`91878ee`](https://github.com/ActivityWatch/aw-webui/commit/91878ee)) + - Merge pull request [#218](https://github.com/ActivityWatch/aw-webui/issues/218) from ActivityWatch/dev/settings-split ([`11245d7`](https://github.com/ActivityWatch/aw-webui/commit/11245d7)) + - Merge pull request [#217](https://github.com/ActivityWatch/aw-webui/issues/217) from ActivityWatch/dev/summary-custom-hovertext ([`e0d26ec`](https://github.com/ActivityWatch/aw-webui/commit/e0d26ec)) + - refactor: Split Settings into multiple views ([`ed37580`](https://github.com/ActivityWatch/aw-webui/commit/ed37580)) + - Merge pull request [#210](https://github.com/ActivityWatch/aw-webui/issues/210) from ActivityWatch/dev/import-ux-enhancement ([`0038e50`](https://github.com/ActivityWatch/aw-webui/commit/0038e50)) + - Merge pull request [#214](https://github.com/ActivityWatch/aw-webui/issues/214) from ActivityWatch/dev/move-delete-button ([`443528f`](https://github.com/ActivityWatch/aw-webui/commit/443528f)) + - refactor: Move modal into EventEditor ([`9319fca`](https://github.com/ActivityWatch/aw-webui/commit/9319fca)) + - Merge pull request [#209](https://github.com/ActivityWatch/aw-webui/issues/209) from ActivityWatch/dev/lint-fix ([`63d23f9`](https://github.com/ActivityWatch/aw-webui/commit/63d23f9)) + - Merge pull request [#208](https://github.com/ActivityWatch/aw-webui/issues/208) from ActivityWatch/dev/vuex-fix ([`16e37ae`](https://github.com/ActivityWatch/aw-webui/commit/16e37ae)) + - Merge pull request [#202](https://github.com/ActivityWatch/aw-webui/issues/202) from ActivityWatch/dev/last_updated_buckets_fix ([`4b08fbd`](https://github.com/ActivityWatch/aw-webui/commit/4b08fbd)) + - Merge pull request [#203](https://github.com/ActivityWatch/aw-webui/issues/203) from ActivityWatch/dev/merge-window-and-browser-queries ([`09df952`](https://github.com/ActivityWatch/aw-webui/commit/09df952)) + - Merge pull request [#207](https://github.com/ActivityWatch/aw-webui/issues/207) from ActivityWatch/dev/today-bug ([`7821419`](https://github.com/ActivityWatch/aw-webui/commit/7821419)) + - Merge pull request [#2](https://github.com/ActivityWatch/aw-webui/issues/2) from skuzzymiglet/patch-1 ([`4d81a09`](https://github.com/ActivityWatch/aw-webui/commit/4d81a09)) + - Merge pull request [#201](https://github.com/ActivityWatch/aw-webui/issues/201) from ActivityWatch/dev/period-link-subview-fix ([`df5a625`](https://github.com/ActivityWatch/aw-webui/commit/df5a625)) + - Fix bug with browser activity not showing "Loading..." when loading ([`9247aed`](https://github.com/ActivityWatch/aw-webui/commit/9247aed)) + - Merge pull request [#197](https://github.com/ActivityWatch/aw-webui/issues/197) from ActivityWatch/dev/small-tweaks ([`1a969b3`](https://github.com/ActivityWatch/aw-webui/commit/1a969b3)) + - improvement(design): more small design improvements ([`7a2693d`](https://github.com/ActivityWatch/aw-webui/commit/7a2693d)) + - improvement(design): further fixes to design on small screens, added links to watchers page in the docs whenmissing browser or editor buckets ([`3dc3615`](https://github.com/ActivityWatch/aw-webui/commit/3dc3615)) + - improvement(design): made improvements to the design of the Activity view, including smaller tabs and placing the periodLength select in between the 'previous' and 'next' buttons ([`06ccbbe`](https://github.com/ActivityWatch/aw-webui/commit/06ccbbe)) + - Merge pull request [#196](https://github.com/ActivityWatch/aw-webui/issues/196) from ActivityWatch/dependabot/npm_and_yarn/jquery-3.5.0 ([`7c9a7d5`](https://github.com/ActivityWatch/aw-webui/commit/7c9a7d5)) + - Merge pull request [#194](https://github.com/ActivityWatch/aw-webui/issues/194) from ActivityWatch/dev/eslint-fix ([`4973c62`](https://github.com/ActivityWatch/aw-webui/commit/4973c62)) + - Merge pull request [#195](https://github.com/ActivityWatch/aw-webui/issues/195) from ActivityWatch/dev/cleanups ([`7242bed`](https://github.com/ActivityWatch/aw-webui/commit/7242bed)) + - refactor: Removed unnecessary prints ([`9c616e2`](https://github.com/ActivityWatch/aw-webui/commit/9c616e2)) + - style: fixed eslint warnings ([`187c7e5`](https://github.com/ActivityWatch/aw-webui/commit/187c7e5)) + - Merge pull request [#183](https://github.com/ActivityWatch/aw-webui/issues/183) from ActivityWatch/dev/android-update ([`c535835`](https://github.com/ActivityWatch/aw-webui/commit/c535835)) + - refactor: cleanup and minor restyling of SelectableVisualization ([`b215d50`](https://github.com/ActivityWatch/aw-webui/commit/b215d50)) + - Merge pull request [#193](https://github.com/ActivityWatch/aw-webui/issues/193) from ActivityWatch/dev/period-length-fix ([`51bab94`](https://github.com/ActivityWatch/aw-webui/commit/51bab94)) + - refactor: removed old Android activity view ([`afdf0fc`](https://github.com/ActivityWatch/aw-webui/commit/afdf0fc)) + - refactor: changed buckets.(type)_buckets to simply buckets.(type), added androidBucketsByHost ([`f90c0af`](https://github.com/ActivityWatch/aw-webui/commit/f90c0af)) + - Merge pull request [#192](https://github.com/ActivityWatch/aw-webui/issues/192) from NicoWeio/better-errors ([`0f9eb0c`](https://github.com/ActivityWatch/aw-webui/commit/0f9eb0c)) + - remove dedupe "feature"; rewrite code for display message ([`3b1a22f`](https://github.com/ActivityWatch/aw-webui/commit/3b1a22f)) + - bugfix: Inconsistency when changing period length ([`1704d71`](https://github.com/ActivityWatch/aw-webui/commit/1704d71)) + - display error message from API requests if available ([`452ac82`](https://github.com/ActivityWatch/aw-webui/commit/452ac82)) + - Merge pull request [#190](https://github.com/ActivityWatch/aw-webui/issues/190) from ActivityWatch/dev/selectable-activity-views ([`353634b`](https://github.com/ActivityWatch/aw-webui/commit/353634b)) + - refactor: Rename ActivityDaily to just Activity ([`bc4e950`](https://github.com/ActivityWatch/aw-webui/commit/bc4e950)) + - feature: Make views in summary selectable ([`c366500`](https://github.com/ActivityWatch/aw-webui/commit/c366500)) + - Merge pull request [#189](https://github.com/ActivityWatch/aw-webui/issues/189) from ActivityWatch/dev/daily-activity-vuex-refactor2 ([`a5a9e70`](https://github.com/ActivityWatch/aw-webui/commit/a5a9e70)) + - refactor: Made activity_daily vuex more structured and easier to read ([`e30bad4`](https://github.com/ActivityWatch/aw-webui/commit/e30bad4)) + - Merge pull request [#186](https://github.com/ActivityWatch/aw-webui/issues/186) from ActivityWatch/dev/make-queries-less-dependent ([`6379134`](https://github.com/ActivityWatch/aw-webui/commit/6379134)) + - Merge pull request [#185](https://github.com/ActivityWatch/aw-webui/issues/185) from ActivityWatch/dev/monday-start-of-week ([`3451196`](https://github.com/ActivityWatch/aw-webui/commit/3451196)) + - Merge pull request [#182](https://github.com/ActivityWatch/aw-webui/issues/182) from ActivityWatch/dev/demomode-active-history ([`fbcb5ab`](https://github.com/ActivityWatch/aw-webui/commit/fbcb5ab)) + - Merge pull request [#181](https://github.com/ActivityWatch/aw-webui/issues/181) from ActivityWatch/dev/edge-browser ([`91bdb2c`](https://github.com/ActivityWatch/aw-webui/commit/91bdb2c)) + - Merge pull request [#179](https://github.com/ActivityWatch/aw-webui/issues/179) from ActivityWatch/github-actions ([`ed6bed6`](https://github.com/ActivityWatch/aw-webui/commit/ed6bed6)) + - Merge pull request [#178](https://github.com/ActivityWatch/aw-webui/issues/178) from ActivityWatch/dev/better-demomode ([`f3fcb20`](https://github.com/ActivityWatch/aw-webui/commit/f3fcb20)) + - Merge branch 'dev/better-demomode' of github.com:ActivityWatch/aw-webui into dev/better-demomode ([`fdd8052`](https://github.com/ActivityWatch/aw-webui/commit/fdd8052)) + - docs: added more activities to demomode ([`cc5b437`](https://github.com/ActivityWatch/aw-webui/commit/cc5b437)) + - added computation of demo data from single list of events ([`f0a06dd`](https://github.com/ActivityWatch/aw-webui/commit/f0a06dd)) + - added computation of demo data from single list of events ([`1362f2d`](https://github.com/ActivityWatch/aw-webui/commit/1362f2d)) + - Merge pull request [#177](https://github.com/ActivityWatch/aw-webui/issues/177) from ActivityWatch/dev/prettier ([`f9c0b40`](https://github.com/ActivityWatch/aw-webui/commit/f9c0b40)) + - ran `make lint-fix` ([`a1428a4`](https://github.com/ActivityWatch/aw-webui/commit/a1428a4)) + - Merge pull request [#176](https://github.com/ActivityWatch/aw-webui/issues/176) from ActivityWatch/dev/demomode ([`553cceb`](https://github.com/ActivityWatch/aw-webui/commit/553cceb)) + - added fully covered examples of data for demomode ([`5a47ebe`](https://github.com/ActivityWatch/aw-webui/commit/5a47ebe)) + - added lint-fix to Makefile (eslint --fix), now also lints typescript files ([`3ea66bb`](https://github.com/ActivityWatch/aw-webui/commit/3ea66bb)) + - started working on demo mode ([`8f9af1c`](https://github.com/ActivityWatch/aw-webui/commit/8f9af1c)) + - Combine aw-webui PR [#173](https://github.com/ActivityWatch/aw-webui/issues/173) ([`0b9da98`](https://github.com/ActivityWatch/aw-webui/commit/0b9da98)) + - More software to categorize ([`755c6f0`](https://github.com/ActivityWatch/aw-webui/commit/755c6f0)) + +

+ +## aw-qt + +#### ✨ Features (1) + - feat: switched to using click for the CLI, fixed bugs ([`682a73f`](https://github.com/ActivityWatch/aw-qt/commit/682a73f)) + +
πŸ› Fixes (8) +

+ + - fix: fixed assumption about pathsep ([`b7da7c3`](https://github.com/ActivityWatch/aw-qt/commit/b7da7c3)) + - fix: improved module detection, added comments ([`1924e3b`](https://github.com/ActivityWatch/aw-qt/commit/1924e3b)) + - fix: fixed module detection and naming ([`063a00c`](https://github.com/ActivityWatch/aw-qt/commit/063a00c)) + - fix: fixed bugs in bundled/system modules ([`83cc4db`](https://github.com/ActivityWatch/aw-qt/commit/83cc4db)) + - fix: fixed typing checks ([`01378f1`](https://github.com/ActivityWatch/aw-qt/commit/01378f1)) + - fix: minor cleanup ([`f6d26c7`](https://github.com/ActivityWatch/aw-qt/commit/f6d26c7)) + - fix: made sip an explicit dependency (see[[#433](https://github.com/ActivityWatch/aw-qt/issues/433)](https://github.com/ActivityWatch/activitywatch/issues/433)) ([`56cc28c`](https://github.com/ActivityWatch/aw-qt/commit/56cc28c)) + - fix: replace webbrowser.open with xdg-open with original LD_LIBRARY_PATH ([`bcd27a0`](https://github.com/ActivityWatch/aw-qt/commit/bcd27a0)) + +

+ +
πŸ”¨ Misc (32) +

+ + - manager: Fix issue with bundled modules not being detected ([`d887ca5`](https://github.com/ActivityWatch/aw-qt/commit/d887ca5)) + - manager: Make matching of executables more accurate ([`1d421ba`](https://github.com/ActivityWatch/aw-qt/commit/1d421ba)) + - Merge pull request [#64](https://github.com/ActivityWatch/aw-qt/issues/64) from ActivityWatch/dev/fix-module-name-and-filtering ([`9a569fa`](https://github.com/ActivityWatch/aw-qt/commit/9a569fa)) + - docs: updated README with badges and minimal build instructions ([`3db74cd`](https://github.com/ActivityWatch/aw-qt/commit/3db74cd)) + - Merge pull request [#56](https://github.com/ActivityWatch/aw-qt/issues/56) from xylix/dev/improved-module-detection ([`839c9fd`](https://github.com/ActivityWatch/aw-qt/commit/839c9fd)) + - style: removed unused imports ([`157a546`](https://github.com/ActivityWatch/aw-qt/commit/157a546)) + - Merge branch 'master' into dev/improved-module-detection ([`0a359bd`](https://github.com/ActivityWatch/aw-qt/commit/0a359bd)) + - Merge pull request [#59](https://github.com/ActivityWatch/aw-qt/issues/59) from ActivityWatch/dev/fix-buggy-webbrowser-open ([`707b75b`](https://github.com/ActivityWatch/aw-qt/commit/707b75b)) + - Get PATH using python's os module instead of getting environment variable and manually splitting ([`68314f0`](https://github.com/ActivityWatch/aw-qt/commit/68314f0)) + - Merge pull request [#57](https://github.com/ActivityWatch/aw-qt/issues/57) from xylix/dev/trayicon-color-fix ([`eadf39d`](https://github.com/ActivityWatch/aw-qt/commit/eadf39d)) + - Let trayicon owning program handle coloring it with filters ([`5385d8b`](https://github.com/ActivityWatch/aw-qt/commit/5385d8b)) + - Add some informative pydoc comments ([`2a6a8da`](https://github.com/ActivityWatch/aw-qt/commit/2a6a8da)) + - Recursively find submodules in subdirectories ([`9a849ca`](https://github.com/ActivityWatch/aw-qt/commit/9a849ca)) + - Remove unnecessary possible_modules config option ([`9e4b15e`](https://github.com/ActivityWatch/aw-qt/commit/9e4b15e)) + - Add pip cache for macOS, should make pyobjc etc. installation significantly faster ([`b14b1be`](https://github.com/ActivityWatch/aw-qt/commit/b14b1be)) + - Improve autostart() input typing ([`8808f7c`](https://github.com/ActivityWatch/aw-qt/commit/8808f7c)) + - Add pyqt type stubs to dev dependencies, nicer mypy output by default ([`a7c098c`](https://github.com/ActivityWatch/aw-qt/commit/a7c098c)) + - Fix lambda parameter amount to allow termination on sigint / sigkill ([`ea9d196`](https://github.com/ActivityWatch/aw-qt/commit/ea9d196)) + - Improve type safety and add some info logs / comments ([`d4e33cf`](https://github.com/ActivityWatch/aw-qt/commit/d4e33cf)) + - Improve mypy typing ([`4403d19`](https://github.com/ActivityWatch/aw-qt/commit/4403d19)) + - Merge remote-tracking branch 'xylix/dev/autodetect-modules' into dev/improved-module-detection ([`2a05ba1`](https://github.com/ActivityWatch/aw-qt/commit/2a05ba1)) + - remove 1 unused import, don't treat aw-server as a special case in creating module menu ([`7a67423`](https://github.com/ActivityWatch/aw-qt/commit/7a67423)) + - Add type hints to new code ([`94dc1df`](https://github.com/ActivityWatch/aw-qt/commit/94dc1df)) + - rename QTSettings to AwQtSettings and add aw-server-rust ([`9dfea4b`](https://github.com/ActivityWatch/aw-qt/commit/9dfea4b)) + - Store available and autostart modules lists as configuration. See [#47](https://github.com/ActivityWatch/aw-qt/issues/47) ([`a974e2c`](https://github.com/ActivityWatch/aw-qt/commit/a974e2c)) + - actually check for module existence in manager ([`b7ed55a`](https://github.com/ActivityWatch/aw-qt/commit/b7ed55a)) + - fixed typechecking and enabled on Travis ([`6db5435`](https://github.com/ActivityWatch/aw-qt/commit/6db5435)) + - categorized module menu by location of module ([`70cca98`](https://github.com/ActivityWatch/aw-qt/commit/70cca98)) + - fixed issue when location in PATH does not exist ([`4078647`](https://github.com/ActivityWatch/aw-qt/commit/4078647)) + - fixed crash when module couldn't be started ([`ba88995`](https://github.com/ActivityWatch/aw-qt/commit/ba88995)) + - fixed bundled modules ([`fbe3519`](https://github.com/ActivityWatch/aw-qt/commit/fbe3519)) + - added basic module autodetection ([`53f7dd0`](https://github.com/ActivityWatch/aw-qt/commit/53f7dd0)) + +

+ +## aw-server + +
πŸ”¨ Misc (1) +

+ + - docs(README): updated outdated build instructions ([#72](https://github.com/ActivityWatch/aw-server/issues/72)) ([`7bab7f0`](https://github.com/ActivityWatch/aw-server/commit/7bab7f0)) + +

+ +## aw-server-rust + +
πŸ› Fixes (13) +

+ + - fix: corrected non-standard log dir on macOS (fixes [#187](https://github.com/ActivityWatch/aw-server-rust/issues/187)) ([`623dfb4`](https://github.com/ActivityWatch/aw-server-rust/commit/623dfb4)) + - fix: correct lookup of asset_path for .app bundles on macOS ([`9be9962`](https://github.com/ActivityWatch/aw-server-rust/commit/9be9962)) + - fix: Drop single events if corrupted instead of failing whole import ([`96cbc9d`](https://github.com/ActivityWatch/aw-server-rust/commit/96cbc9d)) + - fix: Replace serde_derive with serdes derive feature for all crates ([`5c68853`](https://github.com/ActivityWatch/aw-server-rust/commit/5c68853)) + - fix: Set allocator to jemalloc ([`eabf9a1`](https://github.com/ActivityWatch/aw-server-rust/commit/eabf9a1)) + - fix: Allow floods to merge same event multiple times ([`f5bf3cc`](https://github.com/ActivityWatch/aw-server-rust/commit/f5bf3cc)) + - fix: Remove unnecessary clones ([`db720bf`](https://github.com/ActivityWatch/aw-server-rust/commit/db720bf)) + - fix: Fix clippy issues in aw-transform ([`158cf60`](https://github.com/ActivityWatch/aw-server-rust/commit/158cf60)) + - fix: dependency update needed for new Rust nightly (see https://github.com/ActivityWatch/aw-android/pull/40#issuecomment-651328018) ([`ca905a8`](https://github.com/ActivityWatch/aw-server-rust/commit/ca905a8)) + - fix: added limit parameter to the JNI wrapper for get_events ([`147a2d0`](https://github.com/ActivityWatch/aw-server-rust/commit/147a2d0)) + - fix: fixed issue in compile-android.sh script ([`c101a87`](https://github.com/ActivityWatch/aw-server-rust/commit/c101a87)) + - fix: removed stale .cargo/config and added to .gitignore ([`d7bfc23`](https://github.com/ActivityWatch/aw-server-rust/commit/d7bfc23)) + - fix: changed cfg(debug_assertions) to is_testing for runtime checks ([`96bbb0e`](https://github.com/ActivityWatch/aw-server-rust/commit/96bbb0e)) + +

+ +
πŸ”¨ Misc (60) +

+ + - chore: bumped version number to v0.10.0 ([`f1f5095`](https://github.com/ActivityWatch/aw-server-rust/commit/f1f5095)) + - aw-transform: Optimize filter_period_intersect by pre-calculating endtimes ([`ebb1fdd`](https://github.com/ActivityWatch/aw-server-rust/commit/ebb1fdd)) + - aw-transform: Add benchmark for filter_period_intersect ([`4f00b19`](https://github.com/ActivityWatch/aw-server-rust/commit/4f00b19)) + - aw-query: Refactor benchmark code ([`eabcf74`](https://github.com/ActivityWatch/aw-server-rust/commit/eabcf74)) + - Cargo.lock: Update dependencies ([`2fc85f3`](https://github.com/ActivityWatch/aw-server-rust/commit/2fc85f3)) + - aw-server: Test key_value of different types ([`70968e4`](https://github.com/ActivityWatch/aw-server-rust/commit/70968e4)) + - Make settings value possibly any json type ([`6ecb206`](https://github.com/ActivityWatch/aw-server-rust/commit/6ecb206)) + - aw-models: Add custom schema for tryparse ([`03fd9cd`](https://github.com/ActivityWatch/aw-server-rust/commit/03fd9cd)) + - Cargo.lock: Update dependencies ([`7f2bf15`](https://github.com/ActivityWatch/aw-server-rust/commit/7f2bf15)) + - aw-models: Add schemars support ([`e1131d6`](https://github.com/ActivityWatch/aw-server-rust/commit/e1131d6)) + - aw-datastore: Add bucket_id to errors ([`5bdd6f3`](https://github.com/ActivityWatch/aw-server-rust/commit/5bdd6f3)) + - aw-server: Add Into trait for DatastoreError to HttpErrorJson ([`7a19f34`](https://github.com/ActivityWatch/aw-server-rust/commit/7a19f34)) + - aw-server: Fix compilation on android ([`d985c51`](https://github.com/ActivityWatch/aw-server-rust/commit/d985c51)) + - aw-server: Replace all errors with HttpErrorJson ([`b14a173`](https://github.com/ActivityWatch/aw-server-rust/commit/b14a173)) + - aw-server: Improve HTTP error handling ([`3b126cc`](https://github.com/ActivityWatch/aw-server-rust/commit/3b126cc)) + - tests: Add more asserts of HTTP body ([`a5cbb0d`](https://github.com/ActivityWatch/aw-server-rust/commit/a5cbb0d)) + - aw-server: Make UUID part of ServerState ([`7f6f63d`](https://github.com/ActivityWatch/aw-server-rust/commit/7f6f63d)) + - aw-transform: Add documentation to transforms ([`b04d38b`](https://github.com/ActivityWatch/aw-server-rust/commit/b04d38b)) + - Update aw-webui ([`cc437ea`](https://github.com/ActivityWatch/aw-server-rust/commit/cc437ea)) + - Update Cargo.lock ([`f3c2ede`](https://github.com/ActivityWatch/aw-server-rust/commit/f3c2ede)) + - aw-transform: fix: If events merge during flood, choose the longest endtime ([`091362f`](https://github.com/ActivityWatch/aw-server-rust/commit/091362f)) + - tests: Added another heartbeat test ([`2102597`](https://github.com/ActivityWatch/aw-server-rust/commit/2102597)) + - query: Add VarEnv type alias ([`420d691`](https://github.com/ActivityWatch/aw-server-rust/commit/420d691)) + - Merge pull request [#137](https://github.com/ActivityWatch/aw-server-rust/issues/137) from ActivityWatch/dev/get_events-limit-jni ([`4c6dd98`](https://github.com/ActivityWatch/aw-server-rust/commit/4c6dd98)) + - Merge pull request [#135](https://github.com/ActivityWatch/aw-server-rust/issues/135) from ActivityWatch/dev/android-vendored-openssl ([`9e796b4`](https://github.com/ActivityWatch/aw-server-rust/commit/9e796b4)) + - aw-webui: Update submodule ([`b3aa756`](https://github.com/ActivityWatch/aw-server-rust/commit/b3aa756)) + - aw-query: Add function filter_keyvals_regex ([`132370b`](https://github.com/ActivityWatch/aw-server-rust/commit/132370b)) + - aw-transform: Avoid cloning in filter_keyvals ([`5185b5d`](https://github.com/ActivityWatch/aw-server-rust/commit/5185b5d)) + - aw-transform: Add filter_keyvals_regex ([`fa842f6`](https://github.com/ActivityWatch/aw-server-rust/commit/fa842f6)) + - README: Fix broken build status badge ([`0dbd57f`](https://github.com/ActivityWatch/aw-server-rust/commit/0dbd57f)) + - aw-server: Refactor dirs, add tests do dirs and logging ([`9b406fc`](https://github.com/ActivityWatch/aw-server-rust/commit/9b406fc)) + - aw-query: Fix unnecessary lifetime parameter and references ([`826b78a`](https://github.com/ActivityWatch/aw-server-rust/commit/826b78a)) + - aw-query: Add simple benchmarks ([`edc9b3f`](https://github.com/ActivityWatch/aw-server-rust/commit/edc9b3f)) + - aw-query: Removed cloning from assigns ([`39cccb3`](https://github.com/ActivityWatch/aw-server-rust/commit/39cccb3)) + - Cargo.lock: Update dependencies ([`9184a35`](https://github.com/ActivityWatch/aw-server-rust/commit/9184a35)) + - aw-query: fix clippy error ([`882385f`](https://github.com/ActivityWatch/aw-server-rust/commit/882385f)) + - chore: updated aw-webui ([`7ede519`](https://github.com/ActivityWatch/aw-server-rust/commit/7ede519)) + - aw-server: rustfmt fix ([`c6cd1d5`](https://github.com/ActivityWatch/aw-server-rust/commit/c6cd1d5)) + - aw-server: Remove unused catchers ([`0b75663`](https://github.com/ActivityWatch/aw-server-rust/commit/0b75663)) + - aw-server: Set content type for more endpoints ([`00c001b`](https://github.com/ActivityWatch/aw-server-rust/commit/00c001b)) + - codecov.yml: Set diff target to a low value ([`e15fe1c`](https://github.com/ActivityWatch/aw-server-rust/commit/e15fe1c)) + - codecov.yml: Disable coverage requirement ([`7f98e25`](https://github.com/ActivityWatch/aw-server-rust/commit/7f98e25)) + - Fix database location when running with --testing ([`642a531`](https://github.com/ActivityWatch/aw-server-rust/commit/642a531)) + - cargo: Update dependencies ([`335417e`](https://github.com/ActivityWatch/aw-server-rust/commit/335417e)) + - cargo: Remove some features from multipart to get fewer dependencies ([`ccff0e4`](https://github.com/ActivityWatch/aw-server-rust/commit/ccff0e4)) + - aw-server: Clippy fixes ([`4ceb9c2`](https://github.com/ActivityWatch/aw-server-rust/commit/4ceb9c2)) + - aw-client-rust: Clippy fixes ([`718ebfd`](https://github.com/ActivityWatch/aw-server-rust/commit/718ebfd)) + - aw-datastore: Clippy fix and refactoring of worker ([`6f5200d`](https://github.com/ActivityWatch/aw-server-rust/commit/6f5200d)) + - aw-datastore: Make reload test force commit ([`34d2dec`](https://github.com/ActivityWatch/aw-server-rust/commit/34d2dec)) + - aw-datastore: Guarantee DB commit every 15 seconds ([`17dff67`](https://github.com/ActivityWatch/aw-server-rust/commit/17dff67)) + - aw-server: Increase default log levels further ([`afbb70c`](https://github.com/ActivityWatch/aw-server-rust/commit/afbb70c)) + - aw-server: Added option parsing and --testing option ([`c34b7f6`](https://github.com/ActivityWatch/aw-server-rust/commit/c34b7f6)) + - aw-server: Pass AWConfig as a Rocket state ([`cd00f31`](https://github.com/ActivityWatch/aw-server-rust/commit/cd00f31)) + - aw-query: Fix clippy issues ([`6f69b8b`](https://github.com/ActivityWatch/aw-server-rust/commit/6f69b8b)) + - cleaned up testing/production detection ([`5b52961`](https://github.com/ActivityWatch/aw-server-rust/commit/5b52961)) + - moved log directory to make it aw-qt compatible ([`6024d7d`](https://github.com/ActivityWatch/aw-server-rust/commit/6024d7d)) + - reduced logging and simplified logging pipeline ([`d456981`](https://github.com/ActivityWatch/aw-server-rust/commit/d456981)) + - Merge pull request [#105](https://github.com/ActivityWatch/aw-server-rust/issues/105) from ActivityWatch/dev/github-actions ([`f2afa99`](https://github.com/ActivityWatch/aw-server-rust/commit/f2afa99)) + - docs: updated README ([`62be9f4`](https://github.com/ActivityWatch/aw-server-rust/commit/62be9f4)) + - Create rust.yml ([`d7e75dd`](https://github.com/ActivityWatch/aw-server-rust/commit/d7e75dd)) + +

+ +## aw-watcher-afk + +
πŸ”¨ Misc (2) +

+ + - Merge pull request [#40](https://github.com/ActivityWatch/aw-watcher-afk/issues/40) from ActivityWatch/doc/readme-update ([`32d7647`](https://github.com/ActivityWatch/aw-watcher-afk/commit/32d7647)) + - doc: Update install instructions in README.md ([`c06bcab`](https://github.com/ActivityWatch/aw-watcher-afk/commit/c06bcab)) + +

+ +## aw-watcher-window + +
πŸ”¨ Misc (14) +

+ + - Merge pull request [#41](https://github.com/ActivityWatch/aw-watcher-window/issues/41) from xylix/dev/macos-ask-for-permission ([`48491bc`](https://github.com/ActivityWatch/aw-watcher-window/commit/48491bc)) + - Merge branch 'master' into dev/macos-ask-for-permission ([`724a3e2`](https://github.com/ActivityWatch/aw-watcher-window/commit/724a3e2)) + - Merge pull request [#44](https://github.com/ActivityWatch/aw-watcher-window/issues/44) from ActivityWatch/doc/readme-update ([`fbec7ed`](https://github.com/ActivityWatch/aw-watcher-window/commit/fbec7ed)) + - doc: Add install instructions to README.md ([`bc33438`](https://github.com/ActivityWatch/aw-watcher-window/commit/bc33438)) + - remove execution blocking from macos.py, move macos permission check in main.py after logging has bene initialized ([`b829e04`](https://github.com/ActivityWatch/aw-watcher-window/commit/b829e04)) + - Fix types in Process args, remove hardcoded development False ([`3ad2af6`](https://github.com/ActivityWatch/aw-watcher-window/commit/3ad2af6)) + - Update lockfile post merge ([`04d8269`](https://github.com/ActivityWatch/aw-watcher-window/commit/04d8269)) + - Merge branch 'master' into dev/macos-ask-for-permission ([`aa841c2`](https://github.com/ActivityWatch/aw-watcher-window/commit/aa841c2)) + - Use multiprocessing for background perm check execution. ([`0943007`](https://github.com/ActivityWatch/aw-watcher-window/commit/0943007)) + - Merge pull request [#42](https://github.com/ActivityWatch/aw-watcher-window/issues/42) from ActivityWatch/dev/github-actions ([`620b52c`](https://github.com/ActivityWatch/aw-watcher-window/commit/620b52c)) + - Start running perm dialog in a background thread ([`f032ed1`](https://github.com/ActivityWatch/aw-watcher-window/commit/f032ed1)) + - Add accessibility settings link button ([`890b6d6`](https://github.com/ActivityWatch/aw-watcher-window/commit/890b6d6)) + - Platform restrict pyobjc deps ([`6c2c1e5`](https://github.com/ActivityWatch/aw-watcher-window/commit/6c2c1e5)) + - Use AppKit to figure if we have accessbility perms and pyobjc to ask for them ([`82e90b2`](https://github.com/ActivityWatch/aw-watcher-window/commit/82e90b2)) + +

+ +## aw-client + +#### ✨ Features (2) + - feat: added better output when overlapping events found ([`52937c4`](https://github.com/ActivityWatch/aw-client/commit/52937c4)) + - feat: added merge_buckets.py example ([`5b9977f`](https://github.com/ActivityWatch/aw-client/commit/5b9977f)) + +
πŸ› Fixes (1) +

+ + - fix: fixed minor things (docs, wrongly commented out code) in examples/merge_buckets.py ([`839e1ba`](https://github.com/ActivityWatch/aw-client/commit/839e1ba)) + +

+ +
πŸ”¨ Misc (2) +

+ + - Merge pull request [#49](https://github.com/ActivityWatch/aw-client/issues/49) from ActivityWatch/doc/readme-update ([`bd8a953`](https://github.com/ActivityWatch/aw-client/commit/bd8a953)) + - doc: Add install instructions to README.md ([`3a4367c`](https://github.com/ActivityWatch/aw-client/commit/3a4367c)) + +

+ +## aw-core + +#### ✨ Features (1) + - feat: log unhandled exceptions ([`6ba8f97`](https://github.com/ActivityWatch/aw-core/commit/6ba8f97)) + +
πŸ› Fixes (2) +

+ + - fix: fixed bug when passing unsorted lists into _intersecting_eventpairs and added test for it ([`216e9fc`](https://github.com/ActivityWatch/aw-core/commit/216e9fc)) + - fix: fixed case where heartbeat with similar timestamp could shorten previous event ([`0444be3`](https://github.com/ActivityWatch/aw-core/commit/0444be3)) + +

+ +
πŸ”¨ Misc (10) +

+ + - style: fixed code formatting ([`8775e04`](https://github.com/ActivityWatch/aw-core/commit/8775e04)) + - refactor: extracted TimePeriod class to timeslot repo ([`e4a2b53`](https://github.com/ActivityWatch/aw-core/commit/e4a2b53)) + - test: added test for intersecting eventpairs ([`5f75f65`](https://github.com/ActivityWatch/aw-core/commit/5f75f65)) + - test: changed categorization test to include backslash-metacharacter (\w) ([`e83f3f8`](https://github.com/ActivityWatch/aw-core/commit/e83f3f8)) + - docs: fixed CI badge, added better summary of contained modules ([`c38b814`](https://github.com/ActivityWatch/aw-core/commit/c38b814)) + - style: formatted everything with Black ([`eda4ff6`](https://github.com/ActivityWatch/aw-core/commit/eda4ff6)) + - tests: Add test for heartbeats with same timestamp ([`296647e`](https://github.com/ActivityWatch/aw-core/commit/296647e)) + - Merge pull request [#90](https://github.com/ActivityWatch/aw-core/issues/90) from ActivityWatch/doc/readme-update ([`a6a9a9e`](https://github.com/ActivityWatch/aw-core/commit/a6a9a9e)) + - doc: Add install instructions to README.md ([`e7e1b5b`](https://github.com/ActivityWatch/aw-core/commit/e7e1b5b)) + - Merge pull request [#89](https://github.com/ActivityWatch/aw-core/issues/89) from ActivityWatch/dev/github-actions ([`b2d9179`](https://github.com/ActivityWatch/aw-core/commit/b2d9179)) + +

+ +## media + +
πŸ”¨ Misc (1) +

+ + - Remove unnecessary logo after automatic dark mode recoloration ([`cb597f7`](https://github.com/ActivityWatch/media/commit/cb597f7)) + +

diff --git a/src/conf.py b/src/conf.py index e724395..34e779b 100644 --- a/src/conf.py +++ b/src/conf.py @@ -20,10 +20,6 @@ import os import sys -# Other imports - -from recommonmark.parser import CommonMarkParser - # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. @@ -34,6 +30,8 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ + "m2r2", + # "myst_parser", "sphinx.ext.autodoc", "sphinx.ext.autosectionlabel", "sphinx.ext.viewcode", @@ -54,10 +52,10 @@ templates_path = ["_templates"] # The parser(s) and suffix(es) of source filenames. -source_parsers = { - ".md": CommonMarkParser, -} -source_suffix = [".rst", ".md"] +# source_parsers = { +# ".md": CommonMarkParser, +# } +# source_suffix = [".rst", ".md"] # The encoding of source files. # @@ -142,12 +140,28 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -import sphinx_rtd_theme +html_theme = "sphinx_book_theme" +html_static_path = ["_static"] + +html_title = "" +html_logo = "../media/banners/banner.png" +html_favicon = "../media/logo/logo.ico" -html_theme = "sphinx_rtd_theme" -html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] -html_theme_options = {"collapse_navigation": False, "navigation_depth": 4} -using_rtd_theme = True + +html_theme_options = { + "repository_url": "https://github.com/ActivityWatch/docs", + "path_to_docs": "src", + "use_repository_button": True, + "use_edit_page_button": True, + "extra_navbar": "

Follow us on Twitter

", +} + + +# import sphinx_rtd_theme +# html_theme = "sphinx_rtd_theme" +# html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] +# html_theme_options = {"collapse_navigation": False, "navigation_depth": 4} +# using_rtd_theme = True # The name for this set of Sphinx documents. # " v documentation" by default. @@ -199,9 +213,9 @@ # Custom sidebar templates, maps document names to template names. # -html_sidebars = { - "**": ["globaltoc.html", "relations.html", "sourcelink.html", "searchbox.html"], -} +# html_sidebars = { +# "**": ["globaltoc.html", "relations.html", "sourcelink.html", "searchbox.html"], +# } # Additional templates that should be rendered to pages, maps page names to # template names. diff --git a/src/configuration.rst b/src/configuration.rst index b22b903..9405706 100644 --- a/src/configuration.rst +++ b/src/configuration.rst @@ -9,23 +9,23 @@ Configuration options for the server, client, and default watchers are listed be - aw-server (Python) - - :code:`host` Hostname to start the server on. Currently only :code:`localhost` or :code:`127.0.0.1` are supported. - - :code:`port` Port number to start the server on. - - :code:`storage` Type of storage for holding buckets and events. Supported types are :code:`peewee`, :code:`memory` (useful in testing), or :code:`mongodb` (MongoDB support will be removed in a future version). + - :code:`host` Hostname to start the server on. Currently only :code:`localhost` or :code:`127.0.0.1` are supported. + - :code:`port` Port number to start the server on. + - :code:`storage` Type of storage for holding buckets and events. Supported types are :code:`peewee`, :code:`memory` (useful in testing), or :code:`mongodb` (MongoDB support will be removed in a future version). - aw-client - - :code:`hostname` Hostname of the server to connect to. - - :code:`port` Port number of the server to connect to. + - :code:`hostname` Hostname of the server to connect to. + - :code:`port` Port number of the server to connect to. - aw-watcher-afk - - :code:`timeout` Time in seconds with no activity required to become afk. - - :code:`poll_time` Time in seconds between checks for activity. - - :code:`update_time` Not yet implemented. + - :code:`timeout` Time in seconds with no activity required to become afk. + - :code:`poll_time` Time in seconds between checks for activity. + - :code:`update_time` Not yet implemented. - aw-watcher-window: - - :code:`poll_time` Time in seconds between window checks. - - :code:`exclude_title` Don't track window titles - - :code:`update_time` Not yet implemented. + - :code:`poll_time` Time in seconds between window checks. + - :code:`exclude_title` Don't track window titles + - :code:`update_time` Not yet implemented. diff --git a/src/features/filtering-data.rst b/src/features/filtering-data.rst index 185b3ac..3a23d6c 100644 --- a/src/features/filtering-data.rst +++ b/src/features/filtering-data.rst @@ -16,5 +16,5 @@ For the ones who believe they can adequately protect their data, they should be While we figure out how to best implement this feature, here are some options: - - Manually `pausing logging <./pausing-logging.html>`_. - - Redacting sensitive events from the database using the ``redact_events.py`` example in :gh-aw:`aw-client`. +- Manually `pausing logging <./pausing-logging.html>`_. +- Redacting sensitive events from the database using the ``redact_events.py`` example in :gh-aw:`aw-client`. diff --git a/src/features/pausing-logging.rst b/src/features/pausing-logging.rst index f2b9e41..6fc55a6 100644 --- a/src/features/pausing-logging.rst +++ b/src/features/pausing-logging.rst @@ -6,5 +6,5 @@ You can do it easily by simply unchecking the watcher module you want to pause i So, if you for example want to pause the logging of window titles: - - Click the ActivityWatch trayicon - - Uncheck 'Modules -> aw-watcher-window' +- Click the ActivityWatch trayicon +- Uncheck 'Modules -> aw-watcher-window' diff --git a/src/features/user-interface.rst b/src/features/user-interface.rst index 5a32f61..efcc47b 100644 --- a/src/features/user-interface.rst +++ b/src/features/user-interface.rst @@ -6,14 +6,14 @@ Web Interface ActivityWatch comes with a web interface which currently has the following features: - - Activity overview - - Most used applications by day - - Timeline - - Most time spent on a website - *(requires the ActivityWatch browser extension)* - - Bucket overview - - When a bucket was last updated - - Listing of the latest events +- Activity overview + - Most used applications by day + - Timeline + - Most time spent on a website + *(requires the ActivityWatch browser extension)* +- Bucket overview + - When a bucket was last updated + - Listing of the latest events More advanced and configurable visualization (such as the ones found in Zenobase and RescueTime) is not a priority and is unlikely to get implemented as a part of the core ActivityWatch project anytime soon. @@ -23,6 +23,5 @@ Tray icon The tray icon (aw-qt) manages the core ActivityWatch services (server + watchers) and offers: - - Manage which ActivityWatch services to run - - Popup when a service crashes - +- Manage which ActivityWatch services to run +- Popup when a service crashes diff --git a/src/importers.rst b/src/importers.rst index a81637b..c9cc1f4 100644 --- a/src/importers.rst +++ b/src/importers.rst @@ -5,8 +5,8 @@ ActivityWatch can't track everything, so sometimes you might want to import data There aren't many yet, but here are some attempts: - - :gh-aw:`aw-importer-smartertime`, imports from `smartertime`_ (Android time tracker). - - LastFM importer, :gh-user:`ErikBjare` has code for it somewhere, ask him if you're interested. +- :gh-aw:`aw-importer-smartertime`, imports from `smartertime`_ (Android time tracker). +- LastFM importer, :gh-user:`ErikBjare` has code for it somewhere, ask him if you're interested. .. _smartertime: https://play.google.com/store/apps/details?id=com.smartertime&hl=en diff --git a/src/index.rst b/src/index.rst index 87a5dbb..0c78537 100644 --- a/src/index.rst +++ b/src/index.rst @@ -1,10 +1,14 @@ -.. image:: banner.png +.. image:: ../media/banners/banner.png + +| Welcome to the ActivityWatch documentation! =========================================== If you are new to ActivityWatch, check out the :ref:`Getting started guide `. +Table of contents +----------------- .. _user-docs: .. toctree:: @@ -38,12 +42,13 @@ If you are new to ActivityWatch, check out the :ref:`Getting started guide