diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 00000000..bcd5e647
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,3 @@
+# These are supported funding model platforms
+
+github: prrvchr
diff --git a/README.md b/README.md
index 203be12b..943e67f1 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@
**The use of this software subjects you to our [Terms Of Use][4].**
-# version [1.3.2][5]
+# version [1.4.0][5]
## Introduction:
@@ -42,6 +42,7 @@ Being free software I encourage you:
- To duplicate its [source code][12].
- To make changes, corrections, improvements.
- To open [issue][13] if needed.
+- To [participate in the costs][14] of [CASA certification][15].
In short, to participate in the development of this extension.
Because it is together that we can make Free Software smarter.
@@ -51,9 +52,9 @@ ___
## Requirement:
The SQLiteOOo extension uses the jdbcDriverOOo extension to work.
-It must therefore meet the [requirement of the jdbcDriverOOo extension][14].
+It must therefore meet the [requirement of the jdbcDriverOOo extension][16].
-Additionally, due to [issue #156471][15] and following [PR#154989][16], the SQLiteOOo extension requires **LibreOffice version 24.2.x** minimum to work.
+Additionally, due to [issue #156471][17] and following [PR#154989][18], the SQLiteOOo extension requires **LibreOffice version 24.2.x** minimum to work.
___
@@ -62,11 +63,11 @@ ___
It seems important that the file was not renamed when it was downloaded.
If necessary, rename it before installing it.
-- [![jdbcDriverOOo logo][18]][19] Install **[jdbcDriverOOo.oxt][20]** extension [![Version][21]][20]
+- [![jdbcDriverOOo logo][20]][21] Install **[jdbcDriverOOo.oxt][22]** extension [![Version][23]][22]
- This extension is necessary to use SQLite version 3.42.0.0 with all its features.
+ This extension is required to use the latest version of SQLite with all its features.
-- ![SQLiteOOo logo][22] Install **[SQLiteOOo.oxt][23]** extension [![Version][24]][23]
+- ![SQLiteOOo logo][24] Install **[SQLiteOOo.oxt][25]** extension [![Version][26]][25]
Restart LibreOffice after installation.
**Be careful, restarting LibreOffice may not be enough.**
@@ -88,20 +89,20 @@ ___
In LibreOffice / OpenOffice go to File -> New -> Database...:
-![SQLiteOOo screenshot 1][25]
+![SQLiteOOo screenshot 1][27]
In step: Select database:
- select: Create a new database
- in: Emdedded database: choose: Embedded SQLite Driver
- click on button: Next
-![SQLiteOOo screenshot 2][26]
+![SQLiteOOo screenshot 2][28]
In step: Save and proceed:
- adjust the parameters according to your needs...
- click on button: Finish
-![SQLiteOOo screenshot 3][27]
+![SQLiteOOo screenshot 3][29]
Have fun...
@@ -109,17 +110,17 @@ ___
## How does it work:
-SQLiteOOo is an [com.sun.star.sdbc.Driver][28] UNO service written in Python.
-It is an overlay to the [jdbcDriverOOo][19] extension allowing to store the SQLite database in an odb file (which is, in fact, a compressed file).
+SQLiteOOo is an [com.sun.star.sdbc.Driver][30] UNO service written in Python.
+It is an overlay to the [jdbcDriverOOo][21] extension allowing to store the SQLite database in an odb file (which is, in fact, a compressed file).
Its operation is quite basic, namely:
- When requesting a connection, several things are done:
- If it does not already exist, a **subdirectory** with name: `.` + `odb_file_name` + `.lck` is created in the location of the odb file where all SQLite files are extracted from the **database** directory of the odb file (unzip).
- - The [jdbcDriverOOo][19] extension is used to get the [com.sun.star.sdbc.XConnection][29] interface from the **subdirectory** path + `/sqlite`.
- - If the connection is successful, a [DocumentHandler][30] is added as an [com.sun.star.util.XCloseListener][31] and [com.sun.star.document.XStorageChangeListener][32] to the odb file.
+ - The [jdbcDriverOOo][21] extension is used to get the [com.sun.star.sdbc.XConnection][31] interface from the **subdirectory** path + `/sqlite`.
+ - If the connection is successful, a [DocumentHandler][32] is added as an [com.sun.star.util.XCloseListener][33] and [com.sun.star.document.XStorageChangeListener][34] to the odb file.
- If the connection is unsuccessful and the files was extracted in phase 1, the **subdirectory** will be deleted.
-- When closing or renaming (Save As) the odb file, if the connection was successful, the [DocumentHandler][30] copies all files present in the **subdirectory** into the (new) **database** directory of the odb file (zip), then delete the **subdirectory**.
+- When closing or renaming (Save As) the odb file, if the connection was successful, the [DocumentHandler][32] copies all files present in the **subdirectory** into the (new) **database** directory of the odb file (zip), then delete the **subdirectory**.
The main purpose of this mode of operation is to take advantage of the ACID characteristics of the underlying database in the event of an abnormal closure of LibreOffice.
On the other hand, the function: **file -> Save** has **no effect on the underlying database**. Only closing the odb file or saving it under a different name (File -> Save As) will save the database in the odb file.
@@ -128,12 +129,12 @@ ___
## How to build the extension:
-Normally, the extension is created with Eclipse for Java and [LOEclipse][33]. To work around Eclipse, I modified LOEclipse to allow the extension to be created with Apache Ant.
+Normally, the extension is created with Eclipse for Java and [LOEclipse][35]. To work around Eclipse, I modified LOEclipse to allow the extension to be created with Apache Ant.
To create the SQLiteOOo extension with the help of Apache Ant, you need to:
-- Install the [Java SDK][34] version 8 or higher.
-- Install [Apache Ant][35] version 1.10.0 or higher.
-- Install [LibreOffice and its SDK][36] version 7.x or higher.
-- Clone the [SQLiteOOo][37] repository on GitHub into a folder.
+- Install the [Java SDK][36] version 8 or higher.
+- Install [Apache Ant][37] version 1.10.0 or higher.
+- Install [LibreOffice and its SDK][38] version 7.x or higher.
+- Clone the [SQLiteOOo][39] repository on GitHub into a folder.
- From this folder, move to the directory: `source/SQLiteOOo/`
- In this directory, edit the file: `build.properties` so that the `office.install.dir` and `sdk.dir` properties point to the folders where LibreOffice and its SDK were installed, respectively.
- Start the archive creation process using the command: `ant`
@@ -157,11 +158,11 @@ ___
### What has been done for version 1.0.0:
-- Integration of SQLite JDBC version 3.42.0.0. I especially want to thank [gotson][38] for the [many improvements to the SQLite JDBC driver][39] that made it possible to use SQLite in LibreOffice/OpenOffice.
+- Integration of SQLite JDBC version 3.42.0.0. I especially want to thank [gotson][40] for the [many improvements to the SQLite JDBC driver][41] that made it possible to use SQLite in LibreOffice/OpenOffice.
### What has been done for version 1.0.1:
-- Fixed [bug 156511][40] occurring when using the com.sun.star.embed.XStorage interface. The [workaround][41] is to use the copyElementTo() method instead of moveElementTo(). Versions of LibreOffice 7.6.x and higher become usable.
+- Fixed [bug 156511][42] occurring when using the com.sun.star.embed.XStorage interface. The [workaround][43] is to use the copyElementTo() method instead of moveElementTo(). Versions of LibreOffice 7.6.x and higher become usable.
### What has been done for version 1.0.2:
@@ -171,22 +172,22 @@ ___
### What has been done for version 1.1.0:
-- All Python packages necessary for the extension are now recorded in a [requirements.txt][42] file following [PEP 508][43].
+- All Python packages necessary for the extension are now recorded in a [requirements.txt][44] file following [PEP 508][45].
- Now if you are not on Windows then the Python packages necessary for the extension can be easily installed with the command:
`pip install requirements.txt`
-- Modification of the [Requirement][44] section.
+- Modification of the [Requirement][46] section.
### What has been done for version 1.1.1:
-- Support for [new features][45] in **jdbcDriverOOo 1.1.2**.
+- Support for [new features][47] in **jdbcDriverOOo 1.1.2**.
### What has been done for version 1.1.2:
-- SQLite driver updated to latest version [SQLite-jdbc-3.45.1.3-SNAPSHOT.jar][46]. This new driver has been implemented to support part of the JDBC 4.1 specifications and more particularly the `java.sql.Statement.getGeneratedKeys()` interface and allows the use of the [com.sun.star.sdbc.XGeneratedResultSet][47] interface.
+- SQLite driver updated to latest version [SQLite-jdbc-3.45.1.3-SNAPSHOT.jar][48]. This new driver has been implemented to support part of the JDBC 4.1 specifications and more particularly the `java.sql.Statement.getGeneratedKeys()` interface and allows the use of the [com.sun.star.sdbc.XGeneratedResultSet][49] interface.
### What has been done for version 1.1.3:
-- Support for the latest version of **jdbcDriverOOo 1.1.4** and the [SQLite-jdbc-3.45.1.6-SNAPSHOT.jar][48].
+- Support for the latest version of **jdbcDriverOOo 1.1.4** and the [SQLite-jdbc-3.45.1.6-SNAPSHOT.jar][50].
- Now for proper functioning in Base under: **Edit -> Database -> Advanced Settings... -> Query of generated values** must be left blank. If you want to use an odb file created with a previous version of SQLiteOOo you must change this setting manually.
- Normally the next versions of SQLiteOOo should be able to be updated in the list of extensions installed under LibreOffice: **Tools -> Extension manager... -> Check for Updates**.
@@ -201,19 +202,19 @@ ___
### What has been done for version 1.2.0:
-- This version is based on [fix #154989][49] available since LibreOffice 24.2.x. It can therefore work with other extensions offering integrated database services.
+- This version is based on [fix #154989][51] available since LibreOffice 24.2.x. It can therefore work with other extensions offering integrated database services.
- Now SQLiteOOo requires LibreOffice 24.2.x minimum and will load for the url: `sdbc:embedded:sqlite`.
### What has been done for version 1.2.1:
-- Updated the [Python packaging][50] package to version 24.1.
-- Updated the [Python setuptools][51] package to version 72.1.0.
+- Updated the [Python packaging][52] package to version 24.1.
+- Updated the [Python setuptools][53] package to version 72.1.0.
- The extension will ask you to install the jdbcDriverOOo extension in versions 1.4.2 minimum.
### What has been done for version 1.2.2:
-- Fixed [issue #2][52] which appears to be a regression related to the release of JaybirdOOo. Thanks to madalienist for reporting it.
-- Updated the [Python setuptools][51] package to version 73.0.1.
+- Fixed [issue #2][54] which appears to be a regression related to the release of JaybirdOOo. Thanks to madalienist for reporting it.
+- Updated the [Python setuptools][53] package to version 73.0.1.
- The extension options are now accessible via: **Tools -> Options -> LibreOffice Base -> Embedded SQLite Driver**
- Logging accessible in extension options now displays correctly on Windows.
- Changes to extension options that require a restart of LibreOffice will result in a message being displayed.
@@ -228,12 +229,12 @@ ___
### What has been done for version 1.3.0:
-- Updated the [Python packaging][50] package to version 25.0.
-- Updated the [Python setuptools][51] package to version 75.3.2.
-- Passive registration deployment that allows for much faster installation of extensions and differentiation of registered UNO services from those provided by a Java or Python implementation. This passive registration is provided by the [LOEclipse][33] extension via [PR#152][53] and [PR#157][54].
-- Modified [LOEclipse][33] to support the new `rdb` file format produced by the `unoidl-write` compilation utility. `idl` files have been updated to support both available compilation tools: idlc and unoidl-write.
-- Implemented [PEP 570][55] in [logging][56] to support unique multiple arguments.
-- It is now possible to build the oxt file of the SQLiteOOo extension only with the help of Apache Ant and a copy of the GitHub repository. The [How to build the extension][57] section has been added to the documentation.
+- Updated the [Python packaging][52] package to version 25.0.
+- Updated the [Python setuptools][53] package to version 75.3.2.
+- Passive registration deployment that allows for much faster installation of extensions and differentiation of registered UNO services from those provided by a Java or Python implementation. This passive registration is provided by the [LOEclipse][35] extension via [PR#152][55] and [PR#157][56].
+- Modified [LOEclipse][35] to support the new `rdb` file format produced by the `unoidl-write` compilation utility. `idl` files have been updated to support both available compilation tools: idlc and unoidl-write.
+- Implemented [PEP 570][57] in [logging][58] to support unique multiple arguments.
+- It is now possible to build the oxt file of the SQLiteOOo extension only with the help of Apache Ant and a copy of the GitHub repository. The [How to build the extension][59] section has been added to the documentation.
- Any errors occurring while loading the driver will be logged in the extension's log if logging has been previously enabled. This makes it easier to identify installation problems on Windows.
- Requires the **jdbcDriverOOo extension at least version 1.5.0**.
@@ -246,7 +247,17 @@ ___
- Requires the **jdbcDriverOOo extension at least version 1.5.4**.
-### What remains to be done for version 1.3.2:
+### What has been done for version 1.3.3:
+
+- Requires the **jdbcDriverOOo extension at least version 1.5.7**.
+
+### What has been done for version 1.4.0:
+
+- If the jdbcDriverOOo extension works without Java instrumentation, a warning message will be displayed in the extension options.
+- Requires the **jdbcDriverOOo extension at least version 1.6.1**.
+- Has been tested under LibreOfficeDev 26.2.
+
+### What remains to be done for version 1.4.0:
- Add new language for internationalization...
@@ -256,7 +267,7 @@ ___
[2]:
[3]:
[4]:
-[5]:
+[5]:
[6]:
[7]:
[8]:
@@ -265,46 +276,48 @@ ___
[11]:
[12]:
[13]:
-[14]:
-[15]:
-[16]:
-[18]:
-[19]:
-[20]:
-[21]:
-[22]:
-[23]:
-[24]:
-[25]:
-[26]:
-[27]:
-[28]:
-[29]:
-[30]:
-[31]:
-[32]:
-[33]:
-[34]:
-[35]:
-[36]:
-[37]:
-[38]:
-[39]:
-[40]:
-[41]:
-[42]:
-[43]:
-[44]:
-[45]:
-[46]:
-[47]:
-[48]:
-[49]:
-[50]:
-[51]:
-[52]:
-[53]:
-[54]:
-[55]:
-[56]:
-[57]:
+[14]:
+[15]:
+[16]:
+[17]:
+[18]:
+[20]:
+[21]:
+[22]:
+[23]:
+[24]:
+[25]:
+[26]:
+[27]:
+[28]:
+[29]:
+[30]:
+[31]:
+[32]:
+[33]:
+[34]:
+[35]:
+[36]:
+[37]:
+[38]:
+[39]:
+[40]:
+[41]:
+[42]:
+[43]:
+[44]:
+[45]:
+[46]:
+[47]:
+[48]:
+[49]:
+[50]:
+[51]:
+[52]:
+[53]:
+[54]:
+[55]:
+[56]:
+[57]:
+[58]:
+[59]:
diff --git a/README_fr.md b/README_fr.md
index 465af79d..c5c7bd0f 100644
--- a/README_fr.md
+++ b/README_fr.md
@@ -29,7 +29,7 @@
**L'utilisation de ce logiciel vous soumet à nos [Conditions d'utilisation][4].**
-# version [1.3.2][5]
+# version [1.4.0][5]
## Introduction:
@@ -42,6 +42,7 @@ Etant un logiciel libre je vous encourage:
- A dupliquer son [code source][12].
- A apporter des modifications, des corrections, des améliorations.
- D'ouvrir un [dysfonctionnement][13] si nécessaire.
+- De [participer au frais][14] de la [certification CASA][15].
Bref, à participer au developpement de cette extension.
Car c'est ensemble que nous pouvons rendre le Logiciel Libre plus intelligent.
@@ -51,9 +52,9 @@ ___
## Prérequis:
L'extension SQLiteOOo utilise l'extension jdbcDriverOOo pour fonctionner.
-Elle doit donc répondre aux [prérequis de l'extension jdbcDriverOOo][14].
+Elle doit donc répondre aux [prérequis de l'extension jdbcDriverOOo][16].
-De plus, en raison du [dysfonctionnement #156471][15] et suivant le [PR#154989][16], l'extension SQLiteOOo nécessite **LibreOffice version 24.2.x** minimum pour fonctionner.
+De plus, en raison du [dysfonctionnement #156471][17] et suivant le [PR#154989][18], l'extension SQLiteOOo nécessite **LibreOffice version 24.2.x** minimum pour fonctionner.
___
@@ -62,11 +63,11 @@ ___
Il semble important que le fichier n'ait pas été renommé lors de son téléchargement.
Si nécessaire, renommez-le avant de l'installer.
-- [![jdbcDriverOOo logo][18]][19] Installer l'extension **[jdbcDriverOOo.oxt][20]** [![Version][21]][20]
+- [![jdbcDriverOOo logo][20]][21] Installer l'extension **[jdbcDriverOOo.oxt][22]** [![Version][23]][22]
- Cette extension est nécessaire pour utiliser SQLite version 3.42.0.0 avec toutes ses fonctionnalités.
+ Cette extension est nécessaire pour utiliser la dernière version de SQLite avec toutes ses fonctionnalités.
-- ![SQLiteOOo logo][22] Installer l'extension **[SQLiteOOo.oxt][23]** [![Version][24]][23]
+- ![SQLiteOOo logo][24] Installer l'extension **[SQLiteOOo.oxt][25]** [![Version][26]][25]
Redémarrez LibreOffice après l'installation.
**Attention, redémarrer LibreOffice peut ne pas suffire.**
@@ -88,20 +89,20 @@ ___
Dans LibreOffice / OpenOffice aller à: Fichier -> Nouveau -> Base de données...:
-![SQLiteOOo screenshot 1][25]
+![SQLiteOOo screenshot 1][27]
A l'étape: Sélectionner une base de données:
- selectionner: Créer une nouvelle base de données
- Dans: Base de données intégrée: choisir: Pilote SQLite intégré
- cliquer sur le bouton: Suivant
-![SQLiteOOo screenshot 2][26]
+![SQLiteOOo screenshot 2][28]
A l'étape: Enregistrer et continuer:
- ajuster les paramètres selon vos besoins...
- cliquer sur le bouton: Terminer
-![SQLiteOOo screenshot 3][27]
+![SQLiteOOo screenshot 3][29]
Maintenant à vous d'en profiter...
@@ -109,17 +110,17 @@ ___
## Comment ça marche:
-SQLiteOOo est un service [com.sun.star.sdbc.Driver][28] UNO écrit en Python.
-Il s'agit d'une surcouche à l'extension [jdbcDriverOOo][19] permettant de stocker la base de données SQLite dans un fichier odb (qui est, en fait, un fichier compressé).
+SQLiteOOo est un service [com.sun.star.sdbc.Driver][30] UNO écrit en Python.
+Il s'agit d'une surcouche à l'extension [jdbcDriverOOo][21] permettant de stocker la base de données SQLite dans un fichier odb (qui est, en fait, un fichier compressé).
Son fonctionnement est assez basique, à savoir:
- Lors d'une demande de connexion, plusieurs choses sont faites:
- S'il n'existe pas déjà, un **sous-répertoire** avec le nom: `.` + `nom_du_fichier_odb` + `.lck` est créé à l'emplacement du fichier odb dans lequel tous les fichiers SQLite sont extraits du répertoire **database** du fichier odb (décompression).
- - L'extension [jdbcDriverOOo][19] est utilisée pour obtenir l'interface [com.sun.star.sdbc.XConnection][29] à partir du chemin du **sous-répertoire** + `/sqlite`.
- - Si la connexion réussi, un [DocumentHandler][30] est ajouté en tant que [com.sun.star.util.XCloseListener][31] et [com.sun.star.document.XStorageChangeListener][32] au fichier odb.
+ - L'extension [jdbcDriverOOo][21] est utilisée pour obtenir l'interface [com.sun.star.sdbc.XConnection][31] à partir du chemin du **sous-répertoire** + `/sqlite`.
+ - Si la connexion réussi, un [DocumentHandler][32] est ajouté en tant que [com.sun.star.util.XCloseListener][33] et [com.sun.star.document.XStorageChangeListener][34] au fichier odb.
- Si la connexion échoue et que les fichiers ont été extraits lors de la phase 1, le **sous-répertoire** est supprimé.
-- Lors de la fermeture ou du changement de nom (Enregistrer sous) du fichier odb, si la connexion a réussi, le [DocumentHandler][30] copie tous les fichiers présents dans le **sous-répertoire** dans le (nouveau) répertoire **database** du fichier odb (zip), puis supprime le **sous-répertoire**.
+- Lors de la fermeture ou du changement de nom (Enregistrer sous) du fichier odb, si la connexion a réussi, le [DocumentHandler][32] copie tous les fichiers présents dans le **sous-répertoire** dans le (nouveau) répertoire **database** du fichier odb (zip), puis supprime le **sous-répertoire**.
Le but principal de ce mode de fonctionnement est de profiter des caractéristiques ACID de la base de données sous-jacente en cas de fermeture anormale de LibreOffice.
En contre partie, la fonction: **fichier -> Sauvegarder** n'a **aucun effet sur la base de données sous jacente**. Seul la fermeture du fichier odb ou son enregistrement sous un nom different (Fichier -> Enregistrer sous) effectura la sauvegarde de la base de donnée dans le fichier odb.
@@ -128,12 +129,12 @@ ___
## Comment créer l'extension:
-Normalement, l'extension est créée avec Eclipse pour Java et [LOEclipse][33]. Pour contourner Eclipse, j'ai modifié LOEclipse afin de permettre la création de l'extension avec Apache Ant.
+Normalement, l'extension est créée avec Eclipse pour Java et [LOEclipse][35]. Pour contourner Eclipse, j'ai modifié LOEclipse afin de permettre la création de l'extension avec Apache Ant.
Pour créer l'extension SQLiteOOo avec l'aide d'Apache Ant, vous devez:
-- Installer le [SDK Java][34] version 8 ou supérieure.
-- Installer [Apache Ant][35] version 1.10.0 ou supérieure.
-- Installer [LibreOffice et son SDK][36] version 7.x ou supérieure.
-- Cloner le dépôt [SQLiteOOo][37] sur GitHub dans un dossier.
+- Installer le [SDK Java][36] version 8 ou supérieure.
+- Installer [Apache Ant][37] version 1.10.0 ou supérieure.
+- Installer [LibreOffice et son SDK][38] version 7.x ou supérieure.
+- Cloner le dépôt [SQLiteOOo][39] sur GitHub dans un dossier.
- Depuis ce dossier, accédez au répertoire: `source/SQLiteOOo/`
- Dans ce répertoire, modifiez le fichier `build.properties` afin que les propriétés `office.install.dir` et `sdk.dir` pointent vers les dossiers d'installation de LibreOffice et de son SDK, respectivement.
- Lancez la création de l'archive avec la commande: `ant`
@@ -157,11 +158,11 @@ ___
### Ce qui a été fait pour la version 1.0.0:
-- Intégration de SQLite JDBC version 3.42.0.0. Je tiens tout particulièrement à remercier [gotson][38] pour les [nombreuses améliorations apportées au pilote SQLite JDBC][39] qui ont rendu possible l'utilisation de SQLite dans LibreOffice/OpenOffice.
+- Intégration de SQLite JDBC version 3.42.0.0. Je tiens tout particulièrement à remercier [gotson][40] pour les [nombreuses améliorations apportées au pilote SQLite JDBC][41] qui ont rendu possible l'utilisation de SQLite dans LibreOffice/OpenOffice.
### Ce qui a été fait pour la version 1.0.1:
-- Résolution du [dysfonctionnement 156511][40] survenant lors de l'utilisation de l'interface com.sun.star.embed.XStorage. Le [contournement][41] consiste à utiliser la méthode copyElementTo() au lieu de moveElementTo(). Les versions de LibreOffice 7.6.x et supérieures deviennent utilisables.
+- Résolution du [dysfonctionnement 156511][42] survenant lors de l'utilisation de l'interface com.sun.star.embed.XStorage. Le [contournement][43] consiste à utiliser la méthode copyElementTo() au lieu de moveElementTo(). Les versions de LibreOffice 7.6.x et supérieures deviennent utilisables.
### Ce qui a été fait pour la version 1.0.2:
@@ -171,22 +172,22 @@ ___
### Ce qui a été fait pour la version 1.1.0:
-- Tous les paquets Python nécessaires à l'extension sont désormais enregistrés dans un fichier [requirements.txt][42] suivant la [PEP 508][43].
+- Tous les paquets Python nécessaires à l'extension sont désormais enregistrés dans un fichier [requirements.txt][44] suivant la [PEP 508][45].
- Désormais si vous n'êtes pas sous Windows alors les paquets Python nécessaires à l'extension peuvent être facilement installés avec la commande:
`pip install requirements.txt`
-- Modification de la section [Prérequis][44].
+- Modification de la section [Prérequis][46].
### Ce qui a été fait pour la version 1.1.1:
-- Prise en charge des [nouvelles fonctionnalités][45] de **jdbcDriverOOo 1.1.2**.
+- Prise en charge des [nouvelles fonctionnalités][47] de **jdbcDriverOOo 1.1.2**.
### Ce qui a été fait pour la version 1.1.2:
-- Pilote SQLite mis à jour vers la dernière version [SQLite-jdbc-3.45.1.3-SNAPSHOT.jar][46]. Ce nouveau pilote a été implémenté pour supporter une partie des spécifications JDBC 4.1 et plus particulièrement l'interface `java.sql.Statement.getGeneratedKeys()` et permet l'utilisation de l'interface [com.sun.star.sdbc.XGeneratedResultSet][47].
+- Pilote SQLite mis à jour vers la dernière version [SQLite-jdbc-3.45.1.3-SNAPSHOT.jar][48]. Ce nouveau pilote a été implémenté pour supporter une partie des spécifications JDBC 4.1 et plus particulièrement l'interface `java.sql.Statement.getGeneratedKeys()` et permet l'utilisation de l'interface [com.sun.star.sdbc.XGeneratedResultSet][49].
### Ce qui a été fait pour la version 1.1.3:
-- Prise en charge de la dernière version de **jdbcDriverOOo 1.1.4** et de [SQLite-jdbc-3.45.1.6-SNAPSHOT.jar][48].
+- Prise en charge de la dernière version de **jdbcDriverOOo 1.1.4** et de [SQLite-jdbc-3.45.1.6-SNAPSHOT.jar][50].
- Maintenant, pour un bon fonctionnement dans Base sous : **Édition -> Base de données -> Paramètres avancés... -> Requête des valeurs générées** doit être laissée vide. Si vous souhaitez utiliser un fichier odb créé avec une version précédente de SQLiteOOo vous devez modifier ce paramètre manuellement.
- Normalement les prochaines versions de SQLiteOOo devraient pouvoir être mises à jour dans la liste des extensions installées sous LibreOffice: **Outils -> Gestionnaire des extensions... -> Vérifier les mises à jour**.
@@ -201,19 +202,19 @@ ___
### Ce qui a été fait pour la version 1.2.0:
-- Cette version est basée sur la [correction #154989][49] disponible depuis LibreOffice 24.2.x. Elle peut donc fonctionner avec les autres extensions proposant des services de bases de données intégrées.
+- Cette version est basée sur la [correction #154989][51] disponible depuis LibreOffice 24.2.x. Elle peut donc fonctionner avec les autres extensions proposant des services de bases de données intégrées.
- Désormais, SQLiteOOo nécessite LibreOffice 24.2.x minimum et se chargera pour l'url: `sdbc:embedded:sqlite`.
### Ce qui a été fait pour la version 1.2.1:
-- Mise à jour du paquet [Python packaging][50] vers la version 24.1.
-- Mise à jour du paquet [Python setuptools][51] vers la version 72.1.0.
+- Mise à jour du paquet [Python packaging][52] vers la version 24.1.
+- Mise à jour du paquet [Python setuptools][53] vers la version 72.1.0.
- L'extension vous demandera d'installer l'extensions jdbcDriverOOo en version 1.4.2 minimum.
### Ce qui a été fait pour la version 1.2.2:
-- Correction du [problème n°2][52] qui semble être une régression liée à la sortie de JaybirdOOo. Merci à madalienist de l'avoir signalé.
-- Mise à jour du paquet [Python setuptools][51] vers la version 73.0.1.
+- Correction du [problème n°2][54] qui semble être une régression liée à la sortie de JaybirdOOo. Merci à madalienist de l'avoir signalé.
+- Mise à jour du paquet [Python setuptools][53] vers la version 73.0.1.
- Les options de l'extension sont désormais accessibles via: **Outils -> Options -> LibreOffice Base -> Pilote SQLite intégré**
- La journalisation accessible dans les options de l’extension s’affiche désormais correctement sous Windows.
- Les modifications apportées aux options de l'extension, qui nécessitent un redémarrage de LibreOffice, entraîneront l'affichage d'un message.
@@ -228,12 +229,12 @@ ___
### Ce qui a été fait pour la version 1.3.0:
-- Mise à jour du paquet [Python packaging][50] vers la version 25.0.
-- Mise à jour du paquet [Python setuptools][51] vers la version 75.3.2.
-- Déploiement de l'enregistrement passif permettant une installation beaucoup plus rapide des extensions et de différencier les services UNO enregistrés de ceux fournis par une implémentation Java ou Python. Cet enregistrement passif est assuré par l'extension [LOEclipse][33] via les [PR#152][53] et [PR#157][54].
-- Modification de [LOEclipse][33] pour prendre en charge le nouveau format de fichier `rdb` produit par l'utilitaire de compilation `unoidl-write`. Les fichiers `idl` ont été mis à jour pour prendre en charge les deux outils de compilation disponibles: idlc et unoidl-write.
-- Implémentation de [PEP 570][55] dans la [journalisation][56] pour prendre en charge les arguments multiples uniques.
-- Il est désormais possible de créer le fichier oxt de l'extension SQLiteOOo uniquement avec Apache Ant et une copie du dépôt GitHub. La section [Comment créer l'extension][57] a été ajoutée à la documentation.
+- Mise à jour du paquet [Python packaging][52] vers la version 25.0.
+- Mise à jour du paquet [Python setuptools][53] vers la version 75.3.2.
+- Déploiement de l'enregistrement passif permettant une installation beaucoup plus rapide des extensions et de différencier les services UNO enregistrés de ceux fournis par une implémentation Java ou Python. Cet enregistrement passif est assuré par l'extension [LOEclipse][35] via les [PR#152][55] et [PR#157][56].
+- Modification de [LOEclipse][35] pour prendre en charge le nouveau format de fichier `rdb` produit par l'utilitaire de compilation `unoidl-write`. Les fichiers `idl` ont été mis à jour pour prendre en charge les deux outils de compilation disponibles: idlc et unoidl-write.
+- Implémentation de [PEP 570][57] dans la [journalisation][58] pour prendre en charge les arguments multiples uniques.
+- Il est désormais possible de créer le fichier oxt de l'extension SQLiteOOo uniquement avec Apache Ant et une copie du dépôt GitHub. La section [Comment créer l'extension][59] a été ajoutée à la documentation.
- Toute erreur survenant lors du chargement du pilote sera consignée dans le journal de l'extension si la journalisation a été préalablement activé. Cela facilite l'identification des problèmes d'installation sous Windows.
- Nécessite l'extension **jdbcDriverOOo en version 1.5.0 minimum**.
@@ -246,7 +247,17 @@ ___
- Nécessite l'extension **jdbcDriverOOo en version 1.5.4 minimum**.
-### Que reste-t-il à faire pour la version 1.3.2:
+### Ce qui a été fait pour la version 1.3.3:
+
+- Nécessite l'extension **jdbcDriverOOo en version 1.5.7 minimum**.
+
+### Ce qui a été fait pour la version 1.4.0:
+
+- Si l'extension jdbcDriverOOo fonctionne sans l'instrumentation Java, un message d'avertissement s'affichera dans les options de l'extension.
+- Nécessite l'extension **jdbcDriverOOo en version 1.6.1 minimum**.
+- A été testé sous LibreOfficeDev 26.2.
+
+### Que reste-t-il à faire pour la version 1.4.0:
- Ajouter de nouvelles langue pour l'internationalisation...
@@ -256,7 +267,7 @@ ___
[2]:
[3]:
[4]:
-[5]:
+[5]:
[6]:
[7]:
[8]:
@@ -265,46 +276,48 @@ ___
[11]:
[12]:
[13]:
-[14]:
-[15]:
-[16]:
-[18]:
-[19]:
-[20]:
-[21]:
-[22]:
-[23]:
-[24]:
-[25]:
-[26]:
-[27]:
-[28]:
-[29]:
-[30]:
-[31]:
-[32]:
-[33]:
-[34]:
-[35]:
-[36]:
-[37]:
-[38]:
-[39]:
-[40]:
-[41]:
-[42]:
-[43]:
-[44]:
-[45]:
-[46]:
-[47]:
-[48]:
-[49]:
-[50]:
-[51]:
-[52]:
-[53]:
-[54]:
-[55]:
-[56]:
-[57]:
+[14]:
+[15]:
+[16]:
+[17]:
+[18]:
+[20]:
+[21]:
+[22]:
+[23]:
+[24]:
+[25]:
+[26]:
+[27]:
+[28]:
+[29]:
+[30]:
+[31]:
+[32]:
+[33]:
+[34]:
+[35]:
+[36]:
+[37]:
+[38]:
+[39]:
+[40]:
+[41]:
+[42]:
+[43]:
+[44]:
+[45]:
+[46]:
+[47]:
+[48]:
+[49]:
+[50]:
+[51]:
+[52]:
+[53]:
+[54]:
+[55]:
+[56]:
+[57]:
+[58]:
+[59]:
diff --git a/source/SQLiteOOo/Drivers.xcu b/source/SQLiteOOo/Drivers.xcu
index c6970224..f7d0f7bd 100644
--- a/source/SQLiteOOo/Drivers.xcu
+++ b/source/SQLiteOOo/Drivers.xcu
@@ -24,96 +24,99 @@
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
+
-
-
-
- io.github.prrvchr.SQLiteOOo.Driver
-
-
- Embedded SQLite Driver
- Pilote SQLite intégré
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- PRIMARY KEY AUTOINCREMENT
-
-
-
-
-
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
-
-
- true
-
-
-
-
- true
-
-
-
+
+
+
+ io.github.prrvchr.SQLiteOOo.Driver
+
+
+ Embedded SQLite Driver
+ Pilote SQLite intégré
+
+
+
+
+ true
+
-
+
+
+ true
+
+
+
+
+ PRIMARY KEY AUTOINCREMENT
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+
+
diff --git a/source/SQLiteOOo/Options.xcs b/source/SQLiteOOo/Options.xcs
index a3709d84..af62942c 100644
--- a/source/SQLiteOOo/Options.xcs
+++ b/source/SQLiteOOo/Options.xcs
@@ -24,16 +24,17 @@
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
+
+ oor:name="SQLiteOOo"
+ xml:lang="en-US">
+
diff --git a/source/SQLiteOOo/Options.xcu b/source/SQLiteOOo/Options.xcu
index 8c34e60e..dd6878aa 100644
--- a/source/SQLiteOOo/Options.xcu
+++ b/source/SQLiteOOo/Options.xcu
@@ -24,11 +24,11 @@
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
+
@@ -41,3 +41,4 @@
false
+
diff --git a/source/SQLiteOOo/OptionsDialog.xcu b/source/SQLiteOOo/OptionsDialog.xcu
index e0c533a8..f3ab5a1d 100644
--- a/source/SQLiteOOo/OptionsDialog.xcu
+++ b/source/SQLiteOOo/OptionsDialog.xcu
@@ -23,38 +23,41 @@
║ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ║
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
--->
+
+
-
+
+
+
+ LibreOffice Base
+ LibreOffice Base
+
+
+ true
+
+
-
- LibreOffice Base
- LibreOffice Base
-
-
- true
-
-
-
-
- io.github.prrvchr.SQLiteOOo
-
-
- Embedded SQLite Driver
- Pilote SQLite intégré
-
-
- %origin%/dialogs/OptionsDialog.xdl
-
-
- io.github.prrvchr.SQLiteOOo.OptionsHandler
-
-
-
+
+ io.github.prrvchr.SQLiteOOo
+
+
+ Embedded SQLite Driver
+ Pilote SQLite intégré
+
+
+ %origin%/dialogs/OptionsDialog.xdl
+
+
+ io.github.prrvchr.SQLiteOOo.OptionsHandler
+
+
+
+
diff --git a/source/SQLiteOOo/component-schema.dtd b/source/SQLiteOOo/component-schema.dtd
new file mode 120000
index 00000000..8bd8f795
--- /dev/null
+++ b/source/SQLiteOOo/component-schema.dtd
@@ -0,0 +1 @@
+../../uno/lib/uno/component-schema.dtd
\ No newline at end of file
diff --git a/source/SQLiteOOo/component-update.dtd b/source/SQLiteOOo/component-update.dtd
new file mode 120000
index 00000000..90c5befb
--- /dev/null
+++ b/source/SQLiteOOo/component-update.dtd
@@ -0,0 +1 @@
+../../uno/lib/uno/component-update.dtd
\ No newline at end of file
diff --git a/source/SQLiteOOo/description.xml b/source/SQLiteOOo/description.xml
index 92a907e4..6fc46a4a 100644
--- a/source/SQLiteOOo/description.xml
+++ b/source/SQLiteOOo/description.xml
@@ -28,7 +28,7 @@
xmlns:d="http://openoffice.org/extensions/description/2006"
xmlns:l="http://libreoffice.org/extensions/description/2011"
xmlns:xlink="http://www.w3.org/1999/xlink">
-
+
diff --git a/source/SQLiteOOo/dialogs/dialog.dtd b/source/SQLiteOOo/dialogs/dialog.dtd
new file mode 120000
index 00000000..aee03339
--- /dev/null
+++ b/source/SQLiteOOo/dialogs/dialog.dtd
@@ -0,0 +1 @@
+../../../uno/dialog/dialog.dtd
\ No newline at end of file
diff --git a/source/SQLiteOOo/idl/com/sun/star/task/XTaskEvent.idl b/source/SQLiteOOo/idl/com/sun/star/task/XTaskEvent.idl
new file mode 120000
index 00000000..04f9701c
--- /dev/null
+++ b/source/SQLiteOOo/idl/com/sun/star/task/XTaskEvent.idl
@@ -0,0 +1 @@
+../../../../../../../uno/rdb/idl/com/sun/star/task/XTaskEvent.idl
\ No newline at end of file
diff --git a/source/SQLiteOOo/package.properties b/source/SQLiteOOo/package.properties
index cab6b7cf..752a17c5 100644
--- a/source/SQLiteOOo/package.properties
+++ b/source/SQLiteOOo/package.properties
@@ -1,3 +1,3 @@
#Written by the OOEclipseIntegration
-#Thu May 01 13:22:29 CEST 2025
-contents=description.xml, description/desc_en.txt, description/desc_fr.txt, dialogs/LogDialog.xdl, dialogs/LogDialog_en_US.default, dialogs/LogDialog_en_US.properties, dialogs/LogDialog_fr_FR.properties, dialogs/LogWindow.xdl, dialogs/LogWindow_en_US.default, dialogs/LogWindow_en_US.properties, dialogs/LogWindow_fr_FR.properties, dialogs/OptionDialog.xdl, dialogs/OptionDialog_en_US.default, dialogs/OptionDialog_en_US.properties, dialogs/OptionDialog_fr_FR.properties, dialogs/OptionsDialog.xdl, dialogs/OptionsDialog_en_US.default, dialogs/OptionsDialog_en_US.properties, dialogs/OptionsDialog_fr_FR.properties, Drivers.xcu, img/SQLiteOOo.svg, META-INF/manifest.xml, Options.xcs, Options.xcu, OptionsDialog.xcu, package.components, registration/TermsOfUse_en.md, registration/TermsOfUse_fr.md, requirements.txt, resource/Driver_en_US.default, resource/Driver_en_US.properties, resource/Driver_fr_FR.properties, resource/Logger_en_US.default, resource/Logger_en_US.properties, resource/Logger_fr_FR.properties, service/Driver.py, service/OptionsHandler.py, service/pythonpath/_distutils_hack/__init__.py, service/pythonpath/_distutils_hack/override.py, service/pythonpath/distutils-precedence.pth, service/pythonpath/packaging-25.0.dist-info/licenses/LICENSE, service/pythonpath/packaging-25.0.dist-info/licenses/LICENSE.APACHE, service/pythonpath/packaging-25.0.dist-info/licenses/LICENSE.BSD, service/pythonpath/packaging-25.0.dist-info/METADATA, service/pythonpath/packaging-25.0.dist-info/RECORD, service/pythonpath/packaging-25.0.dist-info/WHEEL, service/pythonpath/packaging/__init__.py, service/pythonpath/packaging/_elffile.py, service/pythonpath/packaging/_manylinux.py, service/pythonpath/packaging/_musllinux.py, service/pythonpath/packaging/_parser.py, service/pythonpath/packaging/_structures.py, service/pythonpath/packaging/_tokenizer.py, service/pythonpath/packaging/licenses/__init__.py, service/pythonpath/packaging/licenses/_spdx.py, service/pythonpath/packaging/markers.py, service/pythonpath/packaging/metadata.py, service/pythonpath/packaging/py.typed, service/pythonpath/packaging/requirements.py, service/pythonpath/packaging/specifiers.py, service/pythonpath/packaging/tags.py, service/pythonpath/packaging/utils.py, service/pythonpath/packaging/version.py, service/pythonpath/pkg_resources/__init__.py, service/pythonpath/pkg_resources/api_tests.txt, service/pythonpath/pkg_resources/py.typed, service/pythonpath/pkg_resources/tests/__init__.py, service/pythonpath/pkg_resources/tests/data/my-test-package-source/setup.cfg, service/pythonpath/pkg_resources/tests/data/my-test-package-source/setup.py, service/pythonpath/pkg_resources/tests/data/my-test-package-zip/my-test-package.zip, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/dependency_links.txt, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/PKG-INFO, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/SOURCES.txt, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/top_level.txt, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/zip-safe, service/pythonpath/pkg_resources/tests/data/my-test-package_zipped-egg/my_test_package-1.0-py3.7.egg, service/pythonpath/pkg_resources/tests/test_find_distributions.py, service/pythonpath/pkg_resources/tests/test_integration_zope_interface.py, service/pythonpath/pkg_resources/tests/test_markers.py, service/pythonpath/pkg_resources/tests/test_pkg_resources.py, service/pythonpath/pkg_resources/tests/test_resources.py, service/pythonpath/pkg_resources/tests/test_working_set.py, service/pythonpath/setuptools-75.3.2.dist-info/entry_points.txt, service/pythonpath/setuptools-75.3.2.dist-info/LICENSE, service/pythonpath/setuptools-75.3.2.dist-info/METADATA, service/pythonpath/setuptools-75.3.2.dist-info/RECORD, service/pythonpath/setuptools-75.3.2.dist-info/top_level.txt, service/pythonpath/setuptools-75.3.2.dist-info/WHEEL, service/pythonpath/setuptools/__init__.py, service/pythonpath/setuptools/_core_metadata.py, service/pythonpath/setuptools/_distutils/__init__.py, service/pythonpath/setuptools/_distutils/_log.py, service/pythonpath/setuptools/_distutils/_macos_compat.py, service/pythonpath/setuptools/_distutils/_modified.py, service/pythonpath/setuptools/_distutils/_msvccompiler.py, service/pythonpath/setuptools/_distutils/archive_util.py, service/pythonpath/setuptools/_distutils/ccompiler.py, service/pythonpath/setuptools/_distutils/cmd.py, service/pythonpath/setuptools/_distutils/command/__init__.py, service/pythonpath/setuptools/_distutils/command/_framework_compat.py, service/pythonpath/setuptools/_distutils/command/bdist.py, service/pythonpath/setuptools/_distutils/command/bdist_dumb.py, service/pythonpath/setuptools/_distutils/command/bdist_rpm.py, service/pythonpath/setuptools/_distutils/command/build.py, service/pythonpath/setuptools/_distutils/command/build_clib.py, service/pythonpath/setuptools/_distutils/command/build_ext.py, service/pythonpath/setuptools/_distutils/command/build_py.py, service/pythonpath/setuptools/_distutils/command/build_scripts.py, service/pythonpath/setuptools/_distutils/command/check.py, service/pythonpath/setuptools/_distutils/command/clean.py, service/pythonpath/setuptools/_distutils/command/config.py, service/pythonpath/setuptools/_distutils/command/install.py, service/pythonpath/setuptools/_distutils/command/install_data.py, service/pythonpath/setuptools/_distutils/command/install_egg_info.py, service/pythonpath/setuptools/_distutils/command/install_headers.py, service/pythonpath/setuptools/_distutils/command/install_lib.py, service/pythonpath/setuptools/_distutils/command/install_scripts.py, service/pythonpath/setuptools/_distutils/command/sdist.py, service/pythonpath/setuptools/_distutils/compat/__init__.py, service/pythonpath/setuptools/_distutils/compat/py38.py, service/pythonpath/setuptools/_distutils/compat/py39.py, service/pythonpath/setuptools/_distutils/core.py, service/pythonpath/setuptools/_distutils/cygwinccompiler.py, service/pythonpath/setuptools/_distutils/debug.py, service/pythonpath/setuptools/_distutils/dep_util.py, service/pythonpath/setuptools/_distutils/dir_util.py, service/pythonpath/setuptools/_distutils/dist.py, service/pythonpath/setuptools/_distutils/errors.py, service/pythonpath/setuptools/_distutils/extension.py, service/pythonpath/setuptools/_distutils/fancy_getopt.py, service/pythonpath/setuptools/_distutils/file_util.py, service/pythonpath/setuptools/_distutils/filelist.py, service/pythonpath/setuptools/_distutils/log.py, service/pythonpath/setuptools/_distutils/spawn.py, service/pythonpath/setuptools/_distutils/sysconfig.py, service/pythonpath/setuptools/_distutils/tests/__init__.py, service/pythonpath/setuptools/_distutils/tests/compat/__init__.py, service/pythonpath/setuptools/_distutils/tests/compat/py38.py, service/pythonpath/setuptools/_distutils/tests/support.py, service/pythonpath/setuptools/_distutils/tests/test_archive_util.py, service/pythonpath/setuptools/_distutils/tests/test_bdist.py, service/pythonpath/setuptools/_distutils/tests/test_bdist_dumb.py, service/pythonpath/setuptools/_distutils/tests/test_bdist_rpm.py, service/pythonpath/setuptools/_distutils/tests/test_build.py, service/pythonpath/setuptools/_distutils/tests/test_build_clib.py, service/pythonpath/setuptools/_distutils/tests/test_build_ext.py, service/pythonpath/setuptools/_distutils/tests/test_build_py.py, service/pythonpath/setuptools/_distutils/tests/test_build_scripts.py, service/pythonpath/setuptools/_distutils/tests/test_ccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_check.py, service/pythonpath/setuptools/_distutils/tests/test_clean.py, service/pythonpath/setuptools/_distutils/tests/test_cmd.py, service/pythonpath/setuptools/_distutils/tests/test_config_cmd.py, service/pythonpath/setuptools/_distutils/tests/test_core.py, service/pythonpath/setuptools/_distutils/tests/test_cygwinccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_dir_util.py, service/pythonpath/setuptools/_distutils/tests/test_dist.py, service/pythonpath/setuptools/_distutils/tests/test_extension.py, service/pythonpath/setuptools/_distutils/tests/test_file_util.py, service/pythonpath/setuptools/_distutils/tests/test_filelist.py, service/pythonpath/setuptools/_distutils/tests/test_install.py, service/pythonpath/setuptools/_distutils/tests/test_install_data.py, service/pythonpath/setuptools/_distutils/tests/test_install_headers.py, service/pythonpath/setuptools/_distutils/tests/test_install_lib.py, service/pythonpath/setuptools/_distutils/tests/test_install_scripts.py, service/pythonpath/setuptools/_distutils/tests/test_log.py, service/pythonpath/setuptools/_distutils/tests/test_mingwccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_modified.py, service/pythonpath/setuptools/_distutils/tests/test_msvccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_sdist.py, service/pythonpath/setuptools/_distutils/tests/test_spawn.py, service/pythonpath/setuptools/_distutils/tests/test_sysconfig.py, service/pythonpath/setuptools/_distutils/tests/test_text_file.py, service/pythonpath/setuptools/_distutils/tests/test_unixccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_util.py, service/pythonpath/setuptools/_distutils/tests/test_version.py, service/pythonpath/setuptools/_distutils/tests/test_versionpredicate.py, service/pythonpath/setuptools/_distutils/tests/unix_compat.py, service/pythonpath/setuptools/_distutils/text_file.py, service/pythonpath/setuptools/_distutils/unixccompiler.py, service/pythonpath/setuptools/_distutils/util.py, service/pythonpath/setuptools/_distutils/version.py, service/pythonpath/setuptools/_distutils/versionpredicate.py, service/pythonpath/setuptools/_distutils/zosccompiler.py, service/pythonpath/setuptools/_entry_points.py, service/pythonpath/setuptools/_imp.py, service/pythonpath/setuptools/_importlib.py, service/pythonpath/setuptools/_itertools.py, service/pythonpath/setuptools/_normalization.py, service/pythonpath/setuptools/_path.py, service/pythonpath/setuptools/_reqs.py, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/METADATA, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/RECORD, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/autocommand/__init__.py, service/pythonpath/setuptools/_vendor/autocommand/autoasync.py, service/pythonpath/setuptools/_vendor/autocommand/autocommand.py, service/pythonpath/setuptools/_vendor/autocommand/automain.py, service/pythonpath/setuptools/_vendor/autocommand/autoparse.py, service/pythonpath/setuptools/_vendor/autocommand/errors.py, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/backports/__init__.py, service/pythonpath/setuptools/_vendor/backports/tarfile/__init__.py, service/pythonpath/setuptools/_vendor/backports/tarfile/__main__.py, service/pythonpath/setuptools/_vendor/backports/tarfile/compat/__init__.py, service/pythonpath/setuptools/_vendor/backports/tarfile/compat/py38.py, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/importlib_metadata/__init__.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_adapters.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_collections.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_compat.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_functools.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_itertools.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_meta.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_text.py, service/pythonpath/setuptools/_vendor/importlib_metadata/compat/__init__.py, service/pythonpath/setuptools/_vendor/importlib_metadata/compat/py311.py, service/pythonpath/setuptools/_vendor/importlib_metadata/compat/py39.py, service/pythonpath/setuptools/_vendor/importlib_metadata/diagnose.py, service/pythonpath/setuptools/_vendor/importlib_metadata/py.typed, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/importlib_resources/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/_adapters.py, service/pythonpath/setuptools/_vendor/importlib_resources/_common.py, service/pythonpath/setuptools/_vendor/importlib_resources/_itertools.py, service/pythonpath/setuptools/_vendor/importlib_resources/abc.py, service/pythonpath/setuptools/_vendor/importlib_resources/compat/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/compat/py38.py, service/pythonpath/setuptools/_vendor/importlib_resources/compat/py39.py, service/pythonpath/setuptools/_vendor/importlib_resources/functional.py, service/pythonpath/setuptools/_vendor/importlib_resources/future/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/future/adapters.py, service/pythonpath/setuptools/_vendor/importlib_resources/py.typed, service/pythonpath/setuptools/_vendor/importlib_resources/readers.py, service/pythonpath/setuptools/_vendor/importlib_resources/simple.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/_path.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/compat/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/compat/py312.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/compat/py39.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/binary.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/binary.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/utf-16.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/utf-8.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/one/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/one/resource1.txt, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/subdirectory/subsubdir/resource.txt, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/two/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/two/resource2.txt, service/pythonpath/setuptools/_vendor/importlib_resources/tests/namespacedata01/binary.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/namespacedata01/subdirectory/binary.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/namespacedata01/utf-16.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/namespacedata01/utf-8.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_compatibilty_files.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_contents.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_custom.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_files.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_functional.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_open.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_path.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_read.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_reader.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_resource.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/util.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/zip.py, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/inflect/__init__.py, service/pythonpath/setuptools/_vendor/inflect/compat/__init__.py, service/pythonpath/setuptools/_vendor/inflect/compat/py38.py, service/pythonpath/setuptools/_vendor/inflect/py.typed, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/jaraco/collections/__init__.py, service/pythonpath/setuptools/_vendor/jaraco/collections/py.typed, service/pythonpath/setuptools/_vendor/jaraco/context.py, service/pythonpath/setuptools/_vendor/jaraco/functools/__init__.py, service/pythonpath/setuptools/_vendor/jaraco/functools/__init__.pyi, service/pythonpath/setuptools/_vendor/jaraco/functools/py.typed, service/pythonpath/setuptools/_vendor/jaraco/text/__init__.py, service/pythonpath/setuptools/_vendor/jaraco/text/layouts.py, service/pythonpath/setuptools/_vendor/jaraco/text/Lorem ipsum.txt, service/pythonpath/setuptools/_vendor/jaraco/text/show-newlines.py, service/pythonpath/setuptools/_vendor/jaraco/text/strip-prefix.py, service/pythonpath/setuptools/_vendor/jaraco/text/to-dvorak.py, service/pythonpath/setuptools/_vendor/jaraco/text/to-qwerty.py, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/more_itertools/__init__.py, service/pythonpath/setuptools/_vendor/more_itertools/__init__.pyi, service/pythonpath/setuptools/_vendor/more_itertools/more.py, service/pythonpath/setuptools/_vendor/more_itertools/more.pyi, service/pythonpath/setuptools/_vendor/more_itertools/py.typed, service/pythonpath/setuptools/_vendor/more_itertools/recipes.py, service/pythonpath/setuptools/_vendor/more_itertools/recipes.pyi, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/LICENSE.APACHE, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/LICENSE.BSD, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/packaging/__init__.py, service/pythonpath/setuptools/_vendor/packaging/_elffile.py, service/pythonpath/setuptools/_vendor/packaging/_manylinux.py, service/pythonpath/setuptools/_vendor/packaging/_musllinux.py, service/pythonpath/setuptools/_vendor/packaging/_parser.py, service/pythonpath/setuptools/_vendor/packaging/_structures.py, service/pythonpath/setuptools/_vendor/packaging/_tokenizer.py, service/pythonpath/setuptools/_vendor/packaging/markers.py, service/pythonpath/setuptools/_vendor/packaging/metadata.py, service/pythonpath/setuptools/_vendor/packaging/py.typed, service/pythonpath/setuptools/_vendor/packaging/requirements.py, service/pythonpath/setuptools/_vendor/packaging/specifiers.py, service/pythonpath/setuptools/_vendor/packaging/tags.py, service/pythonpath/setuptools/_vendor/packaging/utils.py, service/pythonpath/setuptools/_vendor/packaging/version.py, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/licenses/LICENSE, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/METADATA, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/RECORD, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/platformdirs/__init__.py, service/pythonpath/setuptools/_vendor/platformdirs/__main__.py, service/pythonpath/setuptools/_vendor/platformdirs/android.py, service/pythonpath/setuptools/_vendor/platformdirs/api.py, service/pythonpath/setuptools/_vendor/platformdirs/macos.py, service/pythonpath/setuptools/_vendor/platformdirs/py.typed, service/pythonpath/setuptools/_vendor/platformdirs/unix.py, service/pythonpath/setuptools/_vendor/platformdirs/version.py, service/pythonpath/setuptools/_vendor/platformdirs/windows.py, service/pythonpath/setuptools/_vendor/ruff.toml, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/tomli/__init__.py, service/pythonpath/setuptools/_vendor/tomli/_parser.py, service/pythonpath/setuptools/_vendor/tomli/_re.py, service/pythonpath/setuptools/_vendor/tomli/_types.py, service/pythonpath/setuptools/_vendor/tomli/py.typed, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/entry_points.txt, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/typeguard/__init__.py, service/pythonpath/setuptools/_vendor/typeguard/_checkers.py, service/pythonpath/setuptools/_vendor/typeguard/_config.py, service/pythonpath/setuptools/_vendor/typeguard/_decorators.py, service/pythonpath/setuptools/_vendor/typeguard/_exceptions.py, service/pythonpath/setuptools/_vendor/typeguard/_functions.py, service/pythonpath/setuptools/_vendor/typeguard/_importhook.py, service/pythonpath/setuptools/_vendor/typeguard/_memo.py, service/pythonpath/setuptools/_vendor/typeguard/_pytest_plugin.py, service/pythonpath/setuptools/_vendor/typeguard/_suppression.py, service/pythonpath/setuptools/_vendor/typeguard/_transformer.py, service/pythonpath/setuptools/_vendor/typeguard/_union_transformer.py, service/pythonpath/setuptools/_vendor/typeguard/_utils.py, service/pythonpath/setuptools/_vendor/typeguard/py.typed, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/METADATA, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/RECORD, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/typing_extensions.py, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/entry_points.txt, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/LICENSE.txt, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/wheel/__init__.py, service/pythonpath/setuptools/_vendor/wheel/__main__.py, service/pythonpath/setuptools/_vendor/wheel/_setuptools_logging.py, service/pythonpath/setuptools/_vendor/wheel/bdist_wheel.py, service/pythonpath/setuptools/_vendor/wheel/cli/__init__.py, service/pythonpath/setuptools/_vendor/wheel/cli/convert.py, service/pythonpath/setuptools/_vendor/wheel/cli/pack.py, service/pythonpath/setuptools/_vendor/wheel/cli/tags.py, service/pythonpath/setuptools/_vendor/wheel/cli/unpack.py, service/pythonpath/setuptools/_vendor/wheel/macosx_libfile.py, service/pythonpath/setuptools/_vendor/wheel/metadata.py, service/pythonpath/setuptools/_vendor/wheel/util.py, service/pythonpath/setuptools/_vendor/wheel/vendored/__init__.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/__init__.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_elffile.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_manylinux.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_musllinux.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_parser.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_structures.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_tokenizer.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/markers.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/requirements.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/specifiers.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/tags.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/utils.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/version.py, service/pythonpath/setuptools/_vendor/wheel/vendored/vendor.txt, service/pythonpath/setuptools/_vendor/wheel/wheelfile.py, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/METADATA, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/RECORD, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/zipp/__init__.py, service/pythonpath/setuptools/_vendor/zipp/compat/__init__.py, service/pythonpath/setuptools/_vendor/zipp/compat/py310.py, service/pythonpath/setuptools/_vendor/zipp/glob.py, service/pythonpath/setuptools/archive_util.py, service/pythonpath/setuptools/build_meta.py, service/pythonpath/setuptools/cli-32.exe, service/pythonpath/setuptools/cli-64.exe, service/pythonpath/setuptools/cli-arm64.exe, service/pythonpath/setuptools/cli.exe, service/pythonpath/setuptools/command/__init__.py, service/pythonpath/setuptools/command/_requirestxt.py, service/pythonpath/setuptools/command/alias.py, service/pythonpath/setuptools/command/bdist_egg.py, service/pythonpath/setuptools/command/bdist_rpm.py, service/pythonpath/setuptools/command/bdist_wheel.py, service/pythonpath/setuptools/command/build.py, service/pythonpath/setuptools/command/build_clib.py, service/pythonpath/setuptools/command/build_ext.py, service/pythonpath/setuptools/command/build_py.py, service/pythonpath/setuptools/command/develop.py, service/pythonpath/setuptools/command/dist_info.py, service/pythonpath/setuptools/command/easy_install.py, service/pythonpath/setuptools/command/editable_wheel.py, service/pythonpath/setuptools/command/egg_info.py, service/pythonpath/setuptools/command/install.py, service/pythonpath/setuptools/command/install_egg_info.py, service/pythonpath/setuptools/command/install_lib.py, service/pythonpath/setuptools/command/install_scripts.py, service/pythonpath/setuptools/command/launcher manifest.xml, service/pythonpath/setuptools/command/rotate.py, service/pythonpath/setuptools/command/saveopts.py, service/pythonpath/setuptools/command/sdist.py, service/pythonpath/setuptools/command/setopt.py, service/pythonpath/setuptools/command/test.py, service/pythonpath/setuptools/compat/__init__.py, service/pythonpath/setuptools/compat/py310.py, service/pythonpath/setuptools/compat/py311.py, service/pythonpath/setuptools/compat/py312.py, service/pythonpath/setuptools/compat/py39.py, service/pythonpath/setuptools/config/__init__.py, service/pythonpath/setuptools/config/_apply_pyprojecttoml.py, service/pythonpath/setuptools/config/_validate_pyproject/__init__.py, service/pythonpath/setuptools/config/_validate_pyproject/error_reporting.py, service/pythonpath/setuptools/config/_validate_pyproject/extra_validations.py, service/pythonpath/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py, service/pythonpath/setuptools/config/_validate_pyproject/fastjsonschema_validations.py, service/pythonpath/setuptools/config/_validate_pyproject/formats.py, service/pythonpath/setuptools/config/_validate_pyproject/NOTICE, service/pythonpath/setuptools/config/distutils.schema.json, service/pythonpath/setuptools/config/expand.py, service/pythonpath/setuptools/config/NOTICE, service/pythonpath/setuptools/config/pyprojecttoml.py, service/pythonpath/setuptools/config/setupcfg.py, service/pythonpath/setuptools/config/setuptools.schema.json, service/pythonpath/setuptools/depends.py, service/pythonpath/setuptools/discovery.py, service/pythonpath/setuptools/dist.py, service/pythonpath/setuptools/errors.py, service/pythonpath/setuptools/extension.py, service/pythonpath/setuptools/glob.py, service/pythonpath/setuptools/gui-32.exe, service/pythonpath/setuptools/gui-64.exe, service/pythonpath/setuptools/gui-arm64.exe, service/pythonpath/setuptools/gui.exe, service/pythonpath/setuptools/installer.py, service/pythonpath/setuptools/launch.py, service/pythonpath/setuptools/logging.py, service/pythonpath/setuptools/modified.py, service/pythonpath/setuptools/monkey.py, service/pythonpath/setuptools/msvc.py, service/pythonpath/setuptools/namespaces.py, service/pythonpath/setuptools/package_index.py, service/pythonpath/setuptools/sandbox.py, service/pythonpath/setuptools/script (dev).tmpl, service/pythonpath/setuptools/script.tmpl, service/pythonpath/setuptools/tests/__init__.py, service/pythonpath/setuptools/tests/compat/__init__.py, service/pythonpath/setuptools/tests/compat/py39.py, service/pythonpath/setuptools/tests/config/__init__.py, service/pythonpath/setuptools/tests/config/downloads/__init__.py, service/pythonpath/setuptools/tests/config/downloads/preload.py, service/pythonpath/setuptools/tests/config/setupcfg_examples.txt, service/pythonpath/setuptools/tests/config/test_apply_pyprojecttoml.py, service/pythonpath/setuptools/tests/config/test_expand.py, service/pythonpath/setuptools/tests/config/test_pyprojecttoml.py, service/pythonpath/setuptools/tests/config/test_pyprojecttoml_dynamic_deps.py, service/pythonpath/setuptools/tests/config/test_setupcfg.py, service/pythonpath/setuptools/tests/contexts.py, service/pythonpath/setuptools/tests/environment.py, service/pythonpath/setuptools/tests/fixtures.py, service/pythonpath/setuptools/tests/indexes/test_links_priority/external.html, service/pythonpath/setuptools/tests/indexes/test_links_priority/simple/foobar/index.html, service/pythonpath/setuptools/tests/integration/__init__.py, service/pythonpath/setuptools/tests/integration/helpers.py, service/pythonpath/setuptools/tests/integration/test_pip_install_sdist.py, service/pythonpath/setuptools/tests/mod_with_constant.py, service/pythonpath/setuptools/tests/namespaces.py, service/pythonpath/setuptools/tests/script-with-bom.py, service/pythonpath/setuptools/tests/server.py, service/pythonpath/setuptools/tests/test_archive_util.py, service/pythonpath/setuptools/tests/test_bdist_deprecations.py, service/pythonpath/setuptools/tests/test_bdist_egg.py, service/pythonpath/setuptools/tests/test_bdist_wheel.py, service/pythonpath/setuptools/tests/test_build.py, service/pythonpath/setuptools/tests/test_build_clib.py, service/pythonpath/setuptools/tests/test_build_ext.py, service/pythonpath/setuptools/tests/test_build_meta.py, service/pythonpath/setuptools/tests/test_build_py.py, service/pythonpath/setuptools/tests/test_config_discovery.py, service/pythonpath/setuptools/tests/test_core_metadata.py, service/pythonpath/setuptools/tests/test_depends.py, service/pythonpath/setuptools/tests/test_develop.py, service/pythonpath/setuptools/tests/test_dist.py, service/pythonpath/setuptools/tests/test_dist_info.py, service/pythonpath/setuptools/tests/test_distutils_adoption.py, service/pythonpath/setuptools/tests/test_easy_install.py, service/pythonpath/setuptools/tests/test_editable_install.py, service/pythonpath/setuptools/tests/test_egg_info.py, service/pythonpath/setuptools/tests/test_extern.py, service/pythonpath/setuptools/tests/test_find_packages.py, service/pythonpath/setuptools/tests/test_find_py_modules.py, service/pythonpath/setuptools/tests/test_glob.py, service/pythonpath/setuptools/tests/test_install_scripts.py, service/pythonpath/setuptools/tests/test_logging.py, service/pythonpath/setuptools/tests/test_manifest.py, service/pythonpath/setuptools/tests/test_namespaces.py, service/pythonpath/setuptools/tests/test_packageindex.py, service/pythonpath/setuptools/tests/test_sandbox.py, service/pythonpath/setuptools/tests/test_sdist.py, service/pythonpath/setuptools/tests/test_setopt.py, service/pythonpath/setuptools/tests/test_setuptools.py, service/pythonpath/setuptools/tests/test_unicode_utils.py, service/pythonpath/setuptools/tests/test_virtualenv.py, service/pythonpath/setuptools/tests/test_warnings.py, service/pythonpath/setuptools/tests/test_wheel.py, service/pythonpath/setuptools/tests/test_windows_wrappers.py, service/pythonpath/setuptools/tests/text.py, service/pythonpath/setuptools/tests/textwrap.py, service/pythonpath/setuptools/unicode_utils.py, service/pythonpath/setuptools/version.py, service/pythonpath/setuptools/warnings.py, service/pythonpath/setuptools/wheel.py, service/pythonpath/setuptools/windows_support.py, service/pythonpath/six-1.17.0.dist-info/LICENSE, service/pythonpath/six-1.17.0.dist-info/METADATA, service/pythonpath/six-1.17.0.dist-info/RECORD, service/pythonpath/six-1.17.0.dist-info/top_level.txt, service/pythonpath/six-1.17.0.dist-info/WHEEL, service/pythonpath/six.py, service/pythonpath/sqlite/__init__.py, service/pythonpath/sqlite/configuration.py, service/pythonpath/sqlite/documenthandler.py, service/pythonpath/sqlite/driver.py, service/pythonpath/sqlite/helper.py, service/pythonpath/sqlite/jdbcdriver/__init__.py, service/pythonpath/sqlite/jdbcdriver/configuration.py, service/pythonpath/sqlite/logger/__init__.py, service/pythonpath/sqlite/logger/dialog/__init__.py, service/pythonpath/sqlite/logger/dialog/loghandler.py, service/pythonpath/sqlite/logger/dialog/logmanager.py, service/pythonpath/sqlite/logger/dialog/logmodel.py, service/pythonpath/sqlite/logger/dialog/logview.py, service/pythonpath/sqlite/logger/logconfig.py, service/pythonpath/sqlite/logger/logcontroller.py, service/pythonpath/sqlite/logger/logger.py, service/pythonpath/sqlite/logger/loggerpool.py, service/pythonpath/sqlite/logger/loghandler.py, service/pythonpath/sqlite/logger/loghelper.py, service/pythonpath/sqlite/logger/logwrapper.py, service/pythonpath/sqlite/option/__init__.py, service/pythonpath/sqlite/option/optionhandler.py, service/pythonpath/sqlite/option/optionmanager.py, service/pythonpath/sqlite/option/optionmodel.py, service/pythonpath/sqlite/option/optionview.py, service/pythonpath/sqlite/options/__init__.py, service/pythonpath/sqlite/options/optionshandler.py, service/pythonpath/sqlite/options/optionsmanager.py, service/pythonpath/sqlite/options/optionsmodel.py, service/pythonpath/sqlite/options/optionsview.py, service/pythonpath/sqlite/sdbc/__init__.py, service/pythonpath/sqlite/sdbc/driver.py, service/pythonpath/sqlite/sdbcx/__init__.py, service/pythonpath/sqlite/sdbcx/driver.py, service/pythonpath/sqlite/unotool/__init__.py, service/pythonpath/sqlite/unotool/unotool.py, service/SQLiteOOo.py
+#Wed Oct 15 16:12:30 CEST 2025
+contents=component-schema.dtd, component-update.dtd, description.xml, description/desc_en.txt, description/desc_fr.txt, dialogs/dialog.dtd, dialogs/LogDialog.xdl, dialogs/LogDialog_en_US.default, dialogs/LogDialog_en_US.properties, dialogs/LogDialog_fr_FR.properties, dialogs/LogWindow.xdl, dialogs/LogWindow_en_US.default, dialogs/LogWindow_en_US.properties, dialogs/LogWindow_fr_FR.properties, dialogs/OptionDialog.xdl, dialogs/OptionDialog_en_US.default, dialogs/OptionDialog_en_US.properties, dialogs/OptionDialog_fr_FR.properties, dialogs/OptionsDialog.xdl, dialogs/OptionsDialog_en_US.default, dialogs/OptionsDialog_en_US.properties, dialogs/OptionsDialog_fr_FR.properties, Drivers.xcu, img/SQLiteOOo.svg, META-INF/manifest.xml, Options.xcs, Options.xcu, OptionsDialog.xcu, package.components, registration/TermsOfUse_en.md, registration/TermsOfUse_fr.md, requirements.txt, resource/Driver_en_US.default, resource/Driver_en_US.properties, resource/Driver_fr_FR.properties, resource/Logger_en_US.default, resource/Logger_en_US.properties, resource/Logger_fr_FR.properties, service/Driver.py, service/OptionsHandler.py, service/pythonpath/_distutils_hack/__init__.py, service/pythonpath/_distutils_hack/override.py, service/pythonpath/distutils-precedence.pth, service/pythonpath/packaging-25.0.dist-info/licenses/LICENSE, service/pythonpath/packaging-25.0.dist-info/licenses/LICENSE.APACHE, service/pythonpath/packaging-25.0.dist-info/licenses/LICENSE.BSD, service/pythonpath/packaging-25.0.dist-info/METADATA, service/pythonpath/packaging-25.0.dist-info/RECORD, service/pythonpath/packaging-25.0.dist-info/WHEEL, service/pythonpath/packaging/__init__.py, service/pythonpath/packaging/_elffile.py, service/pythonpath/packaging/_manylinux.py, service/pythonpath/packaging/_musllinux.py, service/pythonpath/packaging/_parser.py, service/pythonpath/packaging/_structures.py, service/pythonpath/packaging/_tokenizer.py, service/pythonpath/packaging/licenses/__init__.py, service/pythonpath/packaging/licenses/_spdx.py, service/pythonpath/packaging/markers.py, service/pythonpath/packaging/metadata.py, service/pythonpath/packaging/py.typed, service/pythonpath/packaging/requirements.py, service/pythonpath/packaging/specifiers.py, service/pythonpath/packaging/tags.py, service/pythonpath/packaging/utils.py, service/pythonpath/packaging/version.py, service/pythonpath/pkg_resources/__init__.py, service/pythonpath/pkg_resources/api_tests.txt, service/pythonpath/pkg_resources/py.typed, service/pythonpath/pkg_resources/tests/__init__.py, service/pythonpath/pkg_resources/tests/data/my-test-package-source/setup.cfg, service/pythonpath/pkg_resources/tests/data/my-test-package-source/setup.py, service/pythonpath/pkg_resources/tests/data/my-test-package-zip/my-test-package.zip, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/dependency_links.txt, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/PKG-INFO, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/SOURCES.txt, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/top_level.txt, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/zip-safe, service/pythonpath/pkg_resources/tests/data/my-test-package_zipped-egg/my_test_package-1.0-py3.7.egg, service/pythonpath/pkg_resources/tests/test_find_distributions.py, service/pythonpath/pkg_resources/tests/test_integration_zope_interface.py, service/pythonpath/pkg_resources/tests/test_markers.py, service/pythonpath/pkg_resources/tests/test_pkg_resources.py, service/pythonpath/pkg_resources/tests/test_resources.py, service/pythonpath/pkg_resources/tests/test_working_set.py, service/pythonpath/setuptools-75.3.2.dist-info/entry_points.txt, service/pythonpath/setuptools-75.3.2.dist-info/LICENSE, service/pythonpath/setuptools-75.3.2.dist-info/METADATA, service/pythonpath/setuptools-75.3.2.dist-info/RECORD, service/pythonpath/setuptools-75.3.2.dist-info/top_level.txt, service/pythonpath/setuptools-75.3.2.dist-info/WHEEL, service/pythonpath/setuptools/__init__.py, service/pythonpath/setuptools/_core_metadata.py, service/pythonpath/setuptools/_distutils/__init__.py, service/pythonpath/setuptools/_distutils/_log.py, service/pythonpath/setuptools/_distutils/_macos_compat.py, service/pythonpath/setuptools/_distutils/_modified.py, service/pythonpath/setuptools/_distutils/_msvccompiler.py, service/pythonpath/setuptools/_distutils/archive_util.py, service/pythonpath/setuptools/_distutils/ccompiler.py, service/pythonpath/setuptools/_distutils/cmd.py, service/pythonpath/setuptools/_distutils/command/__init__.py, service/pythonpath/setuptools/_distutils/command/_framework_compat.py, service/pythonpath/setuptools/_distutils/command/bdist.py, service/pythonpath/setuptools/_distutils/command/bdist_dumb.py, service/pythonpath/setuptools/_distutils/command/bdist_rpm.py, service/pythonpath/setuptools/_distutils/command/build.py, service/pythonpath/setuptools/_distutils/command/build_clib.py, service/pythonpath/setuptools/_distutils/command/build_ext.py, service/pythonpath/setuptools/_distutils/command/build_py.py, service/pythonpath/setuptools/_distutils/command/build_scripts.py, service/pythonpath/setuptools/_distutils/command/check.py, service/pythonpath/setuptools/_distutils/command/clean.py, service/pythonpath/setuptools/_distutils/command/config.py, service/pythonpath/setuptools/_distutils/command/install.py, service/pythonpath/setuptools/_distutils/command/install_data.py, service/pythonpath/setuptools/_distutils/command/install_egg_info.py, service/pythonpath/setuptools/_distutils/command/install_headers.py, service/pythonpath/setuptools/_distutils/command/install_lib.py, service/pythonpath/setuptools/_distutils/command/install_scripts.py, service/pythonpath/setuptools/_distutils/command/sdist.py, service/pythonpath/setuptools/_distutils/compat/__init__.py, service/pythonpath/setuptools/_distutils/compat/py38.py, service/pythonpath/setuptools/_distutils/compat/py39.py, service/pythonpath/setuptools/_distutils/core.py, service/pythonpath/setuptools/_distutils/cygwinccompiler.py, service/pythonpath/setuptools/_distutils/debug.py, service/pythonpath/setuptools/_distutils/dep_util.py, service/pythonpath/setuptools/_distutils/dir_util.py, service/pythonpath/setuptools/_distutils/dist.py, service/pythonpath/setuptools/_distutils/errors.py, service/pythonpath/setuptools/_distutils/extension.py, service/pythonpath/setuptools/_distutils/fancy_getopt.py, service/pythonpath/setuptools/_distutils/file_util.py, service/pythonpath/setuptools/_distutils/filelist.py, service/pythonpath/setuptools/_distutils/log.py, service/pythonpath/setuptools/_distutils/spawn.py, service/pythonpath/setuptools/_distutils/sysconfig.py, service/pythonpath/setuptools/_distutils/tests/__init__.py, service/pythonpath/setuptools/_distutils/tests/compat/__init__.py, service/pythonpath/setuptools/_distutils/tests/compat/py38.py, service/pythonpath/setuptools/_distutils/tests/support.py, service/pythonpath/setuptools/_distutils/tests/test_archive_util.py, service/pythonpath/setuptools/_distutils/tests/test_bdist.py, service/pythonpath/setuptools/_distutils/tests/test_bdist_dumb.py, service/pythonpath/setuptools/_distutils/tests/test_bdist_rpm.py, service/pythonpath/setuptools/_distutils/tests/test_build.py, service/pythonpath/setuptools/_distutils/tests/test_build_clib.py, service/pythonpath/setuptools/_distutils/tests/test_build_ext.py, service/pythonpath/setuptools/_distutils/tests/test_build_py.py, service/pythonpath/setuptools/_distutils/tests/test_build_scripts.py, service/pythonpath/setuptools/_distutils/tests/test_ccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_check.py, service/pythonpath/setuptools/_distutils/tests/test_clean.py, service/pythonpath/setuptools/_distutils/tests/test_cmd.py, service/pythonpath/setuptools/_distutils/tests/test_config_cmd.py, service/pythonpath/setuptools/_distutils/tests/test_core.py, service/pythonpath/setuptools/_distutils/tests/test_cygwinccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_dir_util.py, service/pythonpath/setuptools/_distutils/tests/test_dist.py, service/pythonpath/setuptools/_distutils/tests/test_extension.py, service/pythonpath/setuptools/_distutils/tests/test_file_util.py, service/pythonpath/setuptools/_distutils/tests/test_filelist.py, service/pythonpath/setuptools/_distutils/tests/test_install.py, service/pythonpath/setuptools/_distutils/tests/test_install_data.py, service/pythonpath/setuptools/_distutils/tests/test_install_headers.py, service/pythonpath/setuptools/_distutils/tests/test_install_lib.py, service/pythonpath/setuptools/_distutils/tests/test_install_scripts.py, service/pythonpath/setuptools/_distutils/tests/test_log.py, service/pythonpath/setuptools/_distutils/tests/test_mingwccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_modified.py, service/pythonpath/setuptools/_distutils/tests/test_msvccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_sdist.py, service/pythonpath/setuptools/_distutils/tests/test_spawn.py, service/pythonpath/setuptools/_distutils/tests/test_sysconfig.py, service/pythonpath/setuptools/_distutils/tests/test_text_file.py, service/pythonpath/setuptools/_distutils/tests/test_unixccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_util.py, service/pythonpath/setuptools/_distutils/tests/test_version.py, service/pythonpath/setuptools/_distutils/tests/test_versionpredicate.py, service/pythonpath/setuptools/_distutils/tests/unix_compat.py, service/pythonpath/setuptools/_distutils/text_file.py, service/pythonpath/setuptools/_distutils/unixccompiler.py, service/pythonpath/setuptools/_distutils/util.py, service/pythonpath/setuptools/_distutils/version.py, service/pythonpath/setuptools/_distutils/versionpredicate.py, service/pythonpath/setuptools/_distutils/zosccompiler.py, service/pythonpath/setuptools/_entry_points.py, service/pythonpath/setuptools/_imp.py, service/pythonpath/setuptools/_importlib.py, service/pythonpath/setuptools/_itertools.py, service/pythonpath/setuptools/_normalization.py, service/pythonpath/setuptools/_path.py, service/pythonpath/setuptools/_reqs.py, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/METADATA, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/RECORD, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/autocommand/__init__.py, service/pythonpath/setuptools/_vendor/autocommand/autoasync.py, service/pythonpath/setuptools/_vendor/autocommand/autocommand.py, service/pythonpath/setuptools/_vendor/autocommand/automain.py, service/pythonpath/setuptools/_vendor/autocommand/autoparse.py, service/pythonpath/setuptools/_vendor/autocommand/errors.py, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/backports/__init__.py, service/pythonpath/setuptools/_vendor/backports/tarfile/__init__.py, service/pythonpath/setuptools/_vendor/backports/tarfile/__main__.py, service/pythonpath/setuptools/_vendor/backports/tarfile/compat/__init__.py, service/pythonpath/setuptools/_vendor/backports/tarfile/compat/py38.py, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/importlib_metadata/__init__.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_adapters.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_collections.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_compat.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_functools.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_itertools.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_meta.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_text.py, service/pythonpath/setuptools/_vendor/importlib_metadata/compat/__init__.py, service/pythonpath/setuptools/_vendor/importlib_metadata/compat/py311.py, service/pythonpath/setuptools/_vendor/importlib_metadata/compat/py39.py, service/pythonpath/setuptools/_vendor/importlib_metadata/diagnose.py, service/pythonpath/setuptools/_vendor/importlib_metadata/py.typed, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/importlib_resources/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/_adapters.py, service/pythonpath/setuptools/_vendor/importlib_resources/_common.py, service/pythonpath/setuptools/_vendor/importlib_resources/_itertools.py, service/pythonpath/setuptools/_vendor/importlib_resources/abc.py, service/pythonpath/setuptools/_vendor/importlib_resources/compat/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/compat/py38.py, service/pythonpath/setuptools/_vendor/importlib_resources/compat/py39.py, service/pythonpath/setuptools/_vendor/importlib_resources/functional.py, service/pythonpath/setuptools/_vendor/importlib_resources/future/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/future/adapters.py, service/pythonpath/setuptools/_vendor/importlib_resources/py.typed, service/pythonpath/setuptools/_vendor/importlib_resources/readers.py, service/pythonpath/setuptools/_vendor/importlib_resources/simple.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/_path.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/compat/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/compat/py312.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/compat/py39.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/binary.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/binary.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/utf-16.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/utf-8.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/one/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/one/resource1.txt, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/subdirectory/subsubdir/resource.txt, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/two/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/two/resource2.txt, service/pythonpath/setuptools/_vendor/importlib_resources/tests/namespacedata01/binary.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/namespacedata01/subdirectory/binary.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/namespacedata01/utf-16.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/namespacedata01/utf-8.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_compatibilty_files.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_contents.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_custom.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_files.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_functional.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_open.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_path.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_read.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_reader.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_resource.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/util.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/zip.py, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/inflect/__init__.py, service/pythonpath/setuptools/_vendor/inflect/compat/__init__.py, service/pythonpath/setuptools/_vendor/inflect/compat/py38.py, service/pythonpath/setuptools/_vendor/inflect/py.typed, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/jaraco/collections/__init__.py, service/pythonpath/setuptools/_vendor/jaraco/collections/py.typed, service/pythonpath/setuptools/_vendor/jaraco/context.py, service/pythonpath/setuptools/_vendor/jaraco/functools/__init__.py, service/pythonpath/setuptools/_vendor/jaraco/functools/__init__.pyi, service/pythonpath/setuptools/_vendor/jaraco/functools/py.typed, service/pythonpath/setuptools/_vendor/jaraco/text/__init__.py, service/pythonpath/setuptools/_vendor/jaraco/text/layouts.py, service/pythonpath/setuptools/_vendor/jaraco/text/Lorem ipsum.txt, service/pythonpath/setuptools/_vendor/jaraco/text/show-newlines.py, service/pythonpath/setuptools/_vendor/jaraco/text/strip-prefix.py, service/pythonpath/setuptools/_vendor/jaraco/text/to-dvorak.py, service/pythonpath/setuptools/_vendor/jaraco/text/to-qwerty.py, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/more_itertools/__init__.py, service/pythonpath/setuptools/_vendor/more_itertools/__init__.pyi, service/pythonpath/setuptools/_vendor/more_itertools/more.py, service/pythonpath/setuptools/_vendor/more_itertools/more.pyi, service/pythonpath/setuptools/_vendor/more_itertools/py.typed, service/pythonpath/setuptools/_vendor/more_itertools/recipes.py, service/pythonpath/setuptools/_vendor/more_itertools/recipes.pyi, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/LICENSE.APACHE, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/LICENSE.BSD, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/packaging/__init__.py, service/pythonpath/setuptools/_vendor/packaging/_elffile.py, service/pythonpath/setuptools/_vendor/packaging/_manylinux.py, service/pythonpath/setuptools/_vendor/packaging/_musllinux.py, service/pythonpath/setuptools/_vendor/packaging/_parser.py, service/pythonpath/setuptools/_vendor/packaging/_structures.py, service/pythonpath/setuptools/_vendor/packaging/_tokenizer.py, service/pythonpath/setuptools/_vendor/packaging/markers.py, service/pythonpath/setuptools/_vendor/packaging/metadata.py, service/pythonpath/setuptools/_vendor/packaging/py.typed, service/pythonpath/setuptools/_vendor/packaging/requirements.py, service/pythonpath/setuptools/_vendor/packaging/specifiers.py, service/pythonpath/setuptools/_vendor/packaging/tags.py, service/pythonpath/setuptools/_vendor/packaging/utils.py, service/pythonpath/setuptools/_vendor/packaging/version.py, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/licenses/LICENSE, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/METADATA, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/RECORD, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/platformdirs/__init__.py, service/pythonpath/setuptools/_vendor/platformdirs/__main__.py, service/pythonpath/setuptools/_vendor/platformdirs/android.py, service/pythonpath/setuptools/_vendor/platformdirs/api.py, service/pythonpath/setuptools/_vendor/platformdirs/macos.py, service/pythonpath/setuptools/_vendor/platformdirs/py.typed, service/pythonpath/setuptools/_vendor/platformdirs/unix.py, service/pythonpath/setuptools/_vendor/platformdirs/version.py, service/pythonpath/setuptools/_vendor/platformdirs/windows.py, service/pythonpath/setuptools/_vendor/ruff.toml, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/tomli/__init__.py, service/pythonpath/setuptools/_vendor/tomli/_parser.py, service/pythonpath/setuptools/_vendor/tomli/_re.py, service/pythonpath/setuptools/_vendor/tomli/_types.py, service/pythonpath/setuptools/_vendor/tomli/py.typed, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/entry_points.txt, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/typeguard/__init__.py, service/pythonpath/setuptools/_vendor/typeguard/_checkers.py, service/pythonpath/setuptools/_vendor/typeguard/_config.py, service/pythonpath/setuptools/_vendor/typeguard/_decorators.py, service/pythonpath/setuptools/_vendor/typeguard/_exceptions.py, service/pythonpath/setuptools/_vendor/typeguard/_functions.py, service/pythonpath/setuptools/_vendor/typeguard/_importhook.py, service/pythonpath/setuptools/_vendor/typeguard/_memo.py, service/pythonpath/setuptools/_vendor/typeguard/_pytest_plugin.py, service/pythonpath/setuptools/_vendor/typeguard/_suppression.py, service/pythonpath/setuptools/_vendor/typeguard/_transformer.py, service/pythonpath/setuptools/_vendor/typeguard/_union_transformer.py, service/pythonpath/setuptools/_vendor/typeguard/_utils.py, service/pythonpath/setuptools/_vendor/typeguard/py.typed, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/METADATA, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/RECORD, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/typing_extensions.py, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/entry_points.txt, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/LICENSE.txt, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/wheel/__init__.py, service/pythonpath/setuptools/_vendor/wheel/__main__.py, service/pythonpath/setuptools/_vendor/wheel/_setuptools_logging.py, service/pythonpath/setuptools/_vendor/wheel/bdist_wheel.py, service/pythonpath/setuptools/_vendor/wheel/cli/__init__.py, service/pythonpath/setuptools/_vendor/wheel/cli/convert.py, service/pythonpath/setuptools/_vendor/wheel/cli/pack.py, service/pythonpath/setuptools/_vendor/wheel/cli/tags.py, service/pythonpath/setuptools/_vendor/wheel/cli/unpack.py, service/pythonpath/setuptools/_vendor/wheel/macosx_libfile.py, service/pythonpath/setuptools/_vendor/wheel/metadata.py, service/pythonpath/setuptools/_vendor/wheel/util.py, service/pythonpath/setuptools/_vendor/wheel/vendored/__init__.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/__init__.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_elffile.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_manylinux.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_musllinux.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_parser.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_structures.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_tokenizer.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/markers.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/requirements.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/specifiers.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/tags.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/utils.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/version.py, service/pythonpath/setuptools/_vendor/wheel/vendored/vendor.txt, service/pythonpath/setuptools/_vendor/wheel/wheelfile.py, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/METADATA, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/RECORD, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/zipp/__init__.py, service/pythonpath/setuptools/_vendor/zipp/compat/__init__.py, service/pythonpath/setuptools/_vendor/zipp/compat/py310.py, service/pythonpath/setuptools/_vendor/zipp/glob.py, service/pythonpath/setuptools/archive_util.py, service/pythonpath/setuptools/build_meta.py, service/pythonpath/setuptools/cli-32.exe, service/pythonpath/setuptools/cli-64.exe, service/pythonpath/setuptools/cli-arm64.exe, service/pythonpath/setuptools/cli.exe, service/pythonpath/setuptools/command/__init__.py, service/pythonpath/setuptools/command/_requirestxt.py, service/pythonpath/setuptools/command/alias.py, service/pythonpath/setuptools/command/bdist_egg.py, service/pythonpath/setuptools/command/bdist_rpm.py, service/pythonpath/setuptools/command/bdist_wheel.py, service/pythonpath/setuptools/command/build.py, service/pythonpath/setuptools/command/build_clib.py, service/pythonpath/setuptools/command/build_ext.py, service/pythonpath/setuptools/command/build_py.py, service/pythonpath/setuptools/command/develop.py, service/pythonpath/setuptools/command/dist_info.py, service/pythonpath/setuptools/command/easy_install.py, service/pythonpath/setuptools/command/editable_wheel.py, service/pythonpath/setuptools/command/egg_info.py, service/pythonpath/setuptools/command/install.py, service/pythonpath/setuptools/command/install_egg_info.py, service/pythonpath/setuptools/command/install_lib.py, service/pythonpath/setuptools/command/install_scripts.py, service/pythonpath/setuptools/command/launcher manifest.xml, service/pythonpath/setuptools/command/rotate.py, service/pythonpath/setuptools/command/saveopts.py, service/pythonpath/setuptools/command/sdist.py, service/pythonpath/setuptools/command/setopt.py, service/pythonpath/setuptools/command/test.py, service/pythonpath/setuptools/compat/__init__.py, service/pythonpath/setuptools/compat/py310.py, service/pythonpath/setuptools/compat/py311.py, service/pythonpath/setuptools/compat/py312.py, service/pythonpath/setuptools/compat/py39.py, service/pythonpath/setuptools/config/__init__.py, service/pythonpath/setuptools/config/_apply_pyprojecttoml.py, service/pythonpath/setuptools/config/_validate_pyproject/__init__.py, service/pythonpath/setuptools/config/_validate_pyproject/error_reporting.py, service/pythonpath/setuptools/config/_validate_pyproject/extra_validations.py, service/pythonpath/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py, service/pythonpath/setuptools/config/_validate_pyproject/fastjsonschema_validations.py, service/pythonpath/setuptools/config/_validate_pyproject/formats.py, service/pythonpath/setuptools/config/_validate_pyproject/NOTICE, service/pythonpath/setuptools/config/distutils.schema.json, service/pythonpath/setuptools/config/expand.py, service/pythonpath/setuptools/config/NOTICE, service/pythonpath/setuptools/config/pyprojecttoml.py, service/pythonpath/setuptools/config/setupcfg.py, service/pythonpath/setuptools/config/setuptools.schema.json, service/pythonpath/setuptools/depends.py, service/pythonpath/setuptools/discovery.py, service/pythonpath/setuptools/dist.py, service/pythonpath/setuptools/errors.py, service/pythonpath/setuptools/extension.py, service/pythonpath/setuptools/glob.py, service/pythonpath/setuptools/gui-32.exe, service/pythonpath/setuptools/gui-64.exe, service/pythonpath/setuptools/gui-arm64.exe, service/pythonpath/setuptools/gui.exe, service/pythonpath/setuptools/installer.py, service/pythonpath/setuptools/launch.py, service/pythonpath/setuptools/logging.py, service/pythonpath/setuptools/modified.py, service/pythonpath/setuptools/monkey.py, service/pythonpath/setuptools/msvc.py, service/pythonpath/setuptools/namespaces.py, service/pythonpath/setuptools/package_index.py, service/pythonpath/setuptools/sandbox.py, service/pythonpath/setuptools/script (dev).tmpl, service/pythonpath/setuptools/script.tmpl, service/pythonpath/setuptools/tests/__init__.py, service/pythonpath/setuptools/tests/compat/__init__.py, service/pythonpath/setuptools/tests/compat/py39.py, service/pythonpath/setuptools/tests/config/__init__.py, service/pythonpath/setuptools/tests/config/downloads/__init__.py, service/pythonpath/setuptools/tests/config/downloads/preload.py, service/pythonpath/setuptools/tests/config/setupcfg_examples.txt, service/pythonpath/setuptools/tests/config/test_apply_pyprojecttoml.py, service/pythonpath/setuptools/tests/config/test_expand.py, service/pythonpath/setuptools/tests/config/test_pyprojecttoml.py, service/pythonpath/setuptools/tests/config/test_pyprojecttoml_dynamic_deps.py, service/pythonpath/setuptools/tests/config/test_setupcfg.py, service/pythonpath/setuptools/tests/contexts.py, service/pythonpath/setuptools/tests/environment.py, service/pythonpath/setuptools/tests/fixtures.py, service/pythonpath/setuptools/tests/indexes/test_links_priority/external.html, service/pythonpath/setuptools/tests/indexes/test_links_priority/simple/foobar/index.html, service/pythonpath/setuptools/tests/integration/__init__.py, service/pythonpath/setuptools/tests/integration/helpers.py, service/pythonpath/setuptools/tests/integration/test_pip_install_sdist.py, service/pythonpath/setuptools/tests/mod_with_constant.py, service/pythonpath/setuptools/tests/namespaces.py, service/pythonpath/setuptools/tests/script-with-bom.py, service/pythonpath/setuptools/tests/server.py, service/pythonpath/setuptools/tests/test_archive_util.py, service/pythonpath/setuptools/tests/test_bdist_deprecations.py, service/pythonpath/setuptools/tests/test_bdist_egg.py, service/pythonpath/setuptools/tests/test_bdist_wheel.py, service/pythonpath/setuptools/tests/test_build.py, service/pythonpath/setuptools/tests/test_build_clib.py, service/pythonpath/setuptools/tests/test_build_ext.py, service/pythonpath/setuptools/tests/test_build_meta.py, service/pythonpath/setuptools/tests/test_build_py.py, service/pythonpath/setuptools/tests/test_config_discovery.py, service/pythonpath/setuptools/tests/test_core_metadata.py, service/pythonpath/setuptools/tests/test_depends.py, service/pythonpath/setuptools/tests/test_develop.py, service/pythonpath/setuptools/tests/test_dist.py, service/pythonpath/setuptools/tests/test_dist_info.py, service/pythonpath/setuptools/tests/test_distutils_adoption.py, service/pythonpath/setuptools/tests/test_easy_install.py, service/pythonpath/setuptools/tests/test_editable_install.py, service/pythonpath/setuptools/tests/test_egg_info.py, service/pythonpath/setuptools/tests/test_extern.py, service/pythonpath/setuptools/tests/test_find_packages.py, service/pythonpath/setuptools/tests/test_find_py_modules.py, service/pythonpath/setuptools/tests/test_glob.py, service/pythonpath/setuptools/tests/test_install_scripts.py, service/pythonpath/setuptools/tests/test_logging.py, service/pythonpath/setuptools/tests/test_manifest.py, service/pythonpath/setuptools/tests/test_namespaces.py, service/pythonpath/setuptools/tests/test_packageindex.py, service/pythonpath/setuptools/tests/test_sandbox.py, service/pythonpath/setuptools/tests/test_sdist.py, service/pythonpath/setuptools/tests/test_setopt.py, service/pythonpath/setuptools/tests/test_setuptools.py, service/pythonpath/setuptools/tests/test_unicode_utils.py, service/pythonpath/setuptools/tests/test_virtualenv.py, service/pythonpath/setuptools/tests/test_warnings.py, service/pythonpath/setuptools/tests/test_wheel.py, service/pythonpath/setuptools/tests/test_windows_wrappers.py, service/pythonpath/setuptools/tests/text.py, service/pythonpath/setuptools/tests/textwrap.py, service/pythonpath/setuptools/unicode_utils.py, service/pythonpath/setuptools/version.py, service/pythonpath/setuptools/warnings.py, service/pythonpath/setuptools/wheel.py, service/pythonpath/setuptools/windows_support.py, service/pythonpath/six-1.17.0.dist-info/LICENSE, service/pythonpath/six-1.17.0.dist-info/METADATA, service/pythonpath/six-1.17.0.dist-info/RECORD, service/pythonpath/six-1.17.0.dist-info/top_level.txt, service/pythonpath/six-1.17.0.dist-info/WHEEL, service/pythonpath/six.py, service/pythonpath/sqlite/__init__.py, service/pythonpath/sqlite/configuration.py, service/pythonpath/sqlite/documenthandler.py, service/pythonpath/sqlite/driver.py, service/pythonpath/sqlite/helper.py, service/pythonpath/sqlite/jdbcdriver/__init__.py, service/pythonpath/sqlite/jdbcdriver/configuration.py, service/pythonpath/sqlite/jdbcdriver/jdbctool.py, service/pythonpath/sqlite/logger/__init__.py, service/pythonpath/sqlite/logger/dialog/__init__.py, service/pythonpath/sqlite/logger/dialog/loghandler.py, service/pythonpath/sqlite/logger/dialog/logmanager.py, service/pythonpath/sqlite/logger/dialog/logmodel.py, service/pythonpath/sqlite/logger/dialog/logview.py, service/pythonpath/sqlite/logger/logconfig.py, service/pythonpath/sqlite/logger/logcontroller.py, service/pythonpath/sqlite/logger/logger.py, service/pythonpath/sqlite/logger/loggerpool.py, service/pythonpath/sqlite/logger/loghandler.py, service/pythonpath/sqlite/logger/loghelper.py, service/pythonpath/sqlite/logger/logwrapper.py, service/pythonpath/sqlite/options/__init__.py, service/pythonpath/sqlite/options/options/__init__.py, service/pythonpath/sqlite/options/options/optionshandler.py, service/pythonpath/sqlite/options/options/optionsmanager.py, service/pythonpath/sqlite/options/options/optionsmodel.py, service/pythonpath/sqlite/options/options/optionsview.py, service/pythonpath/sqlite/options/optionshandler.py, service/pythonpath/sqlite/options/optionsmanager.py, service/pythonpath/sqlite/options/optionsmodel.py, service/pythonpath/sqlite/options/optionsview.py, service/pythonpath/sqlite/sdbc/__init__.py, service/pythonpath/sqlite/sdbc/driver.py, service/pythonpath/sqlite/sdbcx/__init__.py, service/pythonpath/sqlite/sdbcx/driver.py, service/pythonpath/sqlite/unotool/__init__.py, service/pythonpath/sqlite/unotool/statusindicator.py, service/pythonpath/sqlite/unotool/taskevent.py, service/pythonpath/sqlite/unotool/unotool.py, service/SQLiteOOo.py
diff --git a/source/SQLiteOOo/service/OptionsHandler.py b/source/SQLiteOOo/service/OptionsHandler.py
index 1b270eb1..102ae1dc 100644
--- a/source/SQLiteOOo/service/OptionsHandler.py
+++ b/source/SQLiteOOo/service/OptionsHandler.py
@@ -78,6 +78,7 @@ def callHandlerMethod(self, window, event, method):
handled = True
return handled
except Exception as e:
+ print("OptionsHandler.callHandlerMethod() ERROR: %s" % traceback.format_exc())
self._logger.logprb(SEVERE, 'OptionsHandler', 'callHandlerMethod', 301, e, traceback.format_exc())
def getSupportedMethodNames(self):
diff --git a/source/SQLiteOOo/service/pythonpath/sqlite/option b/source/SQLiteOOo/service/pythonpath/sqlite/option
deleted file mode 120000
index 322f3aa0..00000000
--- a/source/SQLiteOOo/service/pythonpath/sqlite/option
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../uno/lib/uno/options/jdbc
\ No newline at end of file
diff --git a/source/SQLiteOOo/types.rdb b/source/SQLiteOOo/types.rdb
index 1ac3de27..cbaf2415 100644
Binary files a/source/SQLiteOOo/types.rdb and b/source/SQLiteOOo/types.rdb differ
diff --git a/uno/.gitrepo b/uno/.gitrepo
index c8385146..3442600a 100644
--- a/uno/.gitrepo
+++ b/uno/.gitrepo
@@ -6,7 +6,7 @@
[subrepo]
remote = https://github.com/prrvchr/uno.git
branch = main
- commit = 66e9aea6994add573be9c1556b90c87449543a11
- parent = d90335647633a232bccd30cb806b65cec5ec58ec
+ commit = c1a100b6f093ceef9aef387d4e88660e70568d3f
+ parent = 258f73d6727186c0fb2258064e6204c9a49bd481
method = merge
cmdver = 0.4.9
diff --git a/uno/dialog/card/OptionDialog.xdl b/uno/dialog/card/OptionDialog.xdl
new file mode 100644
index 00000000..71b21e9d
--- /dev/null
+++ b/uno/dialog/card/OptionDialog.xdl
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uno/dialog/card/OptionsDialog.xdl b/uno/dialog/card/OptionsDialog.xdl
index 5da50845..573f84f8 100644
--- a/uno/dialog/card/OptionsDialog.xdl
+++ b/uno/dialog/card/OptionsDialog.xdl
@@ -24,20 +24,14 @@
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
+
-
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/uno/dialog/ucb/DialogStrings_en_US.default b/uno/dialog/card/OptionsDialog_en_US.default
similarity index 100%
rename from uno/dialog/ucb/DialogStrings_en_US.default
rename to uno/dialog/card/OptionsDialog_en_US.default
diff --git a/uno/dialog/card/OptionsDialog_en_US.properties b/uno/dialog/card/OptionsDialog_en_US.properties
new file mode 100644
index 00000000..f656e782
--- /dev/null
+++ b/uno/dialog/card/OptionsDialog_en_US.properties
@@ -0,0 +1,8 @@
+OptionsDialog.HelpText=
+OptionsDialog.Title=
+OptionsDialog.Label1.HelpText=
+OptionsDialog.Label1.Label=The changes will take effect after restarting LibreOffice...
+OptionsDialog.Hyperlink1.HelpText=
+OptionsDialog.Hyperlink1.Label=You must install the Java Instrumentation Agent to use jdbcDriverOOO...
+OptionsDialog.Hyperlink1.Url=https://prrvchr.github.io/jdbcDriverOOo/#how-to-install-java-instrumentation
+
diff --git a/uno/dialog/card/OptionsDialog_fr_FR.properties b/uno/dialog/card/OptionsDialog_fr_FR.properties
new file mode 100644
index 00000000..9fcdca9f
--- /dev/null
+++ b/uno/dialog/card/OptionsDialog_fr_FR.properties
@@ -0,0 +1,8 @@
+OptionsDialog.HelpText=
+OptionsDialog.Title=
+OptionsDialog.Label1.HelpText=
+OptionsDialog.Label1.Label=Les modifications prendront effet apr\u00e8s le red\u00e9marrage de LibreOffice...
+OptionsDialog.Hyperlink1.HelpText=
+OptionsDialog.Hyperlink1.Label=Veuillez installer l'instrumentation Java pour utiliser jdbcDriverOOO...
+OptionsDialog.Hyperlink1.Url=https://prrvchr.github.io/jdbcDriverOOo/README_fr#comment-installer-linstrumentation-java
+
diff --git a/uno/dialog/dialog.dtd b/uno/dialog/dialog.dtd
new file mode 100644
index 00000000..7290b8d2
--- /dev/null
+++ b/uno/dialog/dialog.dtd
@@ -0,0 +1,426 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uno/dialog/embedded/OptionsDialog.xdl b/uno/dialog/embedded/OptionsDialog.xdl
index 3800155d..0f861bb4 100644
--- a/uno/dialog/embedded/OptionsDialog.xdl
+++ b/uno/dialog/embedded/OptionsDialog.xdl
@@ -1,4 +1,29 @@
+
@@ -7,5 +32,8 @@
+
+
+
diff --git a/uno/dialog/embedded/OptionsDialog_en_US.properties b/uno/dialog/embedded/OptionsDialog_en_US.properties
index c078b893..18ef2e71 100644
--- a/uno/dialog/embedded/OptionsDialog_en_US.properties
+++ b/uno/dialog/embedded/OptionsDialog_en_US.properties
@@ -4,3 +4,9 @@ OptionsDialog.Label1.HelpText=
OptionsDialog.Label1.Label=Driver version:
OptionsDialog.Label2.HelpText=
OptionsDialog.Label2.Label=
+OptionsDialog.Label3.HelpText=You have made changes. Restart LibreOffice for the changes to take effect
+OptionsDialog.Label3.Label=Changes will take effect after restarting LibreOffice...
+OptionsDialog.Hyperlink1.HelpText=
+OptionsDialog.Hyperlink1.Label=You must install the Java Instrumentation Agent to use jdbcDriverOOO...
+OptionsDialog.Hyperlink1.Url=https://prrvchr.github.io/jdbcDriverOOo/#how-to-install-java-instrumentation
+
diff --git a/uno/dialog/embedded/OptionsDialog_fr_FR.properties b/uno/dialog/embedded/OptionsDialog_fr_FR.properties
index 1b4de163..cc8866fc 100644
--- a/uno/dialog/embedded/OptionsDialog_fr_FR.properties
+++ b/uno/dialog/embedded/OptionsDialog_fr_FR.properties
@@ -4,3 +4,9 @@ OptionsDialog.Label1.HelpText=
OptionsDialog.Label1.Label=Version du pilote:
OptionsDialog.Label2.HelpText=
OptionsDialog.Label2.Label=
+OptionsDialog.Label3.HelpText=Vous avez effectu des modifications. Redmarrez LibreOffice pour que les modifications soient prises en compte
+OptionsDialog.Label3.Label=Les modifications prendront effet aprs le redmarrage de LibreOffice...
+OptionsDialog.Hyperlink1.HelpText=
+OptionsDialog.Hyperlink1.Label=Veuillez installer l'instrumentation Java pour utiliser jdbcDriverOOO...
+OptionsDialog.Hyperlink1.Url=https://prrvchr.github.io/jdbcDriverOOo/README_fr#comment-installer-linstrumentation-java
+
diff --git a/uno/dialog/grid/GridWindow.xdl b/uno/dialog/grid/GridWindow.xdl
index c1bb2d88..f0a2bba6 100644
--- a/uno/dialog/grid/GridWindow.xdl
+++ b/uno/dialog/grid/GridWindow.xdl
@@ -31,8 +31,9 @@
-
+
+
diff --git a/uno/dialog/grid/GridWindow_en_US.properties b/uno/dialog/grid/GridWindow_en_US.properties
index 9c3c60b4..68ffd080 100644
--- a/uno/dialog/grid/GridWindow_en_US.properties
+++ b/uno/dialog/grid/GridWindow_en_US.properties
@@ -5,4 +5,4 @@ GridWindow.CommandButton1.Label=+
GridWindow.Label1.HelpText=Columns to display
GridWindow.Label1.Label=Show columns:
GridWindow.ListBox1.HelpText=Define the name of the columns to display
-GridWindow.ListBox1.Text=
+
diff --git a/uno/dialog/grid/GridWindow_fr_FR.properties b/uno/dialog/grid/GridWindow_fr_FR.properties
index 5c5089cc..a676b2d2 100644
--- a/uno/dialog/grid/GridWindow_fr_FR.properties
+++ b/uno/dialog/grid/GridWindow_fr_FR.properties
@@ -5,4 +5,4 @@ GridWindow.CommandButton1.Label=+
GridWindow.Label1.HelpText=Colonnes \u00e0 afficher
GridWindow.Label1.Label=Afficher les colonnes:
GridWindow.ListBox1.HelpText=D\u00e9finir le nom des colonnes \u00e0 afficher
-GridWindow.ListBox1.Text=
+
diff --git a/uno/dialog/jdbc/OptionDialog.xdl b/uno/dialog/jdbc/OptionDialog.xdl
index 14f97dc9..ee070c9f 100644
--- a/uno/dialog/jdbc/OptionDialog.xdl
+++ b/uno/dialog/jdbc/OptionDialog.xdl
@@ -25,7 +25,7 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
-
+
@@ -58,6 +58,6 @@
-
+
diff --git a/uno/dialog/jdbc/OptionDialog_en_US.properties b/uno/dialog/jdbc/OptionDialog_en_US.properties
index 9071f3ee..b30760d0 100644
--- a/uno/dialog/jdbc/OptionDialog_en_US.properties
+++ b/uno/dialog/jdbc/OptionDialog_en_US.properties
@@ -10,7 +10,7 @@ OptionDialog.OptionButton2.HelpText=The delivered SDBC API level will be: com.su
OptionDialog.OptionButton2.Label=css.sdbcx
OptionDialog.OptionButton3.HelpText=The delivered SDBC API level will be: com.sun.star.sdb.*
OptionDialog.OptionButton3.Label=css.sdb
-OptionDialog.Label2.HelpText=Use javax.sql.rowset.CachedRowSet to provide ResultSet
+OptionDialog.Label2.HelpText=Use javax.sql.rowset.CachedRowSet to provide ResultSet. Using Bookmark is a prerequisite.
OptionDialog.Label2.Label=Use CachedRowSet:
OptionDialog.OptionButton4.HelpText=Never use CachedRowSet (not recommended)
OptionDialog.OptionButton4.Label=Never
@@ -20,5 +20,4 @@ OptionDialog.OptionButton6.HelpText=Always use CachedRowSet
OptionDialog.OptionButton6.Label=Always
OptionDialog.CheckBox1.HelpText=Show system tables in the Base browser
OptionDialog.CheckBox1.Label=View system tables
-OptionDialog.Label3.HelpText=You have made changes. Restart LibreOffice for the changes to take effect
-OptionDialog.Label3.Label=Changes will take effect after restarting LibreOffice...
+
diff --git a/uno/dialog/jdbc/OptionDialog_fr_FR.properties b/uno/dialog/jdbc/OptionDialog_fr_FR.properties
index 1c9de951..7a6b34e7 100644
--- a/uno/dialog/jdbc/OptionDialog_fr_FR.properties
+++ b/uno/dialog/jdbc/OptionDialog_fr_FR.properties
@@ -10,7 +10,7 @@ OptionDialog.OptionButton2.HelpText=Le niveau de l'API SDBC d
OptionDialog.OptionButton2.Label=css.sdbcx
OptionDialog.OptionButton3.HelpText=Le niveau de l'API SDBC dlivr sera: com.sun.star.sdb.*
OptionDialog.OptionButton3.Label=css.sdb
-OptionDialog.Label2.HelpText=Utilise javax.sql.rowset.CachedRowSet pour fournir les ResutSets
+OptionDialog.Label2.HelpText=Utilise javax.sql.rowset.CachedRowSet pour fournir les ResutSets. L'utilisation de signets (ie: Bookmark) est une condition pralable.
OptionDialog.Label2.Label=Utiliser CachedRowSet:
OptionDialog.OptionButton4.HelpText=Ne jamais utiliser les CachedRowSet (non conseill)
OptionDialog.OptionButton4.Label=Jamais
@@ -20,5 +20,4 @@ OptionDialog.OptionButton6.HelpText=Toujours utiliser les CachedRowSet
OptionDialog.OptionButton6.Label=Toujours
OptionDialog.CheckBox1.HelpText=Afficher les tables systmes dans le navigateur de Base
OptionDialog.CheckBox1.Label=Voir les tables systme
-OptionDialog.Label3.HelpText=Vous avez effectu des modifications. Redmarrez LibreOffice pour que les modifications soient prises en compte
-OptionDialog.Label3.Label=Les modifications prendront effet aprs le redmarrage de LibreOffice...
+
diff --git a/uno/dialog/logger/LogDialog.xdl b/uno/dialog/logger/LogDialog.xdl
index 1d7040b1..978fd93e 100644
--- a/uno/dialog/logger/LogDialog.xdl
+++ b/uno/dialog/logger/LogDialog.xdl
@@ -24,12 +24,14 @@
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
+
-
+
+
diff --git a/uno/dialog/logger/LogDialog_en_US.properties b/uno/dialog/logger/LogDialog_en_US.properties
index 03fb7f46..cfd2480d 100644
--- a/uno/dialog/logger/LogDialog_en_US.properties
+++ b/uno/dialog/logger/LogDialog_en_US.properties
@@ -6,3 +6,4 @@ LogDialog.CommandButton1.HelpText=
LogDialog.CommandButton1.Label=System info
LogDialog.CommandButton2.HelpText=
LogDialog.CommandButton2.Label=Close
+
diff --git a/uno/dialog/logger/LogDialog_fr_FR.properties b/uno/dialog/logger/LogDialog_fr_FR.properties
index 793e16bb..f4e09a06 100644
--- a/uno/dialog/logger/LogDialog_fr_FR.properties
+++ b/uno/dialog/logger/LogDialog_fr_FR.properties
@@ -6,3 +6,4 @@ LogDialog.CommandButton1.HelpText=
LogDialog.CommandButton1.Label=Info systme
LogDialog.CommandButton2.HelpText=
LogDialog.CommandButton2.Label=Fermer
+
diff --git a/uno/dialog/logger/LogWindow.xdl b/uno/dialog/logger/LogWindow.xdl
index 2508a6d6..b5d450f0 100644
--- a/uno/dialog/logger/LogWindow.xdl
+++ b/uno/dialog/logger/LogWindow.xdl
@@ -24,6 +24,7 @@
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
+
@@ -31,7 +32,7 @@
-
+
@@ -51,7 +52,6 @@
-
@@ -62,6 +62,8 @@
+
+
diff --git a/uno/dialog/logger/LogWindow_en_US.properties b/uno/dialog/logger/LogWindow_en_US.properties
index 68ff1f72..e24f69e6 100644
--- a/uno/dialog/logger/LogWindow_en_US.properties
+++ b/uno/dialog/logger/LogWindow_en_US.properties
@@ -5,7 +5,6 @@ LogWindow.FixedLine1.Label=Logging options
LogWindow.Label1.HelpText=
LogWindow.Label1.Label=Available logs:
LogWindow.ListBox1.HelpText=
-LogWindow.ListBox1.Text=
LogWindow.CheckBox1.HelpText=
LogWindow.CheckBox1.Label=Enable log
LogWindow.Label2.HelpText=
@@ -19,7 +18,6 @@ LogWindow.CommandButton1.Label=View log
LogWindow.Label3.HelpText=
LogWindow.Label3.Label=Level:
LogWindow.ListBox2.HelpText=
-LogWindow.ListBox2.Text=
LogWindow.ListBox2.StringItemList.0=Sever
LogWindow.ListBox2.StringItemList.1=Warning
LogWindow.ListBox2.StringItemList.2=Info
diff --git a/uno/dialog/logger/LogWindow_fr_FR.properties b/uno/dialog/logger/LogWindow_fr_FR.properties
index 68ca2564..3cb145f0 100644
--- a/uno/dialog/logger/LogWindow_fr_FR.properties
+++ b/uno/dialog/logger/LogWindow_fr_FR.properties
@@ -5,7 +5,6 @@ LogWindow.FixedLine1.Label=Options de journalisation
LogWindow.Label1.HelpText=
LogWindow.Label1.Label=Journaux disponibles:
LogWindow.ListBox1.HelpText=
-LogWindow.ListBox1.Text=
LogWindow.CheckBox1.HelpText=
LogWindow.CheckBox1.Label=Activer le journal
LogWindow.Label2.HelpText=
@@ -19,7 +18,6 @@ LogWindow.CommandButton1.Label=Voir journal
LogWindow.Label3.HelpText=
LogWindow.Label3.Label=Seuil:
LogWindow.ListBox2.HelpText=
-LogWindow.ListBox2.Text=
LogWindow.ListBox2.StringItemList.0=Grave
LogWindow.ListBox2.StringItemList.1=Alerte
LogWindow.ListBox2.StringItemList.2=Info
diff --git a/uno/dialog/ucb/DialogStrings_en_US.properties b/uno/dialog/ucb/DialogStrings_en_US.properties
deleted file mode 100644
index 744963c8..00000000
--- a/uno/dialog/ucb/DialogStrings_en_US.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-OptionsDialog.HelpText=
-OptionsDialog.Title=
-OptionsDialog.FixedLine1.HelpText=
-OptionsDialog.FixedLine1.Label=gDriveOOo settings
-OptionsDialog.Label1.HelpText=
-OptionsDialog.Label1.Label=Replication interval:
-OptionsDialog.NumericField1.HelpText=Replication interval in minutes
-OptionsDialog.Label2.HelpText=
-OptionsDialog.Label2.Label=View datasource:
-OptionsDialog.CommandButton1.HelpText=
-OptionsDialog.CommandButton1.Label=View DataBase
-
-LogWindow.HelpText=
-LogWindow.Title=
-LogWindow.FixedLine1.HelpText=
-LogWindow.FixedLine1.Label=Logger settings
-LogWindow.Label1.HelpText=
-LogWindow.Label1.Label=Available loggers:
-LogWindow.ListBox1.HelpText=
-LogWindow.ListBox1.Text=
-LogWindow.CheckBox1.HelpText=
-LogWindow.CheckBox1.Label=Enable logger
-LogWindow.Label2.HelpText=
-LogWindow.Label2.Label=Output:
-LogWindow.OptionButton1.HelpText=
-LogWindow.OptionButton1.Label=Console
-LogWindow.OptionButton2.HelpText=
-LogWindow.OptionButton2.Label=File
-LogWindow.CommandButton1.HelpText=
-LogWindow.CommandButton1.Label=View log
-LogWindow.Label3.HelpText=
-LogWindow.Label3.Label=Level:
-LogWindow.ListBox2.HelpText=
-LogWindow.ListBox2.Text=
-LogWindow.ListBox2.StringItemList.0=Sever
-LogWindow.ListBox2.StringItemList.1=Warning
-LogWindow.ListBox2.StringItemList.2=Info
-LogWindow.ListBox2.StringItemList.3=Config
-LogWindow.ListBox2.StringItemList.4=Fine
-LogWindow.ListBox2.StringItemList.5=Finer
-LogWindow.ListBox2.StringItemList.6=Finest
-LogWindow.ListBox2.StringItemList.7=All
-
-LogDialog.HelpText=
-LogDialog.Title=Log file - %s
-LogDialog.TextField1.HelpText=
-LogDialog.TextField1.Text=
-LogDialog.CommandButton1.HelpText=
-LogDialog.CommandButton1.Label=System Info
-LogDialog.CommandButton2.HelpText=
-LogDialog.CommandButton2.Label=Clear
-LogDialog.CommandButton3.HelpText=
-LogDialog.CommandButton3.Label=Close
diff --git a/uno/dialog/ucb/DialogStrings_fr_FR.properties b/uno/dialog/ucb/DialogStrings_fr_FR.properties
deleted file mode 100644
index a91d7b93..00000000
--- a/uno/dialog/ucb/DialogStrings_fr_FR.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-OptionsDialog.HelpText=
-OptionsDialog.Title=
-OptionsDialog.FixedLine1.HelpText=
-OptionsDialog.FixedLine1.Label=Options gDriveOOo
-OptionsDialog.Label1.HelpText=
-OptionsDialog.Label1.Label=Intervalle de r\u00e9plication:
-OptionsDialog.NumericField1.HelpText=Intervalle de r\u00e9plication en minutes
-OptionsDialog.Label2.HelpText=
-OptionsDialog.Label2.Label=Voir la source de donn\u00e9es:
-OptionsDialog.CommandButton1.HelpText=
-OptionsDialog.CommandButton1.Label=Voir la base de donn\u00e9es
-
-LogWindow.HelpText=
-LogWindow.Title=
-LogWindow.FixedLine1.HelpText=
-LogWindow.FixedLine1.Label=Options de journalisation
-LogWindow.Label1.HelpText=
-LogWindow.Label1.Label=Journaux disponibles:
-LogWindow.ListBox1.HelpText=
-LogWindow.ListBox1.Text=
-LogWindow.CheckBox1.HelpText=
-LogWindow.CheckBox1.Label=Activer le journal
-LogWindow.Label2.HelpText=
-LogWindow.Label2.Label=Sortie:
-LogWindow.OptionButton1.HelpText=
-LogWindow.OptionButton1.Label=Console
-LogWindow.OptionButton2.HelpText=
-LogWindow.OptionButton2.Label=Fichier
-LogWindow.CommandButton1.HelpText=
-LogWindow.CommandButton1.Label=Voir journal
-LogWindow.Label3.HelpText=
-LogWindow.Label3.Label=Seuil:
-LogWindow.ListBox2.HelpText=
-LogWindow.ListBox2.Text=
-LogWindow.ListBox2.StringItemList.0=Grave
-LogWindow.ListBox2.StringItemList.1=Alerte
-LogWindow.ListBox2.StringItemList.2=Info
-LogWindow.ListBox2.StringItemList.3=Config
-LogWindow.ListBox2.StringItemList.4=Basique
-LogWindow.ListBox2.StringItemList.5=Fin
-LogWindow.ListBox2.StringItemList.6=Tr\u00e9s fin
-LogWindow.ListBox2.StringItemList.7=Tout
-
-LogDialog.HelpText=
-LogDialog.Title=Fichier journal - %s
-LogDialog.TextField1.HelpText=
-LogDialog.TextField1.Text=
-LogDialog.CommandButton1.HelpText=
-LogDialog.CommandButton1.Label=Info syst\u00e8me
-LogDialog.CommandButton2.HelpText=
-LogDialog.CommandButton2.Label=Effacer
-LogDialog.CommandButton3.HelpText=
-LogDialog.CommandButton3.Label=Fermer
diff --git a/uno/dialog/ucb/OptionsDialog.xdl b/uno/dialog/ucb/OptionsDialog.xdl
index d9a13b34..3c8b6e4a 100644
--- a/uno/dialog/ucb/OptionsDialog.xdl
+++ b/uno/dialog/ucb/OptionsDialog.xdl
@@ -24,6 +24,7 @@
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
+
@@ -54,7 +55,7 @@
-
+
@@ -65,8 +66,8 @@
-
-
+
+
@@ -80,22 +81,24 @@
-
-
+
+
-
-
+
+
-
+
-
+
+
-
\ No newline at end of file
+
+
diff --git a/uno/dialog/wizard/Wizard.xdl b/uno/dialog/wizard/Wizard.xdl
index d7487129..73131871 100644
--- a/uno/dialog/wizard/Wizard.xdl
+++ b/uno/dialog/wizard/Wizard.xdl
@@ -24,26 +24,24 @@
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
-
-
-
-
+
+
-
-
+
-
+
-
+
-
+
-
+
+
diff --git a/uno/dialog/wizard/WizardTop.xdl b/uno/dialog/wizard/WizardTop.xdl
new file mode 100644
index 00000000..4754d9fe
--- /dev/null
+++ b/uno/dialog/wizard/WizardTop.xdl
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uno/dialog/wizard/WizardTop_en_US.default b/uno/dialog/wizard/WizardTop_en_US.default
new file mode 120000
index 00000000..3a9c45d0
--- /dev/null
+++ b/uno/dialog/wizard/WizardTop_en_US.default
@@ -0,0 +1 @@
+./Wizard_en_US.default
\ No newline at end of file
diff --git a/uno/dialog/wizard/WizardTop_en_US.properties b/uno/dialog/wizard/WizardTop_en_US.properties
new file mode 120000
index 00000000..a1fe6e0e
--- /dev/null
+++ b/uno/dialog/wizard/WizardTop_en_US.properties
@@ -0,0 +1 @@
+./Wizard_en_US.properties
\ No newline at end of file
diff --git a/uno/dialog/wizard/WizardTop_fr_FR.properties b/uno/dialog/wizard/WizardTop_fr_FR.properties
new file mode 120000
index 00000000..887d01c3
--- /dev/null
+++ b/uno/dialog/wizard/WizardTop_fr_FR.properties
@@ -0,0 +1 @@
+./Wizard_fr_FR.properties
\ No newline at end of file
diff --git a/uno/dialog/wizard/Wizard_en_US.properties b/uno/dialog/wizard/Wizard_en_US.properties
index a08f1aea..5c620869 100644
--- a/uno/dialog/wizard/Wizard_en_US.properties
+++ b/uno/dialog/wizard/Wizard_en_US.properties
@@ -1,8 +1,6 @@
Wizard.HelpText=
Wizard.Title=
Wizard.Roadmap.Text=Steps
-Wizard.FixedLine1.HelpText=
-Wizard.FixedLine1.Label=
Wizard.CommandButton5.HelpText=
Wizard.CommandButton5.Label=Help
Wizard.CommandButton4.HelpText=
@@ -13,3 +11,4 @@ Wizard.CommandButton2.HelpText=
Wizard.CommandButton2.Label=Finish
Wizard.CommandButton1.HelpText=
Wizard.CommandButton1.Label=Cancel
+
diff --git a/uno/dialog/wizard/Wizard_fr_FR.properties b/uno/dialog/wizard/Wizard_fr_FR.properties
index 4a12f9db..fc2e4bd0 100644
--- a/uno/dialog/wizard/Wizard_fr_FR.properties
+++ b/uno/dialog/wizard/Wizard_fr_FR.properties
@@ -1,8 +1,6 @@
Wizard.HelpText=
Wizard.Title=
Wizard.Roadmap.Text=\u00c9tapes
-Wizard.FixedLine1.HelpText=
-Wizard.FixedLine1.Label=
Wizard.CommandButton5.HelpText=
Wizard.CommandButton5.Label=Aide
Wizard.CommandButton4.HelpText=
@@ -13,3 +11,4 @@ Wizard.CommandButton2.HelpText=
Wizard.CommandButton2.Label=Terminer
Wizard.CommandButton1.HelpText=
Wizard.CommandButton1.Label=Annuler
+
diff --git a/uno/lib/java/UnoHelper/UnoHelper.jar b/uno/lib/java/UnoHelper/UnoHelper.jar
index 977a88f5..b5fda019 100644
Binary files a/uno/lib/java/UnoHelper/UnoHelper.jar and b/uno/lib/java/UnoHelper/UnoHelper.jar differ
diff --git a/uno/lib/python/pyRdfa/extras/httpheader.py b/uno/lib/python/pyRdfa/extras/httpheader.py
index 7a81a263..e43b1207 100644
--- a/uno/lib/python/pyRdfa/extras/httpheader.py
+++ b/uno/lib/python/pyRdfa/extras/httpheader.py
@@ -344,7 +344,7 @@ def parse_quoted_string(s, start=0):
"""Parses a quoted string.
Returns a tuple (string, chars_consumed). The quote marks will
- have been removed and all \-escapes will have been replaced with
+ have been removed and all \\-escapes will have been replaced with
the characters they represent.
"""
@@ -356,7 +356,7 @@ def parse_token_or_quoted_string(s, start=0, allow_quoted=True, allow_token=True
's' is the string to parse, while start is the position within the
string where parsing should begin. It will returns a tuple
- (token, chars_consumed), with all \-escapes and quotation already
+ (token, chars_consumed), with all \\-escapes and quotation already
processed.
Syntax is according to BNF rules in RFC 2161 section 2.2,
@@ -522,7 +522,7 @@ def parse_comment(s, start=0):
nested comments will still have their parentheses and whitespace
left intact.
- All \-escaped quoted pairs will have been replaced with the actual
+ All \\-escaped quoted pairs will have been replaced with the actual
characters they represent, even within the inner nested comments.
You should note that only a few HTTP headers, such as User-Agent
diff --git a/uno/lib/python/pyRdfa3-3.6.4.dist-info/LICENSE b/uno/lib/python/pyRdfa3-3.6.5.dist-info/LICENSE
similarity index 100%
rename from uno/lib/python/pyRdfa3-3.6.4.dist-info/LICENSE
rename to uno/lib/python/pyRdfa3-3.6.5.dist-info/LICENSE
diff --git a/uno/lib/python/pyRdfa3-3.6.4.dist-info/METADATA b/uno/lib/python/pyRdfa3-3.6.5.dist-info/METADATA
similarity index 94%
rename from uno/lib/python/pyRdfa3-3.6.4.dist-info/METADATA
rename to uno/lib/python/pyRdfa3-3.6.5.dist-info/METADATA
index c86833e1..ff2ca97b 100644
--- a/uno/lib/python/pyRdfa3-3.6.4.dist-info/METADATA
+++ b/uno/lib/python/pyRdfa3-3.6.5.dist-info/METADATA
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: pyRdfa3
-Version: 3.6.4
+Version: 3.6.5
Summary: pyRdfa distiller/parser library
Author-email: Ivan Herman & prrvchr
Project-URL: Homepage, https://prrvchr.github.io/pyrdfa3/
@@ -11,9 +11,9 @@ Classifier: Operating System :: OS Independent
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
-Requires-Dist: requests >=2.32.3
-Requires-Dist: rdflib >=7.0.0
-Requires-Dist: html5lib >=1.1
+Requires-Dist: requests (>=2.32.3)
+Requires-Dist: rdflib (>=7.0.0)
+Requires-Dist: html5lib (>=1.1)
[](http://dx.doi.org/10.5281/zenodo.14547)
@@ -21,7 +21,7 @@ Requires-Dist: html5lib >=1.1
> **Note:** since I retired a few months ago I do not really maintain this package any more. I would be more than happy if an interested party was interested to take over. In the meantime, I have "archived" the repository to clearly signal that there is no maintenance. I would be happy to unarchive it and transfer ownership if someone is interested.
> [@iherman](https://github.com/iherman)
-> **This new version 3.6.4 is now built and maintained on [prrvchr.github.io/pyrdfa3][1]**
+> **This new version 3.6.5 is now built and maintained on [prrvchr.github.io/pyrdfa3][1]**
The package can be installed from [PyPI][2] with command:
diff --git a/uno/lib/python/pyRdfa3-3.6.4.dist-info/RECORD b/uno/lib/python/pyRdfa3-3.6.5.dist-info/RECORD
similarity index 81%
rename from uno/lib/python/pyRdfa3-3.6.4.dist-info/RECORD
rename to uno/lib/python/pyRdfa3-3.6.5.dist-info/RECORD
index 6a5cbf20..a41c40d4 100644
--- a/uno/lib/python/pyRdfa3-3.6.4.dist-info/RECORD
+++ b/uno/lib/python/pyRdfa3-3.6.5.dist-info/RECORD
@@ -9,7 +9,7 @@ pyRdfa/state.py,sha256=gbD41iGy-zJ7edkLmYFAPCAwC0VeUez38eXGF-RIQoM,24502
pyRdfa/termorcurie.py,sha256=M0ocu76xb1fTG6xGR5GAlfmK5aulVzBViBIIUUUzCBc,23387
pyRdfa/utils.py,sha256=apkz3UBF9zyObsnIadl2i6sm6ORzZA7xnuBSCCQBcPc,10229
pyRdfa/extras/__init__.py,sha256=ewApVDdXUYUQJiq-fpZBZ0ZO6OCIifz4kThymF8sCKs,105
-pyRdfa/extras/httpheader.py,sha256=D8DzCGmv6wEufJs1yg1d7ubDY2NY7rxF4XIeaUN8_g8,70183
+pyRdfa/extras/httpheader.py,sha256=fdn_P1zdAGLPR43VZ9rxeVxC1UVz2qDHBmlQ-jN1bsk,70186
pyRdfa/host/__init__.py,sha256=M0YxNcG3LGmj6aUf8QyCbbFi61UddyitcqYV9BmwvZY,10493
pyRdfa/host/atom.py,sha256=eO3kHFL3sIELeMp1EGZGbhhY9D45R9WfoFlyEQvBg0w,1141
pyRdfa/host/html5.py,sha256=aso2SDUvcOaCEM1wK1n-TRZB0YvwKx5jscbYKv1a94A,8241
@@ -22,8 +22,8 @@ pyRdfa/transform/__init__.py,sha256=rdLhZQSfv5K8zt4km8p1x7WIrjfcgJ6dqyGgIabgVRc,
pyRdfa/transform/lite.py,sha256=0dI11FWNOJo7gYFwEDNuegXg9UZexuA5IoRCmXw2K1s,3478
pyRdfa/transform/metaname.py,sha256=3zB5M3jSyyQx1D3n_AUdVsFyjYShy938PzKVOFR3rIM,1153
pyRdfa/transform/prototype.py,sha256=eH8Bub1iIZ1SUu9FsskHmKtGKDJy0wWq3B9WhxqIevY,1328
-pyRdfa3-3.6.4.dist-info/LICENSE,sha256=GOjCqSTUS9_c4wVdtwvU3n-tfx1g3ylFh1WmS8sEdm8,1901
-pyRdfa3-3.6.4.dist-info/METADATA,sha256=dSqs6Fbnl9oggoWS5UVWCgxpGwEWe2UTh2K4FMt7IXk,3369
-pyRdfa3-3.6.4.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
-pyRdfa3-3.6.4.dist-info/top_level.txt,sha256=NhGN9_N-teibyYvfbpX1aDUW7al6WiIPLTdEjpWUII4,7
-pyRdfa3-3.6.4.dist-info/RECORD,,
+pyRdfa3-3.6.5.dist-info/LICENSE,sha256=GOjCqSTUS9_c4wVdtwvU3n-tfx1g3ylFh1WmS8sEdm8,1901
+pyRdfa3-3.6.5.dist-info/METADATA,sha256=P2PhrqeYHeGPp26cr-RG8tof1UWoSjReXiBOQgjL80s,3375
+pyRdfa3-3.6.5.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
+pyRdfa3-3.6.5.dist-info/top_level.txt,sha256=NhGN9_N-teibyYvfbpX1aDUW7al6WiIPLTdEjpWUII4,7
+pyRdfa3-3.6.5.dist-info/RECORD,,
diff --git a/uno/lib/python/pyRdfa3-3.6.4.dist-info/WHEEL b/uno/lib/python/pyRdfa3-3.6.5.dist-info/WHEEL
similarity index 65%
rename from uno/lib/python/pyRdfa3-3.6.4.dist-info/WHEEL
rename to uno/lib/python/pyRdfa3-3.6.5.dist-info/WHEEL
index ecaf39f3..9b78c445 100644
--- a/uno/lib/python/pyRdfa3-3.6.4.dist-info/WHEEL
+++ b/uno/lib/python/pyRdfa3-3.6.5.dist-info/WHEEL
@@ -1,5 +1,5 @@
Wheel-Version: 1.0
-Generator: setuptools (71.1.0)
+Generator: setuptools (75.3.0)
Root-Is-Purelib: true
Tag: py3-none-any
diff --git a/uno/lib/python/pyRdfa3-3.6.4.dist-info/top_level.txt b/uno/lib/python/pyRdfa3-3.6.5.dist-info/top_level.txt
similarity index 100%
rename from uno/lib/python/pyRdfa3-3.6.4.dist-info/top_level.txt
rename to uno/lib/python/pyRdfa3-3.6.5.dist-info/top_level.txt
diff --git a/uno/lib/uno/card/datasource.py b/uno/lib/uno/card/datasource.py
index 72bdfc99..789edbfc 100644
--- a/uno/lib/uno/card/datasource.py
+++ b/uno/lib/uno/card/datasource.py
@@ -30,6 +30,8 @@
from com.sun.star.logging.LogLevel import INFO
from com.sun.star.logging.LogLevel import SEVERE
+from com.sun.star.uno import Exception as UnoException
+
from .database import DataBase
from .provider import Provider
@@ -45,6 +47,7 @@
from .helper import getSqlException
+from .configuration import g_extension
from threading import Event
@@ -87,22 +90,29 @@ def closeConnection(self, connection):
# Procedures called by Driver
def getConnection(self, source, logger, url, scheme, server, account, password=''):
+ mtd = 'getConnection'
uri = self._provider.getUserUri(server, account)
if uri in self._maps:
name = self._maps.get(uri)
user = self._users.get(name)
if not user.Request.isAuthorized():
- cls, mtd = 'DataSource', 'getConnection()'
- raise getSqlException(self._ctx, source, 1002, 1401, cls, mtd, name)
+ raise getSqlException(self._ctx, source, 1002, 1401, self._cls, mtd, name, g_extension)
else:
user = User(self._ctx, source, logger, self._database,
self._provider, url, scheme, server, account, password)
name = user.getName()
- self._users[name] = user
- self._maps[uri] = name
if user.isOnLine():
- self._provider.initAddressbooks(self._database, user)
+ try:
+ self._provider.initAddressbooks(self._database, user)
+ except UnoException as ex:
+ e = getSqlException(self._ctx, source, 1001, 1402, self._cls, mtd, name, g_extension)
+ e.NextException = ex
+ raise e
connection = self._database.getConnection(name, user.getPassword())
+ # XXX: New users are cached only if the connection is successful.
+ if not uri in self._maps:
+ self._users[name] = user
+ self._maps[uri] = name
user.addSession(self._database.getSessionId(connection))
# User and/or AddressBooks has been initialized and the connection to the database is done...
# We can start the database replication in a background task.
diff --git a/uno/lib/uno/card/resource/Driver_en_US.properties b/uno/lib/uno/card/resource/Driver_en_US.properties
index 06c3f67e..87b2ab9e 100644
--- a/uno/lib/uno/card/resource/Driver_en_US.properties
+++ b/uno/lib/uno/card/resource/Driver_en_US.properties
@@ -47,6 +47,7 @@
1400=DataSource.getConnection()
1401=The user {} has abandoned the OAuth2 authorization wizard, the {} extension cannot continue without this authorization!!!
+1402=The user {} cannot connect, the {} extension cannot continue without connection!!!
1500=User.__init__()
diff --git a/uno/lib/uno/card/resource/Driver_fr_FR.properties b/uno/lib/uno/card/resource/Driver_fr_FR.properties
index 3a578563..a40d95bd 100644
--- a/uno/lib/uno/card/resource/Driver_fr_FR.properties
+++ b/uno/lib/uno/card/resource/Driver_fr_FR.properties
@@ -47,6 +47,7 @@
1400=DataSource.getConnection()
1401=L'utilisateur {} a abandonn l'assistant d'autorisation OAuth2, l'extension {} ne peut pas continuer sans cette autorisation!!!
+1402=L'utilisateur {} ne peut pas se connecter, l'extension {} ne peut pas continuer sans connexion!!!
1500=User.__init__()
diff --git a/uno/lib/uno/component-schema.dtd b/uno/lib/uno/component-schema.dtd
new file mode 100644
index 00000000..70bd51bf
--- /dev/null
+++ b/uno/lib/uno/component-schema.dtd
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uno/lib/uno/component-update.dtd b/uno/lib/uno/component-update.dtd
new file mode 100644
index 00000000..0659e412
--- /dev/null
+++ b/uno/lib/uno/component-update.dtd
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uno/lib/uno/dbtool/__init__.py b/uno/lib/uno/dbtool/__init__.py
index 41dbed8b..a5ca8616 100644
--- a/uno/lib/uno/dbtool/__init__.py
+++ b/uno/lib/uno/dbtool/__init__.py
@@ -61,6 +61,7 @@
from .dbtool import getDateTimeFromString
from .dbtool import getDateTimeToString
from .dbtool import getDictFromResult
+from .dbtool import getDictSequenceFromResult
from .dbtool import getDriverInfos
from .dbtool import getDriverPropertyInfo
from .dbtool import getDriverPropertyInfos
diff --git a/uno/lib/uno/dbtool/dbtool.py b/uno/lib/uno/dbtool/dbtool.py
index 62b3043c..6f75a0b1 100644
--- a/uno/lib/uno/dbtool/dbtool.py
+++ b/uno/lib/uno/dbtool/dbtool.py
@@ -303,6 +303,14 @@ def getRowDict(result, default=None, count=None):
row[name] = value
return row
+def getDictSequenceFromResult(result, default=None):
+ sequence = []
+ count = result.MetaData.ColumnCount +1
+ while result.next():
+ data = getRowDict(result, default, count)
+ sequence.append(data)
+ return tuple(sequence)
+
def getObjectFromResult(result, default=None, count=None):
obj = Object()
if count is None:
diff --git a/uno/lib/uno/grid/__init__.py b/uno/lib/uno/grid/__init__.py
index 261096be..8a211532 100644
--- a/uno/lib/uno/grid/__init__.py
+++ b/uno/lib/uno/grid/__init__.py
@@ -31,5 +31,6 @@
from .gridmodel import GridModel
-from .gridhandler import GridListener
+from .gridhandler import GridDataListener
+from .gridhandler import GridSelectionListener
diff --git a/uno/lib/uno/grid/gridhandler.py b/uno/lib/uno/grid/gridhandler.py
index 509e7491..d1426cdf 100644
--- a/uno/lib/uno/grid/gridhandler.py
+++ b/uno/lib/uno/grid/gridhandler.py
@@ -30,6 +30,7 @@
import unohelper
from com.sun.star.awt import XContainerWindowEventHandler
+from com.sun.star.awt.grid import XGridDataListener
from com.sun.star.awt.grid import XGridSelectionListener
import traceback
@@ -51,17 +52,44 @@ def callHandlerMethod(self, window, event, method):
self._manager.setColumn(event.Source.getSelectedItemPos())
handled = True
return handled
- except Exception as e:
- msg = "Error: %s" % traceback.format_exc()
- print(msg)
+ except:
+ print("WindowHandler.callHandlerMethod() ERROR: %s" % traceback.format_exc())
def getSupportedMethodNames(self):
return ('ShowColumns',
'SetColumn')
-class GridListener(unohelper.Base,
- XGridSelectionListener):
+class GridDataListener(unohelper.Base,
+ XGridDataListener):
+ def __init__(self, manager):
+ self._manager = manager
+
+ # XGridDataListener
+ def rowsInserted(self, event):
+ try:
+ self._manager.dataGridChanged()
+ except:
+ print("GridDataListener.rowsInserted() ERROR: %s" % traceback.format_exc())
+
+ def rowsRemoved(self, event):
+ try:
+ self._manager.dataGridChanged()
+ except:
+ print("GridDataListener.rowsRemoved() ERROR: %s" % traceback.format_exc())
+
+ def dataChanged(self, event):
+ pass
+
+ def rowHeadingChanged(self, event):
+ pass
+
+ def disposing(self, event):
+ pass
+
+
+class GridSelectionListener(unohelper.Base,
+ XGridSelectionListener):
def __init__(self, manager, grid=1):
self._manager = manager
self._grid = grid
@@ -72,9 +100,8 @@ def selectionChanged(self, event):
control = event.Source
index = control.getSelectedRows()[-1] if control.hasSelectedRows() else -1
self._manager.changeGridSelection(index, self._grid)
- except Exception as e:
- msg = "Error: %s" % traceback.format_exc()
- print(msg)
+ except:
+ print("GridSelectionListener.selectionChanged() ERROR: %s" % traceback.format_exc())
def disposing(self, event):
pass
diff --git a/uno/lib/uno/grid/gridmanager.py b/uno/lib/uno/grid/gridmanager.py
index 2c48bf7d..a972aacf 100644
--- a/uno/lib/uno/grid/gridmanager.py
+++ b/uno/lib/uno/grid/gridmanager.py
@@ -37,11 +37,11 @@
from .gridhandler import WindowHandler
-from ..unotool import createService
-from ..unotool import getConfiguration
-from ..unotool import getPropertyValue
+from ...unotool import createService
+from ...unotool import getConfiguration
+from ...unotool import getPropertyValue
-from ..configuration import g_identifier
+from ...configuration import g_identifier
import json
from collections import OrderedDict
@@ -49,8 +49,7 @@
class GridManager():
- def __init__(self, ctx, url, model, window, quote, setting, selection, resources=None, maxi=None, multi=False, factor=5):
- self._quote = quote
+ def __init__(self, ctx, url, model, window, setting, selection, resources=None, maxi=None, multi=False, factor=5):
self._factor = factor
self._datasource = None
self._table = None
@@ -101,10 +100,9 @@ def getSelectedRows(self):
def getSelectedColumn(self, column):
value = None
- if self._view.hasSelectedRows() and column in self._headers:
- index = tuple(self._headers.keys()).index(column)
- row = self.getUnsortedIndex(self._view.getSelectedRow())
- value = self._model.getCellData(index, row)
+ if self._view.hasSelectedRows():
+ row = self._view.getSelectedRow()
+ value = self._getColumnValue(row, column)
return value
def getSelectedIdentifier(self, identifier):
@@ -113,11 +111,24 @@ def getSelectedIdentifier(self, identifier):
value = self._getRowValue(identifier, self.getUnsortedIndex(self._view.getSelectedRow()))
return value
- def getGridFilters(self):
- filters = []
+ def getSelectedIdentifiers(self, identifier):
+ values = []
+ if self._view.hasSelectedRows():
+ for row in self._view.getSelectedRows():
+ values.append(self._getRowValue(identifier, self.getUnsortedIndex(row)))
+ return tuple(values)
+
+ def getGridData(self, columns, quote, default=None):
+ values = {}
for row in (range(self._model.RowCount)):
- filters.append(self._getRowFilter(row))
- return tuple(filters)
+ filter = self._getRowFilter(row, quote)
+ for column in columns:
+ if column in self._headers:
+ value = self._getColumnValue(row, column, default)
+ if value:
+ values[filter] = value
+ break
+ return values
def getSelectedStructuredFilters(self):
filters = []
@@ -125,10 +136,22 @@ def getSelectedStructuredFilters(self):
filters.append(self._getRowStructuredFilter(row))
return tuple(filters)
- def _getRowFilter(self, row):
+ def getRowPredicates(self, row):
+ predicates = []
+ for identifier in self._indexes:
+ predicates.append(self._getRowValue(identifier, row))
+ return tuple(predicates)
+
+ def _getColumnValue(self, row, column, value=None):
+ if column in self._headers:
+ keys = tuple(self._headers.keys())
+ value = self._model.getCellData(keys.index(column), self.getUnsortedIndex(row))
+ return value
+
+ def _getRowFilter(self, row, quote):
filters = []
for identifier in self._indexes:
- column = self._getQuotedIdentifier(identifier)
+ column = self._getQuotedIdentifier(identifier, quote)
value = self._getQuotedValue(identifier, row)
filter = '%s = %s' % (column, value)
filters.append(filter)
@@ -151,15 +174,14 @@ def _getQuotedValue(self, identifier, row):
value = "%s" % value
return value
- def _getQuotedIdentifier(self, identifier):
- return "%s%s%s" % (self._quote, identifier, self._quote)
+ def _getQuotedIdentifier(self, identifier, quote):
+ return quote + identifier + quote
def _getRowValue(self, identifier, row):
return self._model.getCellData(self._indexes[identifier], row)
# GridManager setter methods
def dispose(self):
- self.saveColumnSettings()
self.Column.dispose()
self.Model.dispose()
@@ -172,6 +194,12 @@ def addSelectionListener(self, listener):
def removeSelectionListener(self, listener):
self._view.getGrid().removeSelectionListener(listener)
+ def addGridDataListener(self, listener):
+ self._model.addGridDataListener(listener)
+
+ def removeGridDataListener(self, listener):
+ self._model.removeGridDataListener(listener)
+
def showColumns(self, state):
self._view.showColumns(state)
diff --git a/uno/lib/uno/grid/gridmodel.py b/uno/lib/uno/grid/gridmodel.py
index 2b3e05f8..94c863d2 100644
--- a/uno/lib/uno/grid/gridmodel.py
+++ b/uno/lib/uno/grid/gridmodel.py
@@ -32,7 +32,7 @@
from com.sun.star.awt.grid import XMutableGridDataModel
-from ..unotool import hasInterface
+from ...unotool import hasInterface
import traceback
diff --git a/uno/lib/uno/grid/gridview.py b/uno/lib/uno/grid/gridview.py
index ebe2e52f..c6750298 100644
--- a/uno/lib/uno/grid/gridview.py
+++ b/uno/lib/uno/grid/gridview.py
@@ -31,9 +31,9 @@
from com.sun.star.view.SelectionType import MULTI
-from ..unotool import getContainerWindow
+from ...unotool import getContainerWindow
-from ..configuration import g_identifier
+from ...configuration import g_identifier
class GridView(unohelper.Base):
diff --git a/uno/lib/uno/jdbcdriver/__init__.py b/uno/lib/uno/jdbcdriver/__init__.py
index 30efb5d2..badde637 100644
--- a/uno/lib/uno/jdbcdriver/__init__.py
+++ b/uno/lib/uno/jdbcdriver/__init__.py
@@ -27,8 +27,11 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
+from .jdbctool import isInstrumented
+
from .configuration import g_extension
from .configuration import g_identifier
from .configuration import g_service
from .configuration import g_services
from .configuration import g_version
+
diff --git a/uno/lib/uno/jdbcdriver/configuration.py b/uno/lib/uno/jdbcdriver/configuration.py
index 7650d1ea..149e3931 100644
--- a/uno/lib/uno/jdbcdriver/configuration.py
+++ b/uno/lib/uno/jdbcdriver/configuration.py
@@ -34,4 +34,12 @@
g_services = ('io.github.prrvchr.jdbcdriver.sdbc.Driver',
'io.github.prrvchr.jdbcdriver.sdbcx.Driver',
'io.github.prrvchr.jdbcdriver.sdb.Driver')
-g_version = '1.5.4'
+g_version = '1.6.1'
+g_instrumented = 'SupportsInstrumentationAgent'
+
+# jdbcDriverOOo special configuration
+g_resource = 'resource'
+g_basename = 'Driver'
+g_defaultlog = 'Driver'
+g_errorlog = 'jdbcDriverError'
+
diff --git a/uno/lib/uno/jdbcdriver/jdbctool.py b/uno/lib/uno/jdbcdriver/jdbctool.py
new file mode 100644
index 00000000..99b0cb17
--- /dev/null
+++ b/uno/lib/uno/jdbcdriver/jdbctool.py
@@ -0,0 +1,47 @@
+#!
+# -*- coding: utf-8 -*-
+
+"""
+╔════════════════════════════════════════════════════════════════════════════════════╗
+║ ║
+║ Copyright (c) 2020-25 https://prrvchr.github.io ║
+║ ║
+║ Permission is hereby granted, free of charge, to any person obtaining ║
+║ a copy of this software and associated documentation files (the "Software"), ║
+║ to deal in the Software without restriction, including without limitation ║
+║ the rights to use, copy, modify, merge, publish, distribute, sublicense, ║
+║ and/or sell copies of the Software, and to permit persons to whom the Software ║
+║ is furnished to do so, subject to the following conditions: ║
+║ ║
+║ The above copyright notice and this permission notice shall be included in ║
+║ all copies or substantial portions of the Software. ║
+║ ║
+║ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ║
+║ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ║
+║ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ║
+║ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ║
+║ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ║
+║ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE ║
+║ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ║
+║ ║
+╚════════════════════════════════════════════════════════════════════════════════════╝
+"""
+
+from ..unotool import createService
+from ..unotool import getPropertyValueSet
+
+from .configuration import g_instrumented
+from .configuration import g_service
+
+
+def isInstrumented(ctx, url):
+ support = False
+ driver = createService(ctx, g_service)
+ if driver:
+ properties = getPropertyValueSet({g_instrumented: True})
+ for info in driver.getPropertyInfo(url, properties):
+ if info.Name == g_instrumented:
+ support = info.Value != 'false'
+ break
+ return support
+
diff --git a/uno/lib/uno/library.dtd b/uno/lib/uno/library.dtd
new file mode 100644
index 00000000..c0341ed5
--- /dev/null
+++ b/uno/lib/uno/library.dtd
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
diff --git a/uno/lib/uno/logger/dialog/loghandler.py b/uno/lib/uno/logger/dialog/loghandler.py
index 343510f1..63073747 100644
--- a/uno/lib/uno/logger/dialog/loghandler.py
+++ b/uno/lib/uno/logger/dialog/loghandler.py
@@ -65,8 +65,8 @@ def callHandlerMethod(self, dialog, event, method):
self._manager.setLevel(event.Source.getSelectedItemPos())
handled = True
return handled
- except Exception as e:
- print("ERROR: %s - %s" % (e, traceback.format_exc()))
+ except:
+ print("WindowHandler.callHandlerMethod() ERROR: %s" % traceback.format_exc())
def getSupportedMethodNames(self):
return ('SetLogger',
@@ -90,9 +90,8 @@ def callHandlerMethod(self, dialog, event, method):
self._manager.logInfos()
handled = True
return handled
- except Exception as e:
- msg = f"Error: {traceback.format_exc()}"
- print(msg)
+ except:
+ print("DialogHandler.callHandlerMethod() ERROR: %s" % traceback.format_exc())
def getSupportedMethodNames(self):
return ('LogInfo', )
@@ -107,9 +106,8 @@ def __init__(self, manager):
def modified(self, event):
try:
self._manager.updateLogger()
- except Exception as e:
- msg = f"Error: {traceback.format_exc()}"
- print(msg)
+ except:
+ print("LoggerListener.modified() ERROR: %s" % traceback.format_exc())
def disposing(self, event):
pass
@@ -123,11 +121,9 @@ def __init__(self, manager):
# XModifyListener
def modified(self, event):
try:
- print("PoolListener.modified()")
self._manager.updateLoggers()
- except Exception as e:
- msg = f"Error: {traceback.format_exc()}"
- print(msg)
+ except:
+ print("PoolListener.modified() ERROR: %s" % traceback.format_exc())
def disposing(self, event):
pass
diff --git a/uno/lib/uno/logger/dialog/logmodel.py b/uno/lib/uno/logger/dialog/logmodel.py
index 4cfd975b..44303128 100644
--- a/uno/lib/uno/logger/dialog/logmodel.py
+++ b/uno/lib/uno/logger/dialog/logmodel.py
@@ -56,7 +56,7 @@
from packaging.requirements import Requirement
from importlib import metadata
-import distutils.sysconfig as ds
+import sysconfig
import pkg_resources as pkgr
import os, sys
import traceback
@@ -140,7 +140,7 @@ def logInfos(self, level, clazz, method, requirements):
else:
msg = self._resolver.resolveString(123).format(sys.executable)
self._logger.logp(level, clazz, method, msg)
- msg = self._resolver.resolveString(124).format(ds.get_config_var('EXT_SUFFIX'))
+ msg = self._resolver.resolveString(124).format(sysconfig.get_config_var('EXT_SUFFIX'))
self._logger.logp(level, clazz, method, msg)
msg = self._resolver.resolveString(125).format(os.pathsep.join(sys.path))
self._logger.logp(level, clazz, method, msg)
diff --git a/uno/lib/uno/logger/logcontroller.py b/uno/lib/uno/logger/logcontroller.py
index 50a896f6..5b910124 100644
--- a/uno/lib/uno/logger/logcontroller.py
+++ b/uno/lib/uno/logger/logcontroller.py
@@ -27,6 +27,8 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
+import uno
+
from com.sun.star.logging.LogLevel import SEVERE
from .logwrapper import LogWrapper
@@ -50,7 +52,8 @@ def __init__(self, ctx, name, basename=g_basename, listener=None):
self._listener = listener
self._setting = None
self._config = LogConfig(ctx)
- if listener is not None:
+ self._handler = None
+ if listener:
self._logger.addModifyListener(listener)
# Public getter method
@@ -62,17 +65,26 @@ def dispose(self):
if self._listener is not None:
self._logger.removeModifyListener(self._listener)
+ def addRollerHandler(self, handler=None):
+ if handler is None:
+ handler = RollerHandler(self._ctx, self.Name)
+ super().addRollerHandler(handler)
+ self._handler = handler
+ if self._listener:
+ event = uno.createUnoStruct('com.sun.star.lang.EventObject', self._logger)
+ self._listener.modified(event)
+
+ def removeRollerHandler(self, handler=None):
+ if handler is None:
+ handler = self._handler
+ super().removeRollerHandler(handler)
+
def clearLogger(self):
- url = getRollerHandlerUrl(self._ctx, self.Name)
- sf = getSimpleFile(self._ctx)
- if sf.exists(url):
- sf.kill(url)
+ if self._handler:
+ self._handler.clearLogger()
resolver = getStringResourceWithLocation(self._ctx, self._url, 'Logger')
msg = resolver.resolveString(111)
- handler = RollerHandler(self._ctx, self.Name)
- self.addRollerHandler(handler)
self._logger.logp(SEVERE, 'Logger', 'clearLogger', msg)
- self.removeRollerHandler(handler)
def addModifyListener(self, listener):
self._logger.addModifyListener(listener)
diff --git a/uno/lib/uno/logger/loghandler.py b/uno/lib/uno/logger/loghandler.py
index f537bfa3..c426f421 100644
--- a/uno/lib/uno/logger/loghandler.py
+++ b/uno/lib/uno/logger/loghandler.py
@@ -108,6 +108,10 @@ def removeEventListener(self, listener):
if listener in self._listeners:
self._listeners.remove(listener)
+ def clearLogger(self):
+ if self._sf.exists(self._url):
+ self._sf.kill(self._url)
+
def _publishRecord(self, record):
if not self._sf.exists(self._url):
msg = self._formatter.getHead()
diff --git a/uno/lib/uno/module.dtd b/uno/lib/uno/module.dtd
new file mode 100644
index 00000000..b77d62f4
--- /dev/null
+++ b/uno/lib/uno/module.dtd
@@ -0,0 +1,24 @@
+
+
+
+
diff --git a/uno/lib/uno/oauth20/__init__.py b/uno/lib/uno/oauth20/__init__.py
index 87c7eb48..721859f2 100644
--- a/uno/lib/uno/oauth20/__init__.py
+++ b/uno/lib/uno/oauth20/__init__.py
@@ -32,7 +32,6 @@
from .oauth2lib import NoOAuth2
from .oauth2lib import OAuth2OOo
-from .oauth2tool import getOAuth2
from .oauth2tool import getOAuth2Version
from .oauth2tool import getParserItems
from .oauth2tool import getRequest
diff --git a/uno/lib/uno/oauth20/configuration.py b/uno/lib/uno/oauth20/configuration.py
index 1574f4ea..6c9ecd8e 100644
--- a/uno/lib/uno/oauth20/configuration.py
+++ b/uno/lib/uno/oauth20/configuration.py
@@ -33,7 +33,7 @@
g_service = '%s.OAuth2Service' % g_identifier
g_resource = 'resource'
-g_version = '1.5.2'
+g_version = '1.6.1'
g_chunk = g_chunk = 320 * 1024
g_token = 'Bearer ${AccessToken}'
diff --git a/uno/lib/uno/oauth20/oauth2core.py b/uno/lib/uno/oauth20/oauth2core.py
index 19e8762b..463c03d5 100644
--- a/uno/lib/uno/oauth20/oauth2core.py
+++ b/uno/lib/uno/oauth20/oauth2core.py
@@ -27,23 +27,28 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
+from ..unotool import getPropertyValueSet
from ..unotool import getInteractionHandler
from .oauth2lib import InteractionRequest
-def getOAuth2UserName(ctx, source, url, message=''):
+def getOAuth2UserName(ctx, source, url, message='', parent=None, context=''):
username = ''
handler = getInteractionHandler(ctx)
+ if parent:
+ handler.initialize(getPropertyValueSet({'Parent': parent, 'Context': context}))
interaction = InteractionRequest(source, url, '', '', message)
if handler.handleInteractionRequest(interaction):
continuation = interaction.getContinuations()[-1]
username = continuation.getUserName()
return username
-def getOAuth2Token(ctx, source, url, user, format=''):
+def getOAuth2Token(ctx, source, url, user, format='', parent=None, context=''):
token = ''
handler = getInteractionHandler(ctx)
+ if parent:
+ handler.initialize(getPropertyValueSet({'Parent': parent, 'Context': context}))
interaction = InteractionRequest(source, url, user, format, '')
if handler.handleInteractionRequest(interaction):
continuation = interaction.getContinuations()[-1]
diff --git a/uno/lib/uno/oauth20/oauth2tool.py b/uno/lib/uno/oauth20/oauth2tool.py
index 65c15a59..9d594b87 100644
--- a/uno/lib/uno/oauth20/oauth2tool.py
+++ b/uno/lib/uno/oauth20/oauth2tool.py
@@ -51,13 +51,6 @@ def getRequest(ctx, url=None, name=None):
request = createService(ctx, g_service)
return request
-def getOAuth2(ctx, url='', name=''):
- if url and name:
- oauth2 = createService(ctx, g_service, url, name)
- else:
- oauth2 = createService(ctx, g_service)
- return oauth2
-
def getOAuth2Version(ctx):
version = getExtensionVersion(ctx, g_identifier)
return version
diff --git a/uno/lib/uno/options/addressbook/__init__.py b/uno/lib/uno/options/addressbook/__init__.py
index c2eddf4f..f6f7a27b 100644
--- a/uno/lib/uno/options/addressbook/__init__.py
+++ b/uno/lib/uno/options/addressbook/__init__.py
@@ -28,3 +28,4 @@
"""
from .optionsmanager import OptionsManager
+
diff --git a/uno/lib/uno/options/addressbook/optionshandler.py b/uno/lib/uno/options/addressbook/optionshandler.py
new file mode 100644
index 00000000..e8e38c75
--- /dev/null
+++ b/uno/lib/uno/options/addressbook/optionshandler.py
@@ -0,0 +1,55 @@
+#!
+# -*- coding: utf-8 -*-
+
+"""
+╔════════════════════════════════════════════════════════════════════════════════════╗
+║ ║
+║ Copyright (c) 2020-25 https://prrvchr.github.io ║
+║ ║
+║ Permission is hereby granted, free of charge, to any person obtaining ║
+║ a copy of this software and associated documentation files (the "Software"), ║
+║ to deal in the Software without restriction, including without limitation ║
+║ the rights to use, copy, modify, merge, publish, distribute, sublicense, ║
+║ and/or sell copies of the Software, and to permit persons to whom the Software ║
+║ is furnished to do so, subject to the following conditions: ║
+║ ║
+║ The above copyright notice and this permission notice shall be included in ║
+║ all copies or substantial portions of the Software. ║
+║ ║
+║ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ║
+║ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ║
+║ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ║
+║ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ║
+║ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ║
+║ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE ║
+║ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ║
+║ ║
+╚════════════════════════════════════════════════════════════════════════════════════╝
+"""
+
+import unohelper
+
+from com.sun.star.awt import XContainerWindowEventHandler
+
+import traceback
+
+
+class WindowHandler(unohelper.Base,
+ XContainerWindowEventHandler):
+ def __init__(self, manager):
+ self._manager = manager
+
+ # XContainerWindowEventHandler
+ def callHandlerMethod(self, window, event, method):
+ try:
+ handled = False
+ if method == 'ViewData':
+ self._manager.viewData()
+ handled = True
+ return handled
+ except:
+ print("WindowHandler.callHandlerMethod() ERROR: %s" % traceback.format_exc())
+
+ def getSupportedMethodNames(self):
+ return ('ViewData', )
+
diff --git a/uno/lib/uno/options/addressbook/optionsmanager.py b/uno/lib/uno/options/addressbook/optionsmanager.py
index 7d010716..a04b943f 100644
--- a/uno/lib/uno/options/addressbook/optionsmanager.py
+++ b/uno/lib/uno/options/addressbook/optionsmanager.py
@@ -31,44 +31,42 @@
from com.sun.star.logging.LogLevel import SEVERE
from .optionsmodel import OptionsModel
+
from .optionsview import OptionsView
-from ..unotool import getDesktop
+from .optionshandler import WindowHandler
+
+from ...unotool import getDesktop
-from ..logger import LogManager
+from ...logger import LogManager
-from ..configuration import g_defaultlog
-from ..configuration import g_synclog
+from ...configuration import g_defaultlog
+from ...configuration import g_synclog
class OptionsManager():
- def __init__(self, ctx, logger, window, offset=0):
+ def __init__(self, ctx, logger, window):
self._ctx = ctx
- self._logger = logger
self._model = OptionsModel(ctx)
- self._view = OptionsView(window, OptionsManager._restart, offset, *self._model.getViewData())
- self._logmanager = LogManager(self._ctx, window, 'requirements.txt', g_defaultlog, g_synclog)
+ self._view = OptionsView(ctx, window, WindowHandler(self), *self._model.getViewData())
+ self._logmanager = LogManager(ctx, self._view.getWindow(), 'requirements.txt', g_defaultlog, g_synclog)
self._logmanager.initView()
+ self._logger = logger
self._logger.logprb(INFO, 'OptionsManager', '__init__()', 301)
self._model.loadDriver()
- _restart = False
-
def loadSetting(self):
self._view.setTimeout(self._model.getTimeout())
self._view.setViewName(self._model.getViewName())
- self._view.setRestart(OptionsManager._restart)
self._logmanager.loadSetting()
self._logger.logprb(INFO, 'OptionsManager', 'loadSetting()', 311)
def saveSetting(self):
timeout, view = self._view.getViewData()
option = self._model.setViewData(timeout, view)
- log = self._logmanager.saveSetting()
- if log:
- OptionsManager._restart = True
- self._view.setRestart(True)
- self._logger.logprb(INFO, 'OptionsManager', 'saveSetting()', 321, option, log)
+ saved = self._logmanager.saveSetting()
+ self._logger.logprb(INFO, 'OptionsManager', 'saveSetting()', 321, option, saved)
+ return saved
def viewData(self):
url = self._model.getDatasourceUrl()
diff --git a/uno/lib/uno/options/addressbook/optionsmodel.py b/uno/lib/uno/options/addressbook/optionsmodel.py
index 85b76b3e..30cb662c 100644
--- a/uno/lib/uno/options/addressbook/optionsmodel.py
+++ b/uno/lib/uno/options/addressbook/optionsmodel.py
@@ -27,14 +27,14 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
-from ..unotool import createService
-from ..unotool import getConfiguration
-from ..unotool import getSimpleFile
+from ...unotool import createService
+from ...unotool import getConfiguration
+from ...unotool import getSimpleFile
-from ..helper import getDataBaseUrl
+from ...helper import getDataBaseUrl
-from ..configuration import g_identifier
-from ..configuration import g_implementation
+from ...configuration import g_identifier
+from ...configuration import g_implementation
class OptionsModel():
@@ -65,7 +65,6 @@ def getViewName(self):
def getDatasourceUrl(self):
return self._url
-
# OptionsModel setter methods
def loadDriver(self):
try:
diff --git a/uno/lib/uno/options/addressbook/optionsview.py b/uno/lib/uno/options/addressbook/optionsview.py
index 2d335949..2f5da84e 100644
--- a/uno/lib/uno/options/addressbook/optionsview.py
+++ b/uno/lib/uno/options/addressbook/optionsview.py
@@ -27,21 +27,25 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
-import unohelper
+from ...unotool import getContainerWindow
+
+from ...configuration import g_identifier
import traceback
class OptionsView():
- def __init__(self, window, restart, offset, timeout, view, enabled):
- self._window = window
+ def __init__(self, ctx, window, handler, timeout, view, enabled):
+ self._window = getContainerWindow(ctx, window.getPeer(), handler, g_identifier, 'OptionDialog')
+ self._window.setVisible(True)
self._getTimeout().Value = timeout
self._getDatasource().Model.Enabled = enabled
self._setViewName(view, not enabled)
- self.setRestart(restart)
- self._getRestart().Model.PositionY += offset
# OptionsView getter methods
+ def getWindow(self):
+ return self._window
+
def getViewData(self):
return int(self._getTimeout().Value), self._getViewName().Text
@@ -52,9 +56,6 @@ def setTimeout(self, timeout):
def setViewName(self, view):
self._getViewName().Text = view
- def setRestart(self, enabled):
- self._getRestart().setVisible(enabled)
-
# OptionsView private setter methods
def _setViewName(self, view, disabled):
self._getViewLabel().Model.Enabled = disabled
@@ -75,6 +76,3 @@ def _getViewLabel(self):
def _getViewName(self):
return self._window.getControl('TextField1')
- def _getRestart(self):
- return self._window.getControl('Label4')
-
diff --git a/uno/lib/uno/options/embedded/options b/uno/lib/uno/options/embedded/options
new file mode 120000
index 00000000..9b1eeeec
--- /dev/null
+++ b/uno/lib/uno/options/embedded/options
@@ -0,0 +1 @@
+../jdbc
\ No newline at end of file
diff --git a/uno/lib/uno/options/embedded/optionsmanager.py b/uno/lib/uno/options/embedded/optionsmanager.py
index 669ad65c..141dc395 100644
--- a/uno/lib/uno/options/embedded/optionsmanager.py
+++ b/uno/lib/uno/options/embedded/optionsmanager.py
@@ -31,7 +31,7 @@
from .optionsview import OptionsView
from .optionshandler import OptionsListener
-from ..option import OptionManager
+from .options import OptionsManager as Manager
from ..configuration import g_defaultlog
@@ -41,8 +41,9 @@
class OptionsManager():
def __init__(self, ctx, logger, window, options, url=None):
self._model = OptionsModel(ctx, logger, url)
- self._manager = OptionManager(ctx, window, options, OptionsManager._restart, 20, g_defaultlog)
- self._view = OptionsView(window)
+ link, instrumented = self._model.getDriverInfo()
+ self._manager = Manager(ctx, window, instrumented, options, g_defaultlog)
+ self._view = OptionsView(window, OptionsManager._restart, link, instrumented)
window.addEventListener(OptionsListener(self))
self._manager.initView()
self._initView()
@@ -56,13 +57,11 @@ def dispose(self):
def saveSetting(self):
if self._manager.saveSetting():
OptionsManager._restart = True
- self._manager.setRestart(True)
-
+ self._view.setWarning(True, self._model.isInstrumented())
def loadSetting(self):
self._manager.loadSetting()
- version = self._model.getDriverVersion(self._getConfigApiLevel())
- self._view.setDriverVersion(version)
+ self._initView()
# OptionsManager private getter methods
def _getConfigApiLevel(self):
diff --git a/uno/lib/uno/options/embedded/optionsmodel.py b/uno/lib/uno/options/embedded/optionsmodel.py
index 049914fb..c8f1686a 100644
--- a/uno/lib/uno/options/embedded/optionsmodel.py
+++ b/uno/lib/uno/options/embedded/optionsmodel.py
@@ -33,9 +33,12 @@
from com.sun.star.uno import Exception as UnoException
from ..unotool import createService
+from ..unotool import getStringResource
from ..jdbcdriver import g_service as jdbc
+from ..jdbcdriver import isInstrumented
+from ..configuration import g_identifier
from ..configuration import g_service as embedded
import traceback
@@ -45,10 +48,19 @@ class OptionsModel():
def __init__(self, ctx, logger, url=None):
self._ctx = ctx
self._url = url
+ self._instrumented = isInstrumented(ctx, 'xdbc:jdbc')
+ resolver = getStringResource(ctx, g_identifier, 'dialogs', 'OptionsDialog')
+ self._link = resolver.resolveString('OptionsDialog.Hyperlink1.Url')
self._logger = logger
self._logger.logprb(INFO, 'OptionsModel', '__init__', 401)
# OptionsModel getter methods
+ def getDriverInfo(self):
+ return self._link, self._instrumented
+
+ def isInstrumented(self):
+ return self._instrumented
+
def getDriverVersion(self, apilevel):
driver = None
version = 'N/A'
diff --git a/uno/lib/uno/options/embedded/optionsview.py b/uno/lib/uno/options/embedded/optionsview.py
index 98170ae8..19450086 100644
--- a/uno/lib/uno/options/embedded/optionsview.py
+++ b/uno/lib/uno/options/embedded/optionsview.py
@@ -31,14 +31,35 @@
class OptionsView():
- def __init__(self, window):
+ def __init__(self, window, restart, url, instrumented):
self._window = window
+ control = self._getWarning()
+ control.URL = url
+ self._setWarning(control, restart, instrumented)
# OptionsView setter methods
+ def setWarning(self, restart, instrumented):
+ self._setWarning(self._getWarning(), restart, instrumented)
+
def setDriverVersion(self, version):
self._getVersion().Text = version
+# OptionsView private methods
+ def _setWarning(self, control, restart, instrumented):
+ if restart:
+ control.setVisible(False)
+ self._getRestart().setVisible(True)
+ else:
+ self._getRestart().setVisible(False)
+ control.setVisible(not instrumented)
+
# OptionsView private control methods
def _getVersion(self):
return self._window.getControl('Label2')
+ def _getRestart(self):
+ return self._window.getControl('Label3')
+
+ def _getWarning(self):
+ return self._window.getControl('Hyperlink1')
+
diff --git a/uno/lib/uno/options/jdbc/__init__.py b/uno/lib/uno/options/jdbc/__init__.py
index eab324b7..f6f7a27b 100644
--- a/uno/lib/uno/options/jdbc/__init__.py
+++ b/uno/lib/uno/options/jdbc/__init__.py
@@ -27,4 +27,5 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
-from .optionmanager import OptionManager
+from .optionsmanager import OptionsManager
+
diff --git a/uno/lib/uno/options/jdbc/optionhandler.py b/uno/lib/uno/options/jdbc/optionshandler.py
similarity index 97%
rename from uno/lib/uno/options/jdbc/optionhandler.py
rename to uno/lib/uno/options/jdbc/optionshandler.py
index d58b7af5..aeaec53e 100644
--- a/uno/lib/uno/options/jdbc/optionhandler.py
+++ b/uno/lib/uno/options/jdbc/optionshandler.py
@@ -65,8 +65,8 @@ def callHandlerMethod(self, window, event, method):
self._manager.setSystemTable(event.Source.State)
handled = True
return handled
- except Exception as e:
- print("ERROR: %s - %s" % (e, traceback.format_exc()))
+ except:
+ print("WindowHandler.callHandlerMethod() ERROR: %s" % traceback.format_exc())
def getSupportedMethodNames(self):
return ('Level0',
diff --git a/uno/lib/uno/options/jdbc/optionmanager.py b/uno/lib/uno/options/jdbc/optionsmanager.py
similarity index 88%
rename from uno/lib/uno/options/jdbc/optionmanager.py
rename to uno/lib/uno/options/jdbc/optionsmanager.py
index 2f8f4d35..ac7cb0b1 100644
--- a/uno/lib/uno/options/jdbc/optionmanager.py
+++ b/uno/lib/uno/options/jdbc/optionsmanager.py
@@ -27,20 +27,22 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
-from .optionmodel import OptionModel
-from .optionview import OptionWindow
-from .optionhandler import WindowHandler
+from .optionsmodel import OptionsModel
-from ..logger import LogManager
+from .optionsview import OptionsWindow
+
+from .optionshandler import WindowHandler
+
+from ...logger import LogManager
import traceback
-class OptionManager():
- def __init__(self, ctx, window, options, restart, offset, logger, *loggers):
+class OptionsManager():
+ def __init__(self, ctx, window, instrumented, options, logger, *loggers):
self._logmanager = LogManager(ctx, window, 'requirements.txt', logger, *loggers)
- self._model = OptionModel(ctx)
- self._view = OptionWindow(ctx, window, WindowHandler(self), options, restart, offset)
+ self._model = OptionsModel(ctx, instrumented)
+ self._view = OptionsWindow(ctx, window, WindowHandler(self), options)
# OptionManager setter methods
def initView(self):
@@ -61,9 +63,6 @@ def saveSetting(self):
saved |= self._model.saveSetting()
return saved
- def setRestart(self, state):
- self._view.setRestart(state)
-
def loadSetting(self):
self._logmanager.loadSetting()
self._initView()
diff --git a/uno/lib/uno/options/jdbc/optionmodel.py b/uno/lib/uno/options/jdbc/optionsmodel.py
similarity index 85%
rename from uno/lib/uno/options/jdbc/optionmodel.py
rename to uno/lib/uno/options/jdbc/optionsmodel.py
index 680827cf..65262b7a 100644
--- a/uno/lib/uno/options/jdbc/optionmodel.py
+++ b/uno/lib/uno/options/jdbc/optionsmodel.py
@@ -27,27 +27,21 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
-from com.sun.star.logging.LogLevel import INFO
+from ...unotool import getConfiguration
-from ..unotool import getConfiguration
-
-from ..logger import getLogger
-
-from ..jdbcdriver import g_services
-
-from ..configuration import g_identifier
-from ..configuration import g_basename
+from ...configuration import g_identifier
import traceback
-class OptionModel():
- def __init__(self, ctx):
+class OptionsModel():
+ def __init__(self, ctx, instrumented):
self._rebootkeys = ('ApiLevel', 'CachedRowSet')
configkeys = ('ShowSystemTable', )
self._keys = self._rebootkeys + configkeys
self._config = getConfiguration(ctx, g_identifier, True)
self._settings = self._getSettings()
+ self._instrumented = instrumented
# OptionModel getter methods
def getConfigApiLevel(self):
@@ -58,12 +52,12 @@ def getViewData(self):
level = self._settings.get('ApiLevel')
crs = self._settings.get('CachedRowSet')
system = self._settings.get('ShowSystemTable')
- return level, crs, system, self._isRowSetEnabled(level)
+ return self._instrumented, level, crs, system, self._isRowSetEnabled(level)
# OptionModel setter methods
def setApiLevel(self, level):
self._settings['ApiLevel'] = level
- return self._isRowSetEnabled(level)
+ return self._instrumented and self._isRowSetEnabled(level)
def setCachedRowSet(self, level):
self._settings['CachedRowSet'] = level
@@ -74,11 +68,12 @@ def setSystemTable(self, state):
def saveSetting(self):
reboot = False
for key in self._keys:
- value = self._settings.get(key)
- if value != self._config.getByName(key):
- self._config.replaceByName(key, value)
- if key in self._rebootkeys:
- reboot = True
+ if key != 'CachedRowSet' or self._instrumented:
+ value = self._settings.get(key)
+ if value != self._config.getByName(key):
+ self._config.replaceByName(key, value)
+ if key in self._rebootkeys:
+ reboot = True
if self._config.hasPendingChanges():
self._config.commitChanges()
return reboot
diff --git a/uno/lib/uno/options/jdbc/optionview.py b/uno/lib/uno/options/jdbc/optionsview.py
similarity index 80%
rename from uno/lib/uno/options/jdbc/optionview.py
rename to uno/lib/uno/options/jdbc/optionsview.py
index 866dbdb9..c1b8a17f 100644
--- a/uno/lib/uno/options/jdbc/optionview.py
+++ b/uno/lib/uno/options/jdbc/optionsview.py
@@ -27,38 +27,35 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
-from ..unotool import getContainerWindow
+from ...unotool import getContainerWindow
-from ..configuration import g_identifier
+from ...configuration import g_identifier
import traceback
-class OptionWindow():
- def __init__(self, ctx, window, handler, options, restart, offset):
+class OptionsWindow():
+ def __init__(self, ctx, window, handler, options):
self._window = getContainerWindow(ctx, window.getPeer(), handler, g_identifier, 'OptionDialog')
self._window.setVisible(True)
- for crs in options:
- self._getCachedRowSet(crs).Model.Enabled = False
- self.setRestart(restart)
- self._getRestart().Model.PositionY += offset
+ self.enableCachedRowSet(False, options)
# OptionWindow setter methods
def dispose(self):
self._window.dispose()
- def initView(self, level, crs, system, enabled):
+ def initView(self, instrumented, level, crs, system, enabled):
self._getApiLevel(level).State = 1
- self._getCachedRowSet(crs).State = 1
- self.enableCachedRowSet(enabled)
+ if instrumented:
+ self._getCachedRowSet(crs).State = 1
+ else:
+ self._getCachedRowSet(0).State = 1
+ self.enableCachedRowSet(instrumented and enabled)
self._getSytemTable().State = int(system)
- def enableCachedRowSet(self, enabled):
- for crs in range(3):
- self._getCachedRowSet(crs).Model.Enabled = enabled
-
- def setRestart(self, enabled):
- self._getRestart().setVisible(enabled)
+ def enableCachedRowSet(self, enabled, options=(0, 1, 2)):
+ for index in options:
+ self._getCachedRowSet(index).Model.Enabled = enabled
# OptionWindow private control methods
def _getApiLevel(self, index):
@@ -70,6 +67,3 @@ def _getCachedRowSet(self, index):
def _getSytemTable(self):
return self._window.getControl('CheckBox1')
- def _getRestart(self):
- return self._window.getControl('Label3')
-
diff --git a/uno/lib/uno/options/ucb/optionsmanager.py b/uno/lib/uno/options/ucb/optionsmanager.py
index ccbc5ba6..3aaa5ef8 100644
--- a/uno/lib/uno/options/ucb/optionsmanager.py
+++ b/uno/lib/uno/options/ucb/optionsmanager.py
@@ -55,10 +55,10 @@ def __init__(self, ctx, source, logger, window):
self._ctx = ctx
self._logger = logger
self._model = OptionsModel(ctx)
- self._view = OptionsView(window, *self._model.getInitData())
+ self._view = OptionsView(window, OptionsManager._restart, *self._model.getInitData())
self._logmanager = LogManager(ctx, window, 'requirements.txt', g_defaultlog, g_synclog)
self._logmanager.initView()
- self._view.setViewData(*self._model.getViewData(OptionsManager._restart))
+ self._view.setViewData(OptionsManager._restart, *self._model.getViewData())
self._logger.logprb(INFO, 'OptionsManager', '__init__', 151)
try:
url = getDataBaseUrl(ctx)
@@ -71,7 +71,7 @@ def __init__(self, ctx, source, logger, window):
_restart = False
def loadSetting(self):
- self._view.setViewData(*self._model.getViewData(OptionsManager._restart))
+ self._view.setViewData(OptionsManager._restart, *self._model.getViewData())
self._logmanager.loadSetting()
self._logger.logprb(INFO, 'OptionsManager', 'loadSetting', 161)
@@ -80,14 +80,14 @@ def saveSetting(self):
changed = self._logmanager.saveSetting()
if changed:
OptionsManager._restart = True
- self._view.setRestart(True)
+ self._view.setWarning(True, self._model.isInstrumented())
self._logger.logprb(INFO, 'OptionsManager', 'saveSetting', 171, option, changed)
def enableShare(self, enabled):
self._view.enableShare(enabled)
def enableSync(self, enabled):
- self._view.enableSync(enabled, OptionsManager._restart, self._model.hasDataBase())
+ self._view.enableSync(OptionsManager._restart, self._model.isInstrumented(), enabled, self._model.hasDataBase())
def setReset(self, enabled):
self._view.enableResetFile(enabled)
@@ -103,10 +103,10 @@ def viewFile(self):
fp.dispose()
def download(self):
- self._view.setStep(1, OptionsManager._restart)
+ self._view.setStep(1, OptionsManager._restart, self._model.isInstrumented())
def upload(self):
- self._view.setStep(2, OptionsManager._restart)
+ self._view.setStep(2, OptionsManager._restart, self._model.isInstrumented())
def spinUp(self, index):
self._view.setChunk(index, self._view.getChunk(index) * 2)
diff --git a/uno/lib/uno/options/ucb/optionsmodel.py b/uno/lib/uno/options/ucb/optionsmodel.py
index 4061f310..d912b59f 100644
--- a/uno/lib/uno/options/ucb/optionsmodel.py
+++ b/uno/lib/uno/options/ucb/optionsmodel.py
@@ -31,6 +31,8 @@
from com.sun.star.ucb.SynchronizePolicy import CLIENT_IS_MASTER
from com.sun.star.ucb.SynchronizePolicy import NONE_IS_MASTER
+from ..jdbcdriver import isInstrumented
+
from ..unotool import getConfiguration
from ..unotool import getResourceLocation
from ..unotool import getSimpleFile
@@ -50,6 +52,7 @@ class OptionsModel():
def __init__(self, ctx):
self._config = getConfiguration(ctx, g_identifier, True)
self._common = getConfiguration(ctx, 'org.openoffice.Office.Common', True)
+ self._instrumented = isInstrumented(ctx, 'xdbc:hsqldb:')
self._url = getResourceLocation(ctx, g_identifier)
self._policies = {'SERVER_IS_MASTER': 1, 'CLIENT_IS_MASTER': 2, 'NONE_IS_MASTER': 3}
self._factors = {'Timeout': 60, 'Chunk': 1024}
@@ -57,8 +60,8 @@ def __init__(self, ctx):
self._hasdatabase = sf.exists(self.getDatasourceUrl())
self._hasfile = sf.exists(self.getFileUrl())
self._resolver = getStringResource(ctx, g_identifier, 'dialogs', 'OptionsDialog')
- self._resources = {'Link': 'OptionsDialog.Hyperlink1.Link'}
-
+ self._resources = {'Link': 'OptionsDialog.Hyperlink1.Url',
+ 'Url': 'OptionsDialog.Hyperlink2.Url'}
@property
def _ResetSync(self):
@@ -95,15 +98,18 @@ def _Macro(self):
# OptionsModel getter methods
def getInitData(self):
resumable = self._config.getByName('ResumableUpload')
- return self._hasdatabase, self._hasfile, resumable, self._getLink()
+ return self._getUrl(), self._instrumented, self._hasdatabase, self._hasfile, resumable, self._getLink()
+
+ def isInstrumented(self):
+ return self._instrumented
def hasDataBase(self):
return self._hasdatabase
- def getViewData(self, restart):
- return (self._hasdatabase, self._ResetSync, self._SupportShare,
- self._IsShared, self._ShareName, self._Policy,
- self._Timeout, self._Download, self._Upload, self._Macro, restart)
+ def getViewData(self):
+ return (self._instrumented, self._hasdatabase, self._ResetSync,
+ self._SupportShare, self._IsShared, self._ShareName,
+ self._Policy, self._Timeout, self._Download, self._Upload, self._Macro)
def getDatasourceUrl(self):
folder = g_ucbseparator + g_folder + g_ucbseparator + g_scheme
@@ -188,6 +194,10 @@ def _setMacro(self, enabled):
if enabled != self._Macro:
self._common.replaceByHierarchicalName('Misc/UseSystemFileDialog', enabled)
+ def _getUrl(self):
+ resource = self._resources.get('Url')
+ return self._resolver.resolveString(resource)
+
def _getLink(self):
resource = self._resources.get('Link')
return self._resolver.resolveString(resource)
diff --git a/uno/lib/uno/options/ucb/optionsview.py b/uno/lib/uno/options/ucb/optionsview.py
index 7e058c83..7d6603ec 100644
--- a/uno/lib/uno/options/ucb/optionsview.py
+++ b/uno/lib/uno/options/ucb/optionsview.py
@@ -31,7 +31,7 @@
class OptionsView():
- def __init__(self, window, exist, hasfile, resumable, link):
+ def __init__(self, window, restart, url, instrumented, exist, hasfile, resumable, link):
self._window = window
if exist:
self._disableShare()
@@ -41,6 +41,9 @@ def __init__(self, window, exist, hasfile, resumable, link):
self._getFile().Model.Enabled = hasfile
self._getUpload().Model.Enabled = resumable
self._getLink().URL = link
+ control = self._getWarning()
+ control.URL = url
+ self._setWarning(control, restart, instrumented)
# OptionsView getter methods
def getViewData(self):
@@ -59,13 +62,16 @@ def getChunk(self, index):
return int(self._getChunk(index).Value)
# OptionsView setter methods
- def setStep(self, step, restart):
+ def setWarning(self, restart, instrumented):
+ self._setWarning(self._getWarning(), restart, instrumented)
+
+ def setStep(self, step, restart, instrumented):
self._window.Model.Step = step
# XXX: If we change the step, we have to restore the visibility of the controls
# XXX: because it was lost (ie: after setting the new step everything is visible).
- self.setRestart(restart)
+ self.setWarning(restart, instrumented)
- def setViewData(self, exist, reset, support, share, name, index, timeout, download, upload, macro, restart):
+ def setViewData(self, restart, instrumented, exist, reset, support, share, name, index, timeout, download, upload, macro):
self._getResetSync().State = int(reset != 0)
self._getResetFile().State = int(reset == 2)
self.enableResetFile(reset != 0)
@@ -80,22 +86,22 @@ def setViewData(self, exist, reset, support, share, name, index, timeout, downlo
self._getShareName().Text = name
self.enableShare(False)
self._getOption(index).State = 1
- self.enableSync(index != 3, restart, exist)
+ self.enableSync(restart, instrumented, index != 3, exist)
self._getTimeout().Value = timeout
self._setSetting(download, 0)
self._setSetting(upload, 1)
self._getMacro().State = int(macro)
self.enableCustomize(macro)
- self.setRestart(restart)
+ self.setWarning(restart, instrumented)
def enableShare(self, enabled):
self._getShareName().Model.Enabled = enabled
- def enableSync(self, enabled, restart, exist):
+ def enableSync(self, restart, instrumented, enabled, exist):
self._getResetSync().Model.Enabled = enabled and exist
self._getTimeoutLabel().Model.Enabled = enabled
self._getTimeout().Model.Enabled = enabled
- self._enableUpload(enabled, restart)
+ self._enableUpload(restart, instrumented, enabled)
def enableResetFile(self, enabled):
self._getResetFile().Model.Enabled = enabled
@@ -106,9 +112,6 @@ def enableCustomize(self, enabled):
self._getLink().Model.Enabled = enabled
self._getCustomize().Model.Enabled = enabled
- def setRestart(self, enabled):
- self._getRestart().setVisible(enabled)
-
def setChunk(self, index, chunk):
control = self._getChunk(index)
control.Value = chunk
@@ -130,6 +133,14 @@ def _getSetting(self, index):
'Retry': int(self._getRetry(index).Value)}
# OptionsView private setter methods
+ def _setWarning(self, control, restart, instrumented):
+ if restart:
+ control.setVisible(False)
+ self._getRestart().setVisible(True)
+ else:
+ self._getRestart().setVisible(False)
+ control.setVisible(not instrumented)
+
def _disableShare(self):
self._getShare().Model.Enabled = False
self._getShareName().Model.Enabled = False
@@ -139,11 +150,11 @@ def _setSetting(self, setting, index):
self._getDelay(index).Value = setting.get('Delay')
self._getRetry(index).Value = setting.get('Retry')
- def _enableUpload(self, enabled, restart):
+ def _enableUpload(self, restart, instrumented, enabled):
control = self._getUpload()
if not enabled and control.State:
self._getDownload().State = 1
- self.setStep(1, restart)
+ self.setStep(1, restart, instrumented)
control.Model.Enabled = enabled
# OptionsView private control methods
@@ -200,9 +211,6 @@ def _getRetry(self, index):
index += 6
return self._window.getControl('NumericField%s' % index)
- def _getRestart(self):
- return self._window.getControl('Label8')
-
def _getMacro(self):
return self._window.getControl('CheckBox4')
@@ -212,3 +220,9 @@ def _getLink(self):
def _getCustomize(self):
return self._window.getControl('CommandButton7')
+ def _getRestart(self):
+ return self._window.getControl('Label8')
+
+ def _getWarning(self):
+ return self._window.getControl('Hyperlink2')
+
diff --git a/uno/lib/uno/ucb/__init__.py b/uno/lib/uno/ucb/__init__.py
index 45be9115..621a3b35 100644
--- a/uno/lib/uno/ucb/__init__.py
+++ b/uno/lib/uno/ucb/__init__.py
@@ -33,7 +33,7 @@
from .dispatch import Dispatch
-from .unotool import hasInterface
+from .unotool import hasFrameInterface
from .logger import getLogger
diff --git a/uno/lib/uno/ucb/datasource.py b/uno/lib/uno/ucb/datasource.py
index d62020d0..606dd974 100644
--- a/uno/lib/uno/ucb/datasource.py
+++ b/uno/lib/uno/ucb/datasource.py
@@ -124,7 +124,7 @@ def _getUser(self, source, authority, url):
name = uri.getAuthority()
else:
title, msg = self._getExceptionMessage(322, url)
- showWarning(self._ctx, msg, title)
+ showWarning(self._ctx, title, msg)
raise IllegalIdentifierException(msg, source)
elif self._default:
name = self._default
@@ -138,7 +138,7 @@ def _getUser(self, source, authority, url):
# XXX: The user's OAuth2 configuration has been deleted and
# XXX: the OAuth2 configuration wizard has been canceled.
title, msg = self._getExceptionMessage(324, name)
- showWarning(self._ctx, msg, title)
+ showWarning(self._ctx, title, msg)
raise IllegalIdentifierException(msg, source)
else:
user = User(self._ctx, source, self._logger, self.DataBase,
@@ -153,11 +153,11 @@ def _getUser(self, source, authority, url):
def _getUserName(self, source, url):
try:
name = getOAuth2UserName(self._ctx, source, self._provider.Scheme)
- except Exception as e:
- print("DataSource._getUserName() ERROR: %s - %s" % (e, traceback.format_exc()))
+ except:
+ print("DataSource._getUserName() ERROR: %s" % traceback.format_exc())
if not name:
title, msg = self._getExceptionMessage(331, url)
- showWarning(self._ctx, msg, title)
+ showWarning(self._ctx, title, msg)
raise IllegalIdentifierException(msg, source)
return name
diff --git a/uno/lib/uno/ucb/dispatch.py b/uno/lib/uno/ucb/dispatch.py
index 68d3cec5..2c76f680 100644
--- a/uno/lib/uno/ucb/dispatch.py
+++ b/uno/lib/uno/ucb/dispatch.py
@@ -41,10 +41,7 @@
from com.sun.star.frame.DispatchResultState import FAILURE
from .unotool import createService
-from .unotool import getArgumentSet
from .unotool import getDesktop
-from .unotool import getMessageBox
-from .unotool import getToolKit
import traceback
@@ -79,8 +76,6 @@ def dispatch(self, url, arguments):
elif url.Path == 'SaveAs':
document = self._frame.getController().getModel()
state = self._saveAs(document)
- elif url.Path == 'ShowWarning':
- state = self._showWarning(arguments)
return state, result
def addStatusListener(self, listener, url):
@@ -95,6 +90,7 @@ def removeStatusListener(self, listener, url):
if listener in self._listeners:
self._listeners.remove(listener)
+# Private methods
def _open(self):
state = FAILURE
fp = createService(self._ctx, self._service, FILEOPEN_SIMPLE)
@@ -126,11 +122,3 @@ def _saveAs(self, document):
fp.dispose()
return state
- def _showWarning(self, arguments):
- toolkit = getToolKit(self._ctx)
- peer = toolkit.getActiveTopWindow()
- args = getArgumentSet(arguments)
- msgbox = getMessageBox(toolkit, peer, args['Box'], args['Button'], args['Title'], args['Message'])
- msgbox.execute()
- msgbox.dispose()
- return SUCCESS
diff --git a/uno/lib/uno/ucb/helper.py b/uno/lib/uno/ucb/helper.py
index aaf119a6..e1c835e9 100644
--- a/uno/lib/uno/ucb/helper.py
+++ b/uno/lib/uno/ucb/helper.py
@@ -29,11 +29,6 @@
import uno
-from com.sun.star.connection import NoConnectException
-
-from com.sun.star.logging.LogLevel import INFO
-from com.sun.star.logging.LogLevel import SEVERE
-
from com.sun.star.ucb.ContentAction import INSERTED
from com.sun.star.ucb.ContentAction import REMOVED
from com.sun.star.ucb.ContentAction import DELETED
@@ -42,9 +37,6 @@
from com.sun.star.ucb import IllegalIdentifierException
from com.sun.star.ucb import InteractiveAugmentedIOException
-from com.sun.star.ucb.ConnectionMode import ONLINE
-from com.sun.star.ucb.ConnectionMode import OFFLINE
-
from com.sun.star.sdb import ParametersRequest
from .dbtool import getConnectionUrl
@@ -53,17 +45,10 @@
from .unotool import checkVersion
from .unotool import createMessageBox
-from .unotool import createService
-from .unotool import executeDispatch
from .unotool import hasInterface
-from .unotool import getDesktop
-from .unotool import getDispatcher
from .unotool import getExtensionVersion
-from .unotool import getNamedValueSet
-from .unotool import getParentWindow
from .unotool import getProperty
from .unotool import getPropertyValue
-from .unotool import getPropertyValueSet
from .unotool import getSimpleFile
from .unotool import parseUrl
@@ -86,6 +71,8 @@
from .ucp import g_ucbseparator
+import traceback
+
def getPresentationUrl(transformer, url):
# FIXME: Sometimes the url can end with a dot, it must be removed
@@ -218,10 +205,10 @@ def getExceptionMessage(logger, code, extension, *args):
message = logger.resolveString(code + 1, *args)
return title, message
-def showWarning(ctx, message, title):
- box = uno.Enum('com.sun.star.awt.MessageBoxType', 'ERRORBOX')
- args = {'Box': box, 'Button': 1, 'Title': title, 'Message': message}
- executeDispatch(ctx, '%s:ShowWarning' % g_scheme, **args)
+def showWarning(ctx, title, message):
+ msgbox = createMessageBox(ctx, title, message)
+ msgbox.execute()
+ msgbox.dispose()
# Private method
def _checkConfiguration(ctx, source, logger, warn):
@@ -230,22 +217,22 @@ def _checkConfiguration(ctx, source, logger, warn):
if oauth2 is None:
title, msg = getExceptionMessage(logger, 801, g_oauth2ext, g_oauth2ext, g_extension)
if warn:
- showWarning(ctx, msg, title)
+ showWarning(ctx, title, msg)
raise IllegalIdentifierException(msg, source)
if not checkVersion(oauth2, g_oauth2ver):
title, msg = getExceptionMessage(logger, 803, g_oauth2ext, oauth2, g_oauth2ext, g_oauth2ver)
if warn:
- showWarning(ctx, msg, title)
+ showWarning(ctx, title, msg)
raise IllegalIdentifierException(msg, source)
if driver is None:
title, msg = getExceptionMessage(logger, 801, g_jdbcext, g_jdbcext, g_extension)
if warn:
- showWarning(ctx, msg, title)
+ showWarning(ctx, title, msg)
raise IllegalIdentifierException(msg, source)
if not checkVersion(driver, g_jdbcver):
title, msg = getExceptionMessage(logger, 803, g_jdbcext, driver, g_jdbcext, g_jdbcver)
if warn:
- showWarning(ctx, msg, title)
+ showWarning(ctx, title, msg)
raise IllegalIdentifierException(msg, source)
def _getDataSourceConnection(ctx, url, new, infos=None):
@@ -259,7 +246,7 @@ def _checkConnection(ctx, source, connection, logger, new, warn):
connection.close()
title, msg = getExceptionMessage(logger, 811, g_jdbcext, version, g_version)
if warn:
- showWarning(ctx, msg, title)
+ showWarning(ctx, title, msg)
raise IllegalIdentifierException(msg, source)
service = 'com.sun.star.sdb.Connection'
interface = 'com.sun.star.sdbcx.XGroupsSupplier'
@@ -267,7 +254,7 @@ def _checkConnection(ctx, source, connection, logger, new, warn):
connection.close()
title, msg = getExceptionMessage(logger, 813, g_jdbcext, service, interface)
if warn:
- showWarning(ctx, msg, title)
+ showWarning(ctx, title, msg)
raise IllegalIdentifierException(msg, source)
def _checkConnectionApi(connection, service, interface):
diff --git a/uno/lib/uno/ucb/ucp/user.py b/uno/lib/uno/ucb/ucp/user.py
index 4167cb59..f03eea2c 100644
--- a/uno/lib/uno/ucb/ucp/user.py
+++ b/uno/lib/uno/ucb/ucp/user.py
@@ -91,29 +91,29 @@ def __init__(self, ctx, source, logger, database, provider, sync, name, password
# If we have a Null value here then it means that the user has abandoned
# the OAuth2 Wizard, there is nothing more to do except throw an exception
title, msg = self._getExceptionMessage(501, name)
- showWarning(self._ctx, msg, title)
+ showWarning(self._ctx, title, msg)
raise IllegalIdentifierException(msg, source)
else:
if not self.Provider.isOnLine():
title, msg = self._getExceptionMessage(503, name)
- showWarning(self._ctx, msg, title)
+ showWarning(self._ctx, title, msg)
raise IllegalIdentifierException(msg, source)
request = getRequest(ctx, self.Provider.Scheme, name)
if request is None:
# If we have a Null value here then it means that the user has abandoned
# the OAuth2 Wizard, there is nothing more to do except throw an exception
title, msg = self._getExceptionMessage(501, g_service)
- showWarning(self._ctx, msg, title)
+ showWarning(self._ctx, title, msg)
raise IllegalIdentifierException(msg, source)
user = self.Provider.getUser(source, request, name)
metadata = database.insertUser(user)
if metadata is None:
title, msg = self._getExceptionMessage(505, name)
- showWarning(self._ctx, msg, title)
+ showWarning(self._ctx, title, msg)
raise IllegalIdentifierException(msg, source)
if not database.createUser(name, password):
title, msg = self._getExceptionMessage(507, name)
- showWarning(self._ctx, msg, title)
+ showWarning(self._ctx, title, msg)
raise IllegalIdentifierException(msg, source)
self._paths = {}
self._contents = {}
diff --git a/uno/lib/uno/unotool/__init__.py b/uno/lib/uno/unotool/__init__.py
index 4419bb72..02148529 100644
--- a/uno/lib/uno/unotool/__init__.py
+++ b/uno/lib/uno/unotool/__init__.py
@@ -27,22 +27,30 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
+from .taskevent import TaskEvent
+
+from .statusindicator import StatusIndicator
+
from .unotool import checkVersion
from .unotool import createMessageBox
from .unotool import createService
-from .unotool import createWindow
+from .unotool import executeDesktopDispatch
from .unotool import executeDispatch
from .unotool import executeFrameDispatch
from .unotool import executeShell
+from .unotool import findFrame
from .unotool import generateUuid
from .unotool import getArgumentSet
+from .unotool import getCallBack
from .unotool import getConfiguration
from .unotool import getConnectionMode
+from .unotool import getConnector
from .unotool import getContainerWindow
from .unotool import getCurrentLocale
from .unotool import getDateTime
from .unotool import getDefaultPropertyValueSet
from .unotool import getDesktop
+from .unotool import getDialogPosSize
from .unotool import getDispatcher
from .unotool import getDialog
from .unotool import getDialogUrl
@@ -55,13 +63,14 @@
from .unotool import getInteractionHandler
from .unotool import getInterfaceNames
from .unotool import getInterfaceTypes
+from .unotool import getLastNamedParts
from .unotool import getLibreOfficeInfo
from .unotool import getLibreOfficeVersion
-from .unotool import getMessageBox
+from .unotool import getMailMerge
from .unotool import getMimeTypeFactory
+from .unotool import getMri
from .unotool import getNamedValue
from .unotool import getNamedValueSet
-from .unotool import getParentWindow
from .unotool import getPathSettings
from .unotool import getPathSubstitution
from .unotool import getProperty
@@ -75,14 +84,19 @@
from .unotool import getStringResourceWithLocation
from .unotool import getTempFile
from .unotool import getToolKit
+from .unotool import getTopWindow
+from .unotool import getTopWindowPosition
from .unotool import getTypeDetection
from .unotool import getUriFactory
from .unotool import getUrl
from .unotool import getUrlPresentation
from .unotool import getUrlTransformer
+from .unotool import hasFrameInterface
from .unotool import hasInterface
from .unotool import hasService
from .unotool import parseDateTime
from .unotool import parseUrl
+from .unotool import saveTopWindowPosition
+from .unotool import setProgress
from .unotool import unparseDateTime
from .unotool import unparseTimeStamp
diff --git a/uno/lib/uno/unotool/statusindicator.py b/uno/lib/uno/unotool/statusindicator.py
new file mode 100644
index 00000000..335a2636
--- /dev/null
+++ b/uno/lib/uno/unotool/statusindicator.py
@@ -0,0 +1,90 @@
+#!
+# -*- coding: utf-8 -*-
+
+"""
+╔════════════════════════════════════════════════════════════════════════════════════╗
+║ ║
+║ Copyright (c) 2020-25 https://prrvchr.github.io ║
+║ ║
+║ Permission is hereby granted, free of charge, to any person obtaining ║
+║ a copy of this software and associated documentation files (the "Software"), ║
+║ to deal in the Software without restriction, including without limitation ║
+║ the rights to use, copy, modify, merge, publish, distribute, sublicense, ║
+║ and/or sell copies of the Software, and to permit persons to whom the Software ║
+║ is furnished to do so, subject to the following conditions: ║
+║ ║
+║ The above copyright notice and this permission notice shall be included in ║
+║ all copies or substantial portions of the Software. ║
+║ ║
+║ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ║
+║ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ║
+║ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ║
+║ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ║
+║ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ║
+║ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE ║
+║ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ║
+║ ║
+╚════════════════════════════════════════════════════════════════════════════════════╝
+"""
+
+import uno
+import unohelper
+
+from com.sun.star.awt.PosSize import SIZE
+
+from com.sun.star.task import XStatusIndicator
+
+from com.sun.star.util.MeasureUnit import APPFONT
+
+from threading import Lock
+import traceback
+
+
+class StatusIndicator(unohelper.Base,
+ XStatusIndicator):
+ def __init__(self, frame, offset=10):
+ self._window = frame.getContainerWindow()
+ self._progress = frame.createStatusIndicator()
+ self._point = uno.createUnoStruct('com.sun.star.awt.Point', 0, offset)
+ self._lock = Lock()
+ self._value = 0
+
+ def start(self, text, value):
+ self._setValue(0)
+ self._setWindowHeight()
+ self._progress.start(text, value)
+
+ def setText(self, text):
+ self._setText(text)
+
+ def setValue(self, value):
+ # XXX: In order to be able to progress in the loops it is necessary
+ # XXX: to be able to add value to the current progression value.
+ # XXX: This is what is done here thanks to a negative value
+ self._setValue(value)
+
+ def end(self):
+ self._progress.end()
+ self._setWindowHeight(-1)
+
+ def reset(self):
+ self._setValue(0)
+ self._progress.reset()
+
+ def _setText(self, text):
+ with self._lock:
+ self._progress.setText(text)
+
+ def _setValue(self, value):
+ with self._lock:
+ if value < 0:
+ self._value += abs(value)
+ else:
+ self._value = value
+ self._progress.setValue(self._value)
+
+ def _setWindowHeight(self, factor=1):
+ size = self._window.getPosSize()
+ offset = self._window.convertPointToPixel(self._point, APPFONT).Y * factor
+ self._window.setPosSize(0, 0, size.Width, size.Height + offset, SIZE)
+
diff --git a/uno/lib/uno/unotool/taskevent.py b/uno/lib/uno/unotool/taskevent.py
new file mode 100644
index 00000000..300197d3
--- /dev/null
+++ b/uno/lib/uno/unotool/taskevent.py
@@ -0,0 +1,58 @@
+#!
+# -*- coding: utf-8 -*-
+
+"""
+╔════════════════════════════════════════════════════════════════════════════════════╗
+║ ║
+║ Copyright (c) 2020-25 https://prrvchr.github.io ║
+║ ║
+║ Permission is hereby granted, free of charge, to any person obtaining ║
+║ a copy of this software and associated documentation files (the "Software"), ║
+║ to deal in the Software without restriction, including without limitation ║
+║ the rights to use, copy, modify, merge, publish, distribute, sublicense, ║
+║ and/or sell copies of the Software, and to permit persons to whom the Software ║
+║ is furnished to do so, subject to the following conditions: ║
+║ ║
+║ The above copyright notice and this permission notice shall be included in ║
+║ all copies or substantial portions of the Software. ║
+║ ║
+║ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ║
+║ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ║
+║ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ║
+║ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ║
+║ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ║
+║ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE ║
+║ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ║
+║ ║
+╚════════════════════════════════════════════════════════════════════════════════════╝
+"""
+
+import unohelper
+
+from com.sun.star.task import XTaskEvent
+
+from threading import Event
+import traceback
+
+
+class TaskEvent(unohelper.Base,
+ XTaskEvent):
+ def __init__(self, set=False):
+ self._event = Event()
+ if set:
+ self._event.set()
+
+ def isSet(self):
+ return self._event.is_set()
+
+ def set(self):
+ self._event.set()
+
+ def clear(self):
+ return self._event.clear()
+
+ def wait(self, timeout):
+ if timeout <= 0:
+ timeout = None
+ return self._event.wait(timeout)
+
diff --git a/uno/lib/uno/unotool/unotool.py b/uno/lib/uno/unotool/unotool.py
index 66f4d5c5..7a186395 100644
--- a/uno/lib/uno/unotool/unotool.py
+++ b/uno/lib/uno/unotool/unotool.py
@@ -29,7 +29,21 @@
import uno
+from com.sun.star.awt import Point
from com.sun.star.awt import Rectangle
+from com.sun.star.awt import Size
+
+from com.sun.star.awt.MessageBoxType import ERRORBOX
+
+from com.sun.star.awt.WindowAttribute import SHOW
+from com.sun.star.awt.WindowAttribute import MINSIZE
+from com.sun.star.awt.WindowAttribute import BORDER
+from com.sun.star.awt.WindowAttribute import MOVEABLE
+from com.sun.star.awt.WindowAttribute import CLOSEABLE
+from com.sun.star.awt.WindowAttribute import NODECORATION
+
+from com.sun.star.awt.WindowClass import TOP
+from com.sun.star.awt.WindowClass import CONTAINER
from com.sun.star.beans.PropertyState import DIRECT_VALUE
@@ -37,6 +51,8 @@
from com.sun.star.document.MacroExecMode import ALWAYS_EXECUTE_NO_WARN
+from com.sun.star.frame.FrameSearchFlag import GLOBAL
+
from com.sun.star.lang import WrappedTargetRuntimeException
from com.sun.star.ucb.ConnectionMode import ONLINE
@@ -44,6 +60,8 @@
from com.sun.star.ui.dialogs.ExecutableDialogResults import OK
+from com.sun.star.util.MeasureUnit import APPFONT
+
import binascii
import datetime
from packaging import version
@@ -51,16 +69,22 @@
def getConnectionMode(ctx, host, port=80):
- connector = createService(ctx, 'com.sun.star.connection.Connector')
+ connector = getConnector(ctx)
try:
connection = connector.connect('socket,host=%s,port=%s' % (host, port))
except NoConnectException:
mode = OFFLINE
else:
- connection.close()
+ try:
+ connection.close()
+ except:
+ pass
mode = ONLINE
return mode
+def getConnector(ctx):
+ return createService(ctx, 'com.sun.star.connection.Connector')
+
def getDesktop(ctx):
return createService(ctx, 'com.sun.star.frame.Desktop')
@@ -94,6 +118,15 @@ def getUrlTransformer(ctx):
def getInteractionHandler(ctx):
return createService(ctx, 'com.sun.star.task.InteractionHandler')
+def getMailMerge(ctx):
+ return createService(ctx, 'com.sun.star.text.MailMerge')
+
+def getMri(ctx):
+ return createService(ctx, 'mytools.Mri')
+
+def getCallBack(ctx):
+ return createService(ctx, 'com.sun.star.awt.AsyncCallback')
+
def getSequenceInputStream(ctx, sequence):
service = 'com.sun.star.io.SequenceInputStream'
return createService(ctx, service, sequence)
@@ -119,11 +152,14 @@ def parseUrl(transformer, location, protocol=None):
success, url = transformer.parseSmart(url, protocol)
return url if success else None
-def getDocument(ctx, url):
- properties = {'Hidden': True,
- 'OpenNewView': True,
- 'MacroExecutionMode': ALWAYS_EXECUTE_NO_WARN}
- descriptor = getPropertyValueSet(properties)
+def getDocument(ctx, url, readonly=True):
+ # XXX: ReadOnly: documents opened for mailing are opened readonly because they must
+ # XXX: be opened as a new document and this document could be open already
+ # XXX: OpenNewView: always open a new document because it must be disposed afterwards.
+ # XXX: Hidden: mailing is done in a hidden view
+ # XXX: Silence: load document for mailing without user interaction
+ arguments = {'ReadOnly': readonly, 'OpenNewView': True, 'Hidden': True, 'Silence': True}
+ descriptor = getPropertyValueSet(arguments)
document = getDesktop(ctx).loadComponentFromURL(url, '_blank', 0, descriptor)
return document
@@ -182,6 +218,11 @@ def hasInterface(component, interface):
return True
return False
+def hasFrameInterface(component):
+ frame = 'com.sun.star.frame.XFrame2'
+ desktop = 'com.sun.star.frame.XDesktop2'
+ return hasInterface(component, frame) or hasInterface(component, desktop)
+
def hasService(ctx, name):
service = createService(ctx, name)
return service is not None
@@ -218,6 +259,12 @@ def getExtensionVersion(ctx, extension):
return version
return None
+def getLastNamedParts(name, sep='.'):
+ part1, sep, part2 = name.rpartition(sep)
+ if not sep:
+ part1, part2 = part2, None
+ return part1, part2
+
def getLibreOfficeInfo(ctx):
config = getConfiguration(ctx, '/org.openoffice.Setup/Product')
name = config.getByName('ooName')
@@ -279,23 +326,67 @@ def getStringResourceWithLocation(ctx, url, filename, locale=None):
def generateUuid():
return binascii.hexlify(uno.generateUuid().value).decode('utf-8')
-def getDialog(ctx, identifier, xdl, handler=None, window=None):
+def setProgress(callback, caller, value):
+ data = {'call': 'progress', 'value': value}
+ callback.addCallback(caller, getNamedValueSet(data))
+
+def getDialog(ctx, identifier, xdl, handler=None, parent=None):
dialog = None
provider = createService(ctx, 'com.sun.star.awt.DialogProvider2')
url = getDialogUrl(identifier, xdl)
- if handler is None and window is None:
- dialog = provider.createDialog(url)
- toolkit = createService(ctx, 'com.sun.star.awt.Toolkit')
- dialog.createPeer(toolkit, None)
- elif handler is not None and window is None:
- dialog = provider.createDialogWithHandler(url, handler)
- toolkit = createService(ctx, 'com.sun.star.awt.Toolkit')
- dialog.createPeer(toolkit, None)
+ if handler and parent:
+ properties = getNamedValueSet({'ParentWindow': parent, 'EventHandler': handler})
+ dialog = provider.createDialogWithArguments(url, properties)
else:
- args = getNamedValueSet({'ParentWindow': window, 'EventHandler': handler})
- dialog = provider.createDialogWithArguments(url, args)
+ if handler:
+ dialog = provider.createDialogWithHandler(url, handler)
+ else:
+ dialog = provider.createDialog(url)
+ toolkit = getToolKit(ctx)
+ dialog.createPeer(toolkit, toolkit.getDesktopWindow())
return dialog
+def findFrame(ctx, name, flags=GLOBAL):
+ return getDesktop(ctx).findFrame(name, flags)
+
+def getDialogPosSize(ctx, extension, xdl, point=None, unit=APPFONT):
+ dialog = getDialog(ctx, extension, xdl)
+ size = dialog.convertSizeToPixel(Size(dialog.Model.Width, dialog.Model.Height), unit)
+ dialog.dispose()
+ if point is None:
+ point = Point(0, 0)
+ return Rectangle(point.X, point.Y, size.Width, size.Height)
+
+def getTopWindow(ctx, name, rectangle=None, parent=None, modal=TOP, attrs=BORDER | MOVEABLE | CLOSEABLE | NODECORATION):
+ descriptor = uno.createUnoStruct('com.sun.star.awt.WindowDescriptor')
+ descriptor.Type = modal
+ descriptor.WindowServiceName = 'window'
+ if parent:
+ descriptor.Parent = parent
+ else:
+ descriptor.ParentIndex = -1
+ if rectangle:
+ attrs |= SHOW
+ descriptor.Bounds = rectangle
+ descriptor.WindowAttributes = attrs
+ # XXX: We use the TaskCreator UNO service instead of Frame
+ # XXX: in order to be able to assign a title to the window.
+ service = 'com.sun.star.frame.TaskCreator'
+ arguments = {'FrameName': name, 'ContainerWindow': getToolKit(ctx).createWindow(descriptor)}
+ frame = createService(ctx, service).createInstanceWithArguments(getNamedValueSet(arguments))
+ getDesktop(ctx).getFrames().append(frame)
+ return frame
+
+def getTopWindowPosition(window):
+ size = window.getPosSize()
+ return Point(size.X, size.Y)
+
+def saveTopWindowPosition(config, position, property):
+ if config.hasByName(property):
+ any = uno.Any('[]long', (position.X, position.Y))
+ uno.invoke(config, 'replaceByName', (property, any))
+ config.commitChanges()
+
def getContainerWindow(ctx, parent, handler, identifier, xdl):
service = 'com.sun.star.awt.ContainerWindowProvider'
provider = createService(ctx, service)
@@ -313,15 +404,10 @@ def getFileUrl(ctx, title, path, filters=(), multi=False):
filepicker.setCurrentFilter(name)
filepicker.setMultiSelectionMode(multi)
if filepicker.execute() == OK:
- url = filepicker.getFiles()[0]
if multi:
- try:
- urls = filepicker.getSelectedFiles()
- except:
- urls = filepicker.getFiles()
- if len(urls) > 1:
- urls = [url + u for u in urls[1:]]
- url = urls
+ url = filepicker.getSelectedFiles()
+ else:
+ url = filepicker.getSelectedFiles()[0]
path = filepicker.getDisplayDirectory()
filepicker.dispose()
return url, path
@@ -333,10 +419,22 @@ def executeShell(ctx, url, option=''):
shell = createService(ctx, 'com.sun.star.system.SystemShellExecute')
shell.execute(url, option, 0)
-def executeDispatch(ctx, url, /, **args):
- frame = getDesktop(ctx).getCurrentFrame()
- arguments = getPropertyValueSet(args)
- getDispatcher(ctx).executeDispatch(frame, url, '', 0, arguments)
+def executeDispatch(ctx, url, /, **kwargs):
+ frame = _getCurrentFrame(ctx)
+ properties = getPropertyValueSet(kwargs)
+ getDispatcher(ctx).executeDispatch(frame, url, '', 0, properties)
+
+def executeDesktopDispatch(ctx, url, listener=None, /, **kwargs):
+ frame = _getCurrentFrame(ctx)
+ properties = getPropertyValueSet(kwargs)
+ executeFrameDispatch(ctx, frame, url, listener, *properties)
+
+def _getCurrentFrame(ctx):
+ desktop = getDesktop(ctx)
+ frame = desktop.getCurrentFrame()
+ if frame is None:
+ frame = desktop
+ return frame
def executeFrameDispatch(ctx, frame, url, listener=None, /, *properties):
url = getUrl(ctx, url)
@@ -347,11 +445,11 @@ def executeFrameDispatch(ctx, frame, url, listener=None, /, *properties):
else:
dispatcher.dispatch(url, properties)
-def createMessageBox(peer, box, button, title, message):
- return getMessageBox(peer.getToolkit(), peer, box, button, title, message)
-
-def getMessageBox(toolkit, peer, box, button, title, message):
- return toolkit.createMessageBox(peer, box, button, title, message)
+def createMessageBox(ctx, title, message, box=ERRORBOX, button=1, parent=None):
+ toolkit = getToolKit(ctx)
+ if parent is None:
+ parent = toolkit.getDesktopWindow()
+ return toolkit.createMessageBox(parent, box, button, title, message)
def createService(ctx, name, *args, **kwargs):
if args:
@@ -363,10 +461,13 @@ def createService(ctx, name, *args, **kwargs):
service = ctx.ServiceManager.createInstanceWithContext(name, ctx)
return service
-def getArgumentSet(properties):
+def getArgumentSet(properties, lower=True):
arguments = {}
for property in properties:
- arguments[property.Name] = property.Value
+ name = property.Name
+ if lower:
+ name = name.lower()
+ arguments[name] = property.Value
return arguments
def getDefaultPropertyValueSet(args, default):
@@ -408,19 +509,6 @@ def getPropertySetInfoChangeEvent(source, name, reason, handle=-1):
event.Handle = handle
event.Reason = reason
-def createWindow(ctx, extension, xdl, name):
- dialog = getDialog(ctx, extension, xdl, None, None)
- possize = Rectangle(dialog.Model.PositionX, dialog.Model.PositionY, dialog.Model.Width, dialog.Model.Height)
- dialog.dispose()
- desktop = getDesktop(ctx)
- args = getNamedValueSet({'FrameName': name, 'PosSize': possize})
- frame = createService(ctx, 'com.sun.star.frame.TaskCreator').createInstanceWithArguments(args)
- frames = desktop.getFrames()
- frame.setTitle(_getUniqueName(frames, name))
- frame.setCreator(desktop)
- frames.append(frame)
- return frame.getContainerWindow()
-
def _getUniqueName(frames, name):
count = 0
for i in range(frames.getCount()):
@@ -430,15 +518,6 @@ def _getUniqueName(frames, name):
name = '%s - %s' % (name, (count +1))
return name
-
-def getParentWindow(ctx):
- desktop = getDesktop(ctx)
- try:
- parent = desktop.getCurrentFrame().getContainerWindow()
- except:
- parent = None
- return parent
-
def getDateTime(utc=True):
if utc:
t = datetime.datetime.utcnow()
diff --git a/uno/lib/uno/wizard/__init__.py b/uno/lib/uno/wizard/__init__.py
index 47432631..0f7a7349 100644
--- a/uno/lib/uno/wizard/__init__.py
+++ b/uno/lib/uno/wizard/__init__.py
@@ -28,3 +28,4 @@
"""
from .wizard import Wizard
+
diff --git a/uno/lib/uno/wizard/wizard.py b/uno/lib/uno/wizard/wizard.py
index bd30d116..a6050a67 100644
--- a/uno/lib/uno/wizard/wizard.py
+++ b/uno/lib/uno/wizard/wizard.py
@@ -30,16 +30,15 @@
import uno
import unohelper
-from com.sun.star.logging.LogLevel import SEVERE
-
-from com.sun.star.ui.dialogs import XWizard
+from com.sun.star.container import NoSuchElementException
+from com.sun.star.lang import XComponent
from com.sun.star.lang import XInitialization
from com.sun.star.lang import IllegalArgumentException
-from com.sun.star.util import InvalidStateException
+from com.sun.star.logging.LogLevel import SEVERE
-from com.sun.star.container import NoSuchElementException
+from com.sun.star.ui.dialogs import XWizard
from com.sun.star.ui.dialogs.ExecutableDialogResults import CANCEL
from com.sun.star.ui.dialogs.ExecutableDialogResults import OK
@@ -48,24 +47,30 @@
from com.sun.star.ui.dialogs.WizardTravelType import BACKWARD
from com.sun.star.ui.dialogs.WizardTravelType import FINISH
+from com.sun.star.util import CloseVetoException
+from com.sun.star.util import InvalidStateException
+
from .wizardmodel import WizardModel
+
from .wizardview import WizardView
+
+from .wizardhandler import CloseListener
from .wizardhandler import DialogHandler
from .wizardhandler import ItemListener
+from .wizardhandler import WindowHandler
-from ..logger import getLogger
+from ...logger import getLogger
-from ..unotool import hasInterface
+from ...unotool import hasInterface
-from ..configuration import g_extension
+from ...configuration import g_extension
import traceback
class Wizard(unohelper.Base,
- XWizard,
- XInitialization):
- def __init__(self, ctx, auto=-1, resize=False, parent=None):
+ XWizard):
+ def __init__(self, ctx, auto=-1, name=None, point=None, parent=None, resize=True):
self._ctx = ctx
self._helpUrl = ''
self._auto = auto
@@ -74,12 +79,26 @@ def __init__(self, ctx, auto=-1, resize=False, parent=None):
self._currentPath = -1
self._multiPaths = False
self._controller = None
+ self._closed = False
self._model = WizardModel(ctx)
title = self._model.getRoadmapTitle()
- self._view = WizardView(ctx, DialogHandler(self), ItemListener(self), parent, title)
+ if name:
+ handler, self._listener = WindowHandler(self), CloseListener(self)
+ else:
+ handler, self._listener = DialogHandler(self), None
+ self._view = WizardView(ctx, handler, self._listener, ItemListener(self), parent, name, title, resize, point)
roadmap = self._view.getRoadmapModel()
self._model.setRoadmapModel(roadmap)
+# XCloseListener
+ def queryClosing(self, source, ownership):
+ self._queryClosing(ownership)
+
+ def notifyClosing(self, source):
+ if self._listener:
+ source.removeCloseListener(self._listener)
+ self._dispose()
+
# XWizard
# XWizard Attributes
@property
@@ -93,7 +112,7 @@ def HelpURL(self, url):
@property
def DialogWindow(self):
- return self._view.getDialog()
+ return self._view.getDialogWindow()
# XWizard Methods
def getCurrentPage(self):
@@ -165,7 +184,12 @@ def execute(self):
if not self._isCurrentPathSet():
self._initPath(0, False)
self._initPage()
- return self._view.execute()
+ if self._view.isModal():
+ status = self._view.execute()
+ self._dispose()
+ else:
+ status = OK
+ return status
# XInitialization
def initialize(self, arguments):
@@ -194,10 +218,16 @@ def doFinish(self):
reason = self._getCommitReason()
if self._model.doFinish(reason):
if self._controller.confirmFinish():
- self._view.endDialog(OK)
+ if self._view.isModal():
+ self._view.endDialog(OK)
+ else:
+ self._tryToClose()
def doCancel(self):
- self._view.endDialog(CANCEL)
+ if self._view.isModal():
+ self._view.endDialog(CANCEL)
+ else:
+ self._tryToClose()
# Wizard private getter methods
def _isComplete(self):
@@ -303,7 +333,7 @@ def _isAutoLoad(self, page=None):
if page is None:
nextindex = self._getFirstPageId()
else:
- nextindex = self._getCurrentPath().index(page) +1
+ nextindex = self._getCurrentPath().index(page) + 1
return nextindex < self._auto
def _getPath(self, index, final):
@@ -343,6 +373,27 @@ def _initNextPage(self):
return init
# Wizard private setter methods
+ def _dispose(self):
+ interface = 'com.sun.star.lang.XComponent'
+ if self._controller and hasInterface(self._controller, interface):
+ self._controller.dispose()
+ self._model.dispose()
+ self._view.dispose()
+
+ def _tryToClose(self):
+ try:
+ self._queryClosing()
+ except CloseVetoException as e:
+ pass
+ else:
+ self._view.close()
+
+ def _queryClosing(self, ownership=False):
+ if not ownership:
+ interface = 'com.sun.star.util.XCloseable'
+ if self._controller and hasInterface(self._controller, interface):
+ self._controller.close(ownership)
+
def _initPath(self, index, final):
complete, paths = self._getPath(index, final)
self._model.initRoadmap(self._controller, paths, complete)
@@ -384,6 +435,9 @@ def _updateButton(self):
self._view.updateButtonFinish(enabled)
# Private Exception getter methods
+ def _getEventObject(self):
+ return uno.createUnoStruct('com.sun.star.lang.EventObject', self)
+
def _getIllegalArgumentException(self, position, code, method):
e = IllegalArgumentException()
e.ArgumentPosition = position
diff --git a/uno/lib/uno/wizard/wizardhandler.py b/uno/lib/uno/wizard/wizardhandler.py
index c3a85c87..31674704 100644
--- a/uno/lib/uno/wizard/wizardhandler.py
+++ b/uno/lib/uno/wizard/wizardhandler.py
@@ -29,9 +29,12 @@
import unohelper
+from com.sun.star.awt import XContainerWindowEventHandler
from com.sun.star.awt import XDialogEventHandler
from com.sun.star.awt import XItemListener
+from com.sun.star.util import XCloseListener
+
import traceback
@@ -59,9 +62,43 @@ def callHandlerMethod(self, dialog, event, method):
self._manager.doCancel()
handled = True
return handled
- except Exception as e:
- msg = "Error: %s" % traceback.format_exc()
- print(msg)
+ except:
+ print("DialogHandler.callHandlerMethod() ERROR: %s" % traceback.format_exc())
+
+ def getSupportedMethodNames(self):
+ return ('Help',
+ 'Previous',
+ 'Next',
+ 'Finish',
+ 'Cancel')
+
+
+class WindowHandler(unohelper.Base,
+ XContainerWindowEventHandler):
+ def __init__(self, manager):
+ self._manager = manager
+
+# XContainerWindowEventHandler
+ def callHandlerMethod(self, dialog, event, method):
+ try:
+ handled = False
+ if method == 'Help':
+ handled = True
+ elif method == 'Previous':
+ self._manager.travelPrevious()
+ handled = True
+ elif method == 'Next':
+ self._manager.travelNext()
+ handled = True
+ elif method == 'Finish':
+ self._manager.doFinish()
+ handled = True
+ elif method == 'Cancel':
+ self._manager.doCancel()
+ handled = True
+ return handled
+ except:
+ print("WindowHandler.callHandlerMethod() ERROR: %s" % traceback.format_exc())
def getSupportedMethodNames(self):
return ('Help',
@@ -80,9 +117,25 @@ def __init__(self, manager):
def itemStateChanged(self, event):
try:
self._manager.changeRoadmapStep(event.ItemId)
- except Exception as e:
- msg = "Error: %s" % traceback.format_exc()
- print(msg)
+ except:
+ print("ItemListener.itemStateChanged() ERROR: %s" % traceback.format_exc())
def disposing(self, event):
pass
+
+
+class CloseListener(unohelper.Base,
+ XCloseListener):
+ def __init__(self, manager):
+ self._manager = manager
+
+ # XCloseListener
+ def queryClosing(self, event, ownership):
+ self._manager.queryClosing(event.Source, ownership)
+
+ def notifyClosing(self, event):
+ self._manager.notifyClosing(event.Source)
+
+ def disposing(self, event):
+ pass
+
diff --git a/uno/lib/uno/wizard/wizardmodel.py b/uno/lib/uno/wizard/wizardmodel.py
index e9344333..265bc04e 100644
--- a/uno/lib/uno/wizard/wizardmodel.py
+++ b/uno/lib/uno/wizard/wizardmodel.py
@@ -30,9 +30,10 @@
import uno
import unohelper
-from ..unotool import getStringResource
+from ...unotool import getStringResource
+from ...unotool import hasInterface
-from ..configuration import g_identifier
+from ...configuration import g_identifier
import traceback
@@ -46,6 +47,12 @@ def __init__(self, ctx):
self._resolver = getStringResource(ctx, g_identifier, 'dialogs', 'Wizard')
self._resources = {'Roadmap': 'Wizard.Roadmap.Text'}
+ def dispose(self):
+ interface = 'com.sun.star.lang.XComponent'
+ for page in self._pages.values():
+ if page and hasInterface(page, interface):
+ page.dispose()
+
def setRoadmapModel(self, model):
self._roadmap = model
diff --git a/uno/lib/uno/wizard/wizardview.py b/uno/lib/uno/wizard/wizardview.py
index 8d293687..745ede03 100644
--- a/uno/lib/uno/wizard/wizardview.py
+++ b/uno/lib/uno/wizard/wizardview.py
@@ -30,65 +30,114 @@
import uno
import unohelper
+from com.sun.star.awt import Size
+from com.sun.star.awt.PosSize import POSSIZE
+from com.sun.star.awt.PosSize import SIZE
+
from com.sun.star.ui.dialogs.WizardButton import NEXT
from com.sun.star.ui.dialogs.WizardButton import PREVIOUS
from com.sun.star.ui.dialogs.WizardButton import FINISH
from com.sun.star.ui.dialogs.WizardButton import CANCEL
from com.sun.star.ui.dialogs.WizardButton import HELP
-from ..unotool import createWindow
-from ..unotool import getDialog
+from com.sun.star.util.MeasureUnit import APPFONT
+
+from ...unotool import getContainerWindow
+from ...unotool import getDialog
+from ...unotool import getTopWindow
-from ..configuration import g_identifier
+from ...configuration import g_identifier
import traceback
class WizardView(unohelper.Base):
- def __init__(self, ctx, handler, listener, parent, title, modal=True):
+ def __init__(self, ctx, handler, listener, listener1, parent, name, title, resize, point):
self._name = 'Roadmap1'
- #if not modal and parent is None:
- # parent = createWindow(ctx, g_identifier, 'Wizard', title).getPeer()
- self._dialog = getDialog(ctx, g_identifier, 'Wizard', handler, parent)
+ if name:
+ # XXX: With a frame name we use a TOP XWindow
+ self._frame = getTopWindow(ctx, name)
+ peer = self._frame.getContainerWindow()
+ self._dialog = getContainerWindow(ctx, peer, handler, g_identifier, 'WizardTop')
+ # XXX: setComponent is needed if we want a StatusIndicator at the bottom
+ self._frame.setComponent(self._dialog, None)
+ self._frame.addCloseListener(listener)
+ else:
+ # XXX: Without frame name we use a MODAL XDialog
+ self._frame = None
+ self._dialog = getDialog(ctx, g_identifier, 'Wizard', handler, parent)
+ self._point = point
rectangle = uno.createUnoStruct('com.sun.star.awt.Rectangle', 0, 0, 85, 180)
roadmap = self._getRoadmap(title, rectangle, 0)
- roadmap.addItemListener(listener)
+ roadmap.addItemListener(listener1)
self._button = {CANCEL: 1, FINISH: 2, NEXT: 3, PREVIOUS: 4, HELP: 5}
self._spacer = 5
+ if self._frame and not resize:
+ peer.setVisible(True)
+ self._dialog.setVisible(True)
# WizardView getter methods
+ def isModal(self):
+ return self._frame is None
+
def getDialog(self):
return self._dialog
+ def getDialogWindow(self):
+ if self._frame:
+ dialog = self._frame.getContainerWindow()
+ else:
+ dialog = self._dialog
+ return dialog
+
def getRoadmapModel(self):
return self._getRoadmapControl().Model
# WizardView setter methods
def execute(self):
- return self._dialog.execute()
+ if self._frame is None:
+ return self._dialog.execute()
def endDialog(self, result):
- self._dialog.endDialog(result)
+ if self._frame is None:
+ self._dialog.endDialog(result)
- def dispose(self):
- self._dialog.dispose()
- self._dialog = None
+ def close(self):
+ if self._frame:
+ self._frame.close(True)
- def isDisposed(self):
- return self._dialog is None
+ def dispose(self):
+ if self._frame is None:
+ self._dialog.dispose()
def setDialogTitle(self, title):
- self._dialog.setTitle(title)
+ if self._frame:
+ self._frame.setTitle(title)
+ else:
+ self._dialog.setTitle(title)
def setDialogSize(self, page):
button = self._getButton(HELP).Model
- button.PositionY = page.Height + self._spacer
+ button.PositionY = page.Height + self._spacer
dialog = self._dialog.Model
dialog.Height = button.PositionY + button.Height + self._spacer
dialog.Width = page.PositionX + page.Width
# We assume all buttons are named appropriately
- for i in (1,2,3,4):
+ for i in (1, 2, 3, 4):
self._setButtonPosition(i, button.PositionY, dialog.Width)
+ if self._frame:
+ window = self._frame.getContainerWindow()
+ size = self._dialog.convertSizeToPixel(Size(dialog.Width, dialog.Height), APPFONT)
+ if self._point:
+ point = self._dialog.convertPointToPixel(self._point, APPFONT)
+ possize = POSSIZE
+ else:
+ point = uno.createUnoStruct('com.sun.star.awt.Point', 0, 0)
+ possize = SIZE
+ window.setPosSize(point.X, point.Y, size.Width, size.Height, possize)
+ # XXX: Visibility should be done after size adjustment
+ window.setVisible(True)
+ self._dialog.setVisible(True)
def enableHelpButton(self, enabled):
self._getButton(HELP).Model.Enabled = enabled
diff --git a/uno/rdb/idl/com/sun/star/task/XTaskEvent.idl b/uno/rdb/idl/com/sun/star/task/XTaskEvent.idl
new file mode 100644
index 00000000..2223e66a
--- /dev/null
+++ b/uno/rdb/idl/com/sun/star/task/XTaskEvent.idl
@@ -0,0 +1,49 @@
+/*
+╔════════════════════════════════════════════════════════════════════════════════════╗
+║ ║
+║ Copyright (c) 2020-25 https://prrvchr.github.io ║
+║ ║
+║ Permission is hereby granted, free of charge, to any person obtaining ║
+║ a copy of this software and associated documentation files (the "Software"), ║
+║ to deal in the Software without restriction, including without limitation ║
+║ the rights to use, copy, modify, merge, publish, distribute, sublicense, ║
+║ and/or sell copies of the Software, and to permit persons to whom the Software ║
+║ is furnished to do so, subject to the following conditions: ║
+║ ║
+║ The above copyright notice and this permission notice shall be included in ║
+║ all copies or substantial portions of the Software. ║
+║ ║
+║ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ║
+║ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ║
+║ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ║
+║ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ║
+║ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ║
+║ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE ║
+║ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ║
+║ ║
+╚════════════════════════════════════════════════════════════════════════════════════╝
+ */
+
+#ifndef __com_sun_star_task_XTaskEvent_idl__
+#define __com_sun_star_task_XTaskEvent_idl__
+
+#include
+
+module com { module sun { module star { module task {
+
+interface XTaskEvent : com::sun::star::uno::XInterface
+{
+
+ boolean isSet();
+
+ void set();
+
+ void clear();
+
+ boolean wait([in] float Timeout);
+
+};
+
+}; }; }; };
+
+#endif