diff --git a/source/gDriveOOo/OAuth2OOo.xcu b/source/gDriveOOo/OAuth2OOo.xcu
index 35d11126..ec4243fc 100644
--- a/source/gDriveOOo/OAuth2OOo.xcu
+++ b/source/gDriveOOo/OAuth2OOo.xcu
@@ -42,7 +42,7 @@
Google
- https://www.googleapis.com/auth/drive
+ https://www.googleapis.com/auth/drive.install https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/drive.appdata https://www.googleapis.com/auth/drive.appfolder
diff --git a/source/gDriveOOo/registration/gDriveConfirmation_en.md b/source/gDriveOOo/registration/gDriveConfirmation_en.md
new file mode 100644
index 00000000..605e9012
--- /dev/null
+++ b/source/gDriveOOo/registration/gDriveConfirmation_en.md
@@ -0,0 +1,7 @@
+# gDriveOOo Confirmation
+
+**The submission of your Google Drive files has been taken into account.**
+
+They will be available as soon as the next replication of your data by gDriveOOo in LibreOffice.
+
+You can close this page.
diff --git a/source/gDriveOOo/registration/gDriveConfirmation_fr.md b/source/gDriveOOo/registration/gDriveConfirmation_fr.md
new file mode 100644
index 00000000..3b7ca9ac
--- /dev/null
+++ b/source/gDriveOOo/registration/gDriveConfirmation_fr.md
@@ -0,0 +1,7 @@
+# Confirmation de gDriveOOo
+
+**La soumission de vos fichiers Google Drive a été prise en compte.**
+
+Ils seront disponibles dès la prochaine réplication de vos données par gDriveOOo dans LibreOffice.
+
+Vous pouvez fermer cette page.
diff --git a/source/gDriveOOo/service/pythonpath/gdrive/provider.py b/source/gDriveOOo/service/pythonpath/gdrive/provider.py
index e1f67c91..bffd8371 100644
--- a/source/gDriveOOo/service/pythonpath/gdrive/provider.py
+++ b/source/gDriveOOo/service/pythonpath/gdrive/provider.py
@@ -92,8 +92,8 @@ def initUser(self, database, user, token):
user.setToken(token)
def getUser(self, source, request, name):
- user = self._getUser(source, request, name)
- root = self._getRoot(source, request, name)
+ user = self._getUser(source, request)
+ root = self._getRoot(source, request)
return user, root
def initSharedDocuments(self, user, datetime):
@@ -267,25 +267,26 @@ def parseNewIdentifiers(self, response):
del events[:]
parser.close()
- def _getUser(self, source, request, name):
+ def _getUser(self, source, request):
parameter = self.getRequestParameter(request, 'getUser')
response = request.execute(parameter)
if not response.Ok:
- msg = self._logger.resolveString(403, name)
+ msg = self._logger.resolveString(561, parameter.Name, response.StatusCode, response.Text)
raise IllegalIdentifierException(msg, source)
user = self._parseUser(response)
response.close()
return user
- def _getRoot(self, source, request, name):
+ def _getRoot(self, source, request):
parameter = self.getRequestParameter(request, 'getRoot')
response = request.execute(parameter)
if not response.Ok:
- msg = self._logger.resolveString(403, name)
+ msg = self._logger.resolveString(571, parameter.Name, response.StatusCode, response.Text)
raise IllegalIdentifierException(msg, source)
root = self._parseRoot(response)
response.close()
- return root
+ timestamp = currentUnoDateTime()
+ return root, timestamp, timestamp
def _parseUser(self, response):
userid = name = displayname = None
@@ -306,24 +307,21 @@ def _parseUser(self, response):
return userid, name, displayname
def _parseRoot(self, response):
- rootid = name = created = modified = mimetype = None
- addchild = canrename = True
- trashed = readonly = versionable = False
+ rootid = None
events = ijson.sendable_list()
parser = ijson.parse_coro(events)
iterator = response.iterContent(g_chunk, False)
while iterator.hasMoreElements():
parser.send(iterator.nextElement().value)
for prefix, event, value in events:
- if (prefix, event) == ('id', 'string'):
+ if (prefix, event) == ('files.item.parents.item', 'string'):
rootid = value
- elif (prefix, event) == ('createdTime', 'string'):
- created = self.parseDateTime(value)
- elif (prefix, event) == ('modifiedTime', 'string'):
- modified = self.parseDateTime(value)
+ break
del events[:]
+ if rootid:
+ break
parser.close()
- return rootid, created, modified
+ return rootid
def parseItemId(self, response):
return self._parseItemId(response)
@@ -365,8 +363,10 @@ def getRequestParameter(self, request, method, data=None):
parameter.setQuery('fields', g_userfields)
elif method == 'getRoot' :
- parameter.Url += '/files/root'
- parameter.setQuery('fields', g_itemfields)
+ parameter.Url += '/files'
+ parameter.setQuery('fields', 'files(parents)')
+ parameter.setQuery('pageSize', g_pages)
+ parameter.setQuery('q', "'root' in parents")
elif method == 'getSharedFolderContent':
parameter.Url += '/drives'
diff --git a/uno/lib/uno/ucb/ucp/provider.py b/uno/lib/uno/ucb/ucp/provider.py
index f446236d..64ea9c86 100644
--- a/uno/lib/uno/ucb/ucp/provider.py
+++ b/uno/lib/uno/ucb/ucp/provider.py
@@ -30,6 +30,7 @@
import uno
import unohelper
+from com.sun.star.logging.LogLevel import INFO
from com.sun.star.logging.LogLevel import SEVERE
from com.sun.star.ucb.ConnectionMode import OFFLINE
@@ -74,6 +75,7 @@ def __init__(self, ctx, logger):
self.SourceURL = getResourceLocation(ctx, g_identifier, g_scheme)
self._folders = []
self._config = getConfiguration(ctx, g_identifier, False)
+ self._logger.logprb(INFO, 'Provider', '__init__()', 551)
# Must be implemented properties
@property
diff --git a/uno/resource/ucb/ContentProvider_en_US.properties b/uno/resource/ucb/ContentProvider_en_US.properties
index 634551de..7be4c50f 100644
--- a/uno/resource/ucb/ContentProvider_en_US.properties
+++ b/uno/resource/ucb/ContentProvider_en_US.properties
@@ -87,6 +87,16 @@
511=Error: {} - {}
+550=Provider.__init__()
+551=Provider loading completed
+
+560=Provider._getUser()
+561=Error on request <{}> which returned code <{}> and response <{}>
+
+570=Provider._getRoot()
+571=Error on request <{}> which returned code <{}> and response <{}>
+
+
600=Content.__init__()
601=Content loading completed
@@ -114,6 +124,7 @@
660=Content.createNewContent()
661=Create new content from folder: {}
+
710=PropertySetInfo.getPropertyByName()
711=The content gives the property: {}
diff --git a/uno/resource/ucb/ContentProvider_fr_FR.properties b/uno/resource/ucb/ContentProvider_fr_FR.properties
index ce7a598a..76dc2111 100644
--- a/uno/resource/ucb/ContentProvider_fr_FR.properties
+++ b/uno/resource/ucb/ContentProvider_fr_FR.properties
@@ -1,5 +1,5 @@
100=ContentProvider.__init__()
-101=ContentProvider: {} Chargement termin\u00e9
+101=ContentProvider: {} Chargement terminé
140=OptionsHandler.callHandlerMethod()
@@ -16,7 +16,7 @@
200=ContentProvider.__init__()
-201=ParameterizedProvider{} Chargement termin\u00e9
+201=ParameterizedProvider{} Chargement terminé
210=ContentProvider.createContentIdentifier()
211=Identifier: {} -> {}
@@ -32,7 +32,7 @@
228=La version {} du pilote HsqlDB est obsolète. Vous devez mettre à jour ce pilote vers une version {} ou supérieure.
230=ContentProvider.queryContent()
-231=Identitifer: {} ... Termin\u00e9
+231=Identitifer: {} ... Terminé
232=IllegalIdentifierException: {}
233=Exception python inattendue avec le traceback: {}
@@ -42,7 +42,7 @@
300=DataSource.__init__()
-301=DataSource: Chargement termin\u00e9
+301=DataSource: Chargement terminé
310=DataSource.queryContent()
311=Erreur: Impossible de charger le contenu avec un Identifier incomplet: {}
@@ -50,7 +50,7 @@
320=DataSource._getUser()
321=Erreur: Impossible de charger de contenu avec un Identifier invalide: {}
322={} - Erreur d'identificateur
-323=Impossible de r\u00e9cup\u00e9rer l'utilisateur à partir de l'Identifier: {}!!!
+323=Impossible de récupérer l'utilisateur à partir de l'Identifier: {}!!!
324={} - Erreur d'authentification
325=L'assistant OAuth2 a été abandonné par l'utilisateur: {}. La connexion ne peut pas être établie!!!
@@ -59,11 +59,11 @@
332=Impossible de charger de contenu sans Utilisateur: {}!!!
340=DataSource.queryClosing()
-341=La base de donn\u00e9e: {} a \u00e9t\u00e9 ferm\u00e9e
+341=La base de donnée: {} a été fermée
400=DataBase.__init__()
-401=DataBase: Chargement termin\u00e9
+401=DataBase: Chargement terminé
402=DataBase._mergeItem() size {} os name {}
410=DataBase.createDataBase()
@@ -76,23 +76,33 @@
501={} - Erreur d'authentification
502=L'assistant OAuth2 a été abandonné par l'utilisateur: {}. La connexion ne peut pas être établie!!!
503={} - Erreur de réseau
-504=Impossible de retrouver l'utilisateur: {} chez le fournisseur: le r\u00e9seau est hors ligne!!!
+504=Impossible de retrouver l'utilisateur: {} chez le fournisseur: le réseau est hors ligne!!!
505={} - Erreur d'authentification
506=L'utilisateur: {} est inconnu chez ce fournisseur!!!
507={} - Erreur de base de données
-508=Impossible d'inserer l'utilisateur: {} dans la base de donn\u00e9es
-509=User chargement termin\u00e9
+508=Impossible d'inserer l'utilisateur: {} dans la base de données
+509=User chargement terminé
510=User.getDocumentContent()
511=Erreur: {} - {}
+550=Provider.__init__()
+551=Provider chargement terminé
+
+560=Provider._getUser()
+561=Erreur sur la requête <{}> qui a renvoyé le code <{}> et la réponse <{}>
+
+570=Provider._getRoot()
+571=Erreur sur la requête <{}> qui a renvoyé le code <{}> et la réponse <{}>
+
+
600=Content.__init__()
-601=Content chargement termin\u00e9
+601=Content chargement terminé
610=Content._getMetaData()
611=Erreur: Impossible de charger le contenu avec un Identifier incomplet: {}
-612=Erreur: Impossible de r\u00e9cup\u00e9rer les m\u00e9tadonn\u00e9es pour l'ID: {} et l'Uri: {}
+612=Erreur: Impossible de récupérer les métadonnées pour l'ID: {} et l'Uri: {}
620=Content._updateFolderContent()
621=Le contenu du dossier: {} est obtenu avec Request!!!
@@ -114,6 +124,7 @@
660=Content.createNewContent()
661=Creation d'un nouveau contenu dans le dossier: {}
+
710=PropertySetInfo.getPropertyByName()
711=Le contenu donne la propriété: {}