Work in progress #2: First steps of the sync process
authorChristian Weiske <cweiske@cweiske.de>
Mon, 15 Feb 2021 21:19:16 +0000 (22:19 +0100)
committerChristian Weiske <cweiske@cweiske.de>
Mon, 15 Feb 2021 21:19:16 +0000 (22:19 +0100)
14 files changed:
Makefile
README.rst
api/headers.rst
api/pageplace.bosh-bosh-rest-inventory-count.response.json [new file with mode: 0644]
api/pageplace.bosh-bosh-rest-inventory-count.rst [new file with mode: 0644]
api/pageplace.bosh-bosh-rest-userid-xxx.rst
api/pageplace.bosh-bosh-rest-v2-registerhw.request.json [new file with mode: 0644]
api/pageplace.bosh-bosh-rest-v2-registerhw.response.json [new file with mode: 0644]
api/pageplace.bosh-bosh-rest-v2-registerhw.rst [new file with mode: 0644]
api/pageplace.inventory-v2-inventory.response.json [new file with mode: 0644]
api/pageplace.inventory-v2-inventory.rst [new file with mode: 0644]
api/usecase-login.rst
api/usecase-sync.rst [new file with mode: 0644]
styles.css

index 4b75824137f75834876fdda22179455fc8ad814e..b0e09f2d3ad063f1b102079ea4b68927a3024fc1 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -3,5 +3,5 @@ build:
        rst2html5\
         --bootstrap-css\
         --stylesheet-path=styles.css --embed-stylesheet\
        rst2html5\
         --bootstrap-css\
         --stylesheet-path=styles.css --embed-stylesheet\
-        --time\
         README.rst tolino-api-docs.htm
         README.rst tolino-api-docs.htm
+       sed -i "s/##UPDATE##/`date -Is`/" tolino-api-docs.htm
index a60d16a11ad98258dcef55f3213410be53797b4d..1986ff6c736a20f5519f816d52f1f60e1f72b452 100644 (file)
@@ -7,19 +7,68 @@ Servers the Tolino Vision 3/4 HD talk to (Firmware 14.x).
 .. contents::
    :depth: 2
 
 .. contents::
    :depth: 2
 
+
 General information
 *******************
 .. include:: api/headers.rst
 .. include:: api/domains.rst
 
 General information
 *******************
 .. include:: api/headers.rst
 .. include:: api/domains.rst
 
+
 Use cases
 *********
 .. include:: api/usecase-login.rst
 Use cases
 *********
 .. include:: api/usecase-login.rst
+.. include:: api/usecase-sync.rst
+
 
 API calls
 *********
 
 API calls
 *********
+.. include:: api/pageplace.bosh-bosh-rest-inventory-count.rst
 .. include:: api/pageplace.bosh-bosh-rest-ping.rst
 .. include:: api/pageplace.bosh-bosh-rest-userid-xxx.rst
 .. include:: api/pageplace.bosh-bosh-rest-ping.rst
 .. include:: api/pageplace.bosh-bosh-rest-userid-xxx.rst
+.. include:: api/pageplace.bosh-bosh-rest-v2-registerhw.rst
 .. include:: api/pageplace.bosh-bosh-rest-v2-resellerconfig.rst
 .. include:: api/pageplace.bosh-bosh-rest-v2-resellerconfig.rst
+.. include:: api/pageplace.inventory-v2-inventory.rst
 .. include:: api/thalia-auth-oauth2-authorize.rst
 .. include:: api/thalia-auth-oauth2-token-post.rst
 .. include:: api/thalia-auth-oauth2-authorize.rst
 .. include:: api/thalia-auth-oauth2-token-post.rst
+
+
+About
+*****
+This documentation has been written by Christian Weiske,
+cweiske+tolino@cweiske.de.
+
+Last update: ##UPDATE##
+
+
+=======
+License
+=======
+It is licensed under the GNU Free Documentation License.
+
+
+===========
+Source code
+===========
+The documentation sources are available at
+http://git.cweiske.de/tolino-api-docs.git/
+and mirrored at
+https://github.com/cweiske/tolino-api-docs
+
+
+=========
+Home page
+=========
+A rendered version of this documentation is available at
+http://cweiske.de/tolino-api-docs.htm
+
+
+========
+Building
+========
+You need to install ``rst2html5`` before (the version with bootstrap CSS)::
+
+    $ pip3 install rst2html5-tools
+
+Rendering the docs is done via the Makefile::
+
+    $ make
index 0c40fb085013f83eac9eb6e0f5e3d2d0a94ff72b..e5306cb5767ade952e4c2c2abb02a040950b4fb2 100644 (file)
@@ -3,6 +3,10 @@ Headers
 =======
 
 ``User-Agent``
 =======
 
 ``User-Agent``
+  Normal API requests:
+
   ``Dalvik/1.6.0 (Linux; U; Android 4.4.2; tolino Build/KOT49H)``
 
   ``Dalvik/1.6.0 (Linux; U; Android 4.4.2; tolino Build/KOT49H)``
 
-  Used for normal API requests
+  The browser:
+
+  ``Mozilla/5.0 (Linux; Android 4.4.2; en-; tolino vision 3 HD/14.1.0) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Mobile Safari/537.36 READER OS_BUILD/KOT49H.41429.1044823``
diff --git a/api/pageplace.bosh-bosh-rest-inventory-count.response.json b/api/pageplace.bosh-bosh-rest-inventory-count.response.json
new file mode 100644 (file)
index 0000000..6524a79
--- /dev/null
@@ -0,0 +1,3 @@
+{
+    "count": 3
+}
diff --git a/api/pageplace.bosh-bosh-rest-inventory-count.rst b/api/pageplace.bosh-bosh-rest-inventory-count.rst
new file mode 100644 (file)
index 0000000..1a6c184
--- /dev/null
@@ -0,0 +1,46 @@
+===========================================================
+``GET https://bosh.pageplace.de/bosh/rest/inventory/count``
+===========================================================
+Fetch the number of books/items in the cloud storage.
+
+Part of the `sync process`_.
+
+
+Request
+=======
+
+Header
+  ``t_auth_token``
+    OAuth token obtained from `POST https://thalia.de/auth/oauth2/token`_.
+
+    Example: ``eyJhbGciOiJSUzI1NiJ9.eyJhdWRpZW5jZSI6InRyZWFkZXJ2aXNpb24zIiw...``
+  ``Accept``
+    Example: ``application/json; charset=UTF-8``
+  ``m_id``
+    FIXME: Maybe reseller ID?
+
+    Example: ``3``
+  ``hardware_id``
+    Seems to be the same as the ``xxx`` value in the URL.
+
+    Example: ``665fc389ef4e47258c5db9fa7821bd19``
+  ``Content-Type``
+    ``application/json; charset=UTF-8``
+
+    This is a lie; there is no request body.
+  ``client_type``
+    Example: ``TOLINO_VISION_3``
+  ``client_version``
+    Example: ``14.1.0``
+
+
+Response
+========
+HTTP status code: ``200 OK``
+
+Number of books.
+
+Example:
+
+.. include:: pageplace.bosh-bosh-rest-inventory-count.response.json
+   :code:
index 36f39084f8f8771796a14cbd38f06d1535aa9837..2aaae295e4128cd1b5279e4c52c0423ac8ebee82 100644 (file)
@@ -3,13 +3,14 @@
 ======================================================
 Step 5 in the `Login process`_.
 
 ======================================================
 Step 5 in the `Login process`_.
 
-Check if the device has been registered already to a user. (? FIXME)
+FIXME: Check if the device has been registered already to a user.
 
 Example ``xxx`` value: ``665fc389ef4e47258c5db9fa7821bd19``.
 
 There is some explanation about the hardware id in
 `tolino-python: tolinocloud.py <https://github.com/hzulla/tolino-python/blob/c655dbcd1b23e3874fd7dc78736570ac27ff5123/tolinocloud.py#L42>`_.
 
 
 Example ``xxx`` value: ``665fc389ef4e47258c5db9fa7821bd19``.
 
 There is some explanation about the hardware id in
 `tolino-python: tolinocloud.py <https://github.com/hzulla/tolino-python/blob/c655dbcd1b23e3874fd7dc78736570ac27ff5123/tolinocloud.py#L42>`_.
 
+
 Request
 =======
 No body in the request, despite the ``Content-Type`` header.
 Request
 =======
 No body in the request, despite the ``Content-Type`` header.
diff --git a/api/pageplace.bosh-bosh-rest-v2-registerhw.request.json b/api/pageplace.bosh-bosh-rest-v2-registerhw.request.json
new file mode 100644 (file)
index 0000000..438d49a
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "initAppRequest": {
+        "hardware_id": "665fc389ef4e47258c5db9fa7821bd19",
+        "hardware_name": "",
+        "client_type": "TOLINOVISION3_14.1.0",
+        "hardware_type": "tolino_vision_3"
+    }
+}
diff --git a/api/pageplace.bosh-bosh-rest-v2-registerhw.response.json b/api/pageplace.bosh-bosh-rest-v2-registerhw.response.json
new file mode 100644 (file)
index 0000000..23e7c72
--- /dev/null
@@ -0,0 +1,42 @@
+{
+  "initAppResponse": {
+    "deviceKey": "5Iq76M_tEoze3w49c-IOug",
+    "update": 0,
+    "updateVersion": "14.1.0",
+    "userId": "2086910932",
+    "config": [
+      {
+        "key": "CHANGELOG_NL",
+        "value": "Verbeterde prestaties, verbeterde functies en betere integratie van onze nieuwe tolino-leeservaring. (BÈTA)\nWe hebben de software verbeterd, bugs verholpen en gezorgd voor meer stabiliteit."
+      },
+      {
+        "key": "CHANGELOG_EN",
+        "value": "Improved performance, feature enhancement and better integration of our new tolino reading experience. (BETA)\nWe have improved the software, fixed bugs and ensured more stability."
+      },
+      {
+        "key": "CHANGELOG_FR",
+        "value": "Amélioration des performances, amélioration des fonctionnalités et meilleure intégration de notre nouvelle expérience de lecture tolino. (BÊTA)\nNous avons amélioré le logiciel, corrigé des bugs et assuré plus de stabilité."
+      },
+      {
+        "key": "DOWNLOAD_FILE_MD5",
+        "value": "930d0eb9e4c861a43d8360fc8dbc0ced"
+      },
+      {
+        "key": "CHANGELOG_ES",
+        "value": "Rendimiento mejorado, mejora de funciones y mejor integración con nuestra nueva experiencia de lectura de tolino. (BETA)\nHemos mejorado el software, arreglado los errores y asegurado una mayor estabilidad.\n"
+      },
+      {
+        "key": "CHANGELOG_DE",
+        "value": "Verbesserte Leistung, Funktionserweiterungen und bessere Integration unseres neuen tolino-Leseerlebnisses (BETA).\nWir haben die Software verbessert, Fehler behoben und für mehr Stabilität gesorgt.\n"
+      },
+      {
+        "key": "DOWNLOAD_URL",
+        "value": "https://download.pageplace.de/ereader/14.1.0/alldevices/update.zip"
+      },
+      {
+        "key": "CHANGELOG_IT",
+        "value": "Prestazioni migliorate, funzionalità avanzate e migliore integrazione della nostra nuova esperienza di lettura tolino. (BETA)\nAbbiamo migliorato il software, corretto i bug e assicurato una maggiore stabilità.\n"
+      }
+    ]
+  }
+}
diff --git a/api/pageplace.bosh-bosh-rest-v2-registerhw.rst b/api/pageplace.bosh-bosh-rest-v2-registerhw.rst
new file mode 100644 (file)
index 0000000..ed077ab
--- /dev/null
@@ -0,0 +1,51 @@
+==========================================================
+``POST https://bosh.pageplace.de/bosh/rest/v2/registerhw``
+==========================================================
+Step 6 in the `Login process`_.
+
+Register the e-book reader's hardware ID with the user account.
+
+
+Request
+=======
+
+Header
+  ``t_auth_token``
+    OAuth token obtained from `POST https://thalia.de/auth/oauth2/token`_.
+
+    Example: ``eyJhbGciOiJSUzI1NiJ9.eyJhdWRpZW5jZSI6InRyZWFkZXJ2aXNpb24zIiw...``
+  ``reseller_id``
+    Example: ``3``
+  ``hardware_type``
+    Example: ``tolino_vision_3``
+  ``os_version``
+    Example: ``4.4.2``
+  ``language_code``
+    Example: ``en``
+  ``hardware_id``
+    Example: ``665fc389ef4e47258c5db9fa7821bd19``
+  ``client_type``
+    Example: ``TOLINO_VISION_3``
+  ``client_version``
+    Example: ``14.1.0``
+  ``Content-Type``
+    ``text/plain; charset=UTF-8``
+
+    This is a lie, because the request body is JSON.
+
+Body
+  .. include:: pageplace.bosh-bosh-rest-v2-registerhw.request.json
+     :code:
+
+
+Response
+========
+HTTP status code: ``200 OK``
+
+Contains a device key, the changelog in several languages and
+the latest firmware version including its download URL.
+
+Example:
+
+.. include:: pageplace.bosh-bosh-rest-v2-registerhw.response.json
+   :code:
diff --git a/api/pageplace.inventory-v2-inventory.response.json b/api/pageplace.inventory-v2-inventory.response.json
new file mode 100644 (file)
index 0000000..fe21b15
--- /dev/null
@@ -0,0 +1,156 @@
+{
+  "lastModifiedDate": 1612123999080,
+  "page": {
+    "content": [
+      {
+        "publicationId": "DT0400.9783641243609_A40398678",
+        "resellerId": "3",
+        "resellerName": "THALIA.DE",
+        "contentType": "EBOOK",
+        "shelfId": "39549013",
+        "authors": [
+          {
+            "name": null,
+            "firstName": "Patrick",
+            "lastName": "Ness"
+          }
+        ],
+        "title": "Chaos Walking - Die Mission (E-Only)",
+        "subtitle": "Die Vorgeschichte zur »Chaos Walking«-Trilogie",
+        "isbnEan": "9783641243609",
+        "language": null,
+        "keywords": [
+          "Tribute von Panem; Divergent; Dystopie; Tom Holland; Daisy Ridley; Mads Mikkelsen; Young Adult; Nick Jonas; Hollywood-Verfilmung",
+          "9783641243609"
+        ],
+        "publisher": "Random House ebook",
+        "issuedDate": 1607900400000,
+        "fileResources": [
+          {
+            "resource": "https://cdp.pageplace.de/cdp/public/publications/DT0400/9783641243609_A40398678/cover",
+            "format": "image/jpeg",
+            "type": "COVER_IMAGE",
+            "lastModifiedDate": null
+          }
+        ],
+        "contentProtectionType": "UNPROTECTED",
+        "purchasedDate": 1612116184445,
+        "sequenceNo": null,
+        "transactionId": "339905364",
+        "contentSources": [
+          "PURCHASED"
+        ],
+        "readableContentInfo": {
+          "isTextToSpeechEnabled": false,
+          "renderingEngine": "FGRE"
+        },
+        "audioContentInfo": null,
+        "subscriptionInfo": null,
+        "familySharing": true,
+        "defaultCover": null,
+        "contentFormat": "application/epub+zip",
+        "abstract": "Wer ist das Mädchen an der Seite von Todd Hewitt?\n\nAls Todd Hewitt auf das Mädchen Viola trifft, verändert dies sein Leben schlagartig. Er erkennt, dass es auf einer Lüge aufgebaut war. Er ist plötzlich in tödlicher Gefahr. Er hat zum ersten Mal in seinem Leben jemanden gefunden, dessen Gedanken er nicht lesen kann - und den er trotzdem perfekt versteht. Doch woher nur kommt die geheimnisvolle Viola, mit der er auf der Flucht ist? Die exklusive Vorgeschichte zur »Chaos Walking«-Bestseller-Trilogie beantwortet diese Frage zum ersten Mal."
+      },
+      {
+        "publicationId": "DT0400.9783739673417_A27522964",
+        "resellerId": "3",
+        "resellerName": "THALIA.DE",
+        "contentType": "EBOOK",
+        "shelfId": "39549013",
+        "authors": [
+          {
+            "name": null,
+            "firstName": "Caterina",
+            "lastName": "di Montebasso"
+          }
+        ],
+        "title": "Das Relikt",
+        "subtitle": "Sci Fi Kurzgeschichte",
+        "isbnEan": "9783739673417",
+        "language": "de",
+        "keywords": [],
+        "publisher": "BookRix",
+        "issuedDate": 1473804000000,
+        "fileResources": [
+          {
+            "resource": "https://cdp.pageplace.de/cdp/public/publications/DT0400/9783739673417_A27522964/cover",
+            "format": "image/jpeg",
+            "type": "COVER_IMAGE",
+            "lastModifiedDate": null
+          }
+        ],
+        "contentProtectionType": "WATERMARK",
+        "purchasedDate": 1612116343128,
+        "sequenceNo": null,
+        "transactionId": "339901326",
+        "contentSources": [
+          "PURCHASED"
+        ],
+        "readableContentInfo": {
+          "isTextToSpeechEnabled": true,
+          "renderingEngine": "FGRE"
+        },
+        "audioContentInfo": null,
+        "subscriptionInfo": null,
+        "familySharing": true,
+        "defaultCover": null,
+        "contentFormat": "application/epub+zip",
+        "abstract": "<p>Eine Pyramide. Niemand kennt ihren wahren Ursprung. Mythen und falsche Interpretationen umwölken sie. Puhlie, ein Farmerjunge aus dem Volk der Amaranth, gibt sich mit den alten Erklährungen nicht zufrieden. Er widmet sein Leben der Lösung des Rätsels. Doch erst eine Generation später wird es entschlüsselt. Ungeheure Umwälzungen durchströmen daraufhin das gesamte Universum. Doch geschiet dies alles nicht zum ersten Mal.</p>"
+      },
+      {
+        "publicationId": "DT0400.9783842028357_A29383154",
+        "resellerId": "3",
+        "resellerName": "THALIA.DE",
+        "contentType": "EBOOK",
+        "shelfId": "39549013",
+        "authors": [
+          {
+            "name": null,
+            "firstName": "Ban",
+            "lastName": "Zarbo"
+          }
+        ],
+        "title": "Gratis-Leseprobe: Kamo - Pakt mit der Geisterwelt",
+        "subtitle": null,
+        "isbnEan": "9783842028357",
+        "language": null,
+        "keywords": [
+          "Shounen; Shonen Jump; Abenteuer; Action; Mystery; Shonen; Geist; Geister; Dämon; Dämonen; Tod; Bleach; Death Note; Fantasy"
+        ],
+        "publisher": "TOKYOPOP Verlag",
+        "issuedDate": 1489618800000,
+        "fileResources": [
+          {
+            "resource": "https://cdp.pageplace.de/cdp/public/publications/DT0400/9783842028357_A29383154/cover",
+            "format": "image/jpeg",
+            "type": "COVER_IMAGE",
+            "lastModifiedDate": null
+          }
+        ],
+        "contentProtectionType": "WATERMARK",
+        "purchasedDate": 1612116728634,
+        "sequenceNo": null,
+        "transactionId": "339906865",
+        "contentSources": [
+          "PURCHASED"
+        ],
+        "readableContentInfo": {
+          "isTextToSpeechEnabled": true,
+          "renderingEngine": "FGRE"
+        },
+        "audioContentInfo": null,
+        "subscriptionInfo": null,
+        "familySharing": true,
+        "defaultCover": null,
+        "contentFormat": "application/pdf",
+        "abstract": "All die Jahre hat der herzkranke Kamo gegen den Tod gekämpft, doch vergebens - sein junges Leben neigt sich dem Ende zu. Kurz vor seinem letzten Atemzug erhält er Besuch von Crimson, einem mächtigen Geist, der ihm ein unglaubliches Angebot macht: \"Hilf mir, zwölf Geister zu besiegen und ihre Seelen einzufangen, und ich schenke dir ein neues Herz.\" Aber welchen Preis zahlt man für einen Pakt mit einem Geist?"
+      }
+    ],
+    "totalElements": 3,
+    "totalPages": 1,
+    "numberOfElements": 3,
+    "size": 300,
+    "number": 0
+  },
+  "deletedContent": []
+}
diff --git a/api/pageplace.inventory-v2-inventory.rst b/api/pageplace.inventory-v2-inventory.rst
new file mode 100644 (file)
index 0000000..ebf13fc
--- /dev/null
@@ -0,0 +1,75 @@
+===================================================
+``GET https://inventory.pageplace.de/v2/inventory``
+===================================================
+Fetch information about books stored in the cloud.
+
+Part of the `sync process`_.
+
+
+Request
+=======
+Full example request URL::
+
+    https://inventory.pageplace.de/v2/inventory?page=0&size=300&includeLoaned=true&contentTypeFilter=EBOOK&contentFormatFilter=ACSM&contentFormatFilter=EPUB&contentFormatFilter=PDF
+
+Header
+  ``Authorization``
+    OAuth token obtained from `POST https://thalia.de/auth/oauth2/token`_.
+
+    Example: ``Bearer eyJhbGciOiJSUzI1NiJ9.eyJhdWRpZW5jZSI6InRyZWFkZXJ2aXNpb24zIiw...``
+  ``Accept``
+    Example: ``application/json; charset=UTF-8``
+  ``Accept-Encoding``
+    ``gzip``
+  ``m_id``
+    FIXME: Maybe reseller ID?
+
+    Example: ``3``
+  ``Hardware-Id``
+    Example: ``665fc389ef4e47258c5db9fa7821bd19``
+  ``Content-Type``
+    ``application/json; charset=UTF-8``
+
+    This is a lie; there is no request body.
+  ``client_type``
+    Example: ``TOLINO_VISION_3``
+  ``client_version``
+    Example: ``14.1.0``
+  ``Reseller-Id``
+    Example: ``3``
+  ``Cookie``
+    Multiple times:
+
+    -  ``OAUTH-JSESSIONID=3EFAEC6B69D811252C75861880C338AB.15acdb90; Path=/; Secure; HttpOnly``
+    - ``JSESSIONID=C0D8A077F6D2E13251ECDCD60FE6D18A``
+  ``Cookie2``
+    Example: ``$Version=1``
+
+GET parameters
+  ``page``
+    Example: ``0``
+  ``size``
+    Example: ``300``
+  ``includeLoaned``
+    Example: ``true``
+  ``contentTypeFilter``
+    Example: ``EBOOK``
+  ``contentFormatFilter``:
+    Multiple values allowed (repeat the parameter)
+
+    Allowed values:
+      - ``ACSM``
+      - ``EPUB``
+      - ``PDF``
+
+
+Response
+========
+Header
+  ``Content-Type``
+    ``application/json;charset=UTF-8``
+
+Example:
+
+.. include:: pageplace.inventory-v2-inventory.response.json
+   :code:
index fbc3e9ba77645e99ed8ba36423bf13f4660762c3..b0115b96d1d72f33e7cd97a385b6be6cec99fc35 100644 (file)
@@ -2,7 +2,7 @@
 Login process
 =============
 
 Login process
 =============
 
-This happens in the web browser.
+The user-facing stuff happens in the web browser.
 
 1. Fetch URL of login page: `GET https://thalia.de/auth/oauth2/authorize`_
 2. Show login page with username + password form
 
 1. Fetch URL of login page: `GET https://thalia.de/auth/oauth2/authorize`_
 2. Show login page with username + password form
@@ -10,4 +10,6 @@ This happens in the web browser.
 
    Example redirect: ``Location: epublishing://login?code=GK6jDC``
 4. Request OAuth access token: `POST https://thalia.de/auth/oauth2/token`_
 
    Example redirect: ``Location: epublishing://login?code=GK6jDC``
 4. Request OAuth access token: `POST https://thalia.de/auth/oauth2/token`_
-5. Fetch user data: `GET https://bosh.pageplace.de/bosh/rest/userid/xxx`_
+5. Check if the device has been registered already: `GET https://bosh.pageplace.de/bosh/rest/userid/xxx`_
+6. Register the device to the user: `POST https://bosh.pageplace.de/bosh/rest/v2/registerhw`_
+7. Run the `Sync process`_
diff --git a/api/usecase-sync.rst b/api/usecase-sync.rst
new file mode 100644 (file)
index 0000000..38360c6
--- /dev/null
@@ -0,0 +1,23 @@
+============
+Sync process
+============
+The user presses the synchronization button on the "My books" screen.
+
+1. Check if the device is online: `GET http://bosh.pageplace.de/bosh/rest/ping`_
+2. Fetch the reseller configuration: `GET https://bosh.pageplace.de/bosh/rest/v2/resellerconfig`_
+3. Fetch the number of books/items in the cloud: `GET https://bosh.pageplace.de/bosh/rest/inventory/count`_
+4. Fetch cloud book information: `GET https://inventory.pageplace.de/v2/inventory`_
+5. FIXME: https://bosh.pageplace.de/bosh/rest/time
+6. Fetch changes since last sync: PATCH https://bosh.pageplace.de/bosh/rest/sync-data
+7. Get list of resellers: GET https://bosh.pageplace.de/bosh/rest/handshake/resellers
+8. Fetch advertisements for the main screen: GET https://bosh.pageplace.de/bosh/rest/recommendation/xyz
+9. Fetch family membership information: GET https://family.pageplace.de/v1/myself
+
+When the user is part of a family:
+
+10. Fetch list of available dictionaries: GET https://bosh.pageplace.de/bosh/rest/dictionary/list
+11. Fetch list of family members: GET https://family.pageplace.de/v1/family
+12. Fetch list of shared books: GET https://family.pageplace.de/v1/shares
+
+
+FIXME: What happens if the inventory count is 0? Is the inventory not fetched then?
index 2860ace07baaa2271d2c810a0132b2ae60d3c5f0..05b6a027245438155763ea8387261068a6d8408e 100644 (file)
@@ -10,6 +10,10 @@ header code, #contents code {
     background-color: transparent;
     color: inherit;
 }
     background-color: transparent;
     color: inherit;
 }
+pre {
+    max-height: 50ex;
+    overflow-y: auto;
+}
 h1 {
     text-align: center;
     margin-bottom: 2ex;
 h1 {
     text-align: center;
     margin-bottom: 2ex;
@@ -22,4 +26,4 @@ h2 {
 
 dd {
     margin-left: 3ex;
 
 dd {
     margin-left: 3ex;
-}
\ No newline at end of file
+}