44
55namespace OC \FilesMetadata \Service ;
66
7- use JsonException ;
87use OC \FilesMetadata \Model \FilesMetadata ;
98use OCP \DB \Exception ;
109use OCP \DB \QueryBuilder \IQueryBuilder ;
@@ -34,7 +33,7 @@ public function store(IFilesMetadata $filesMetadata): void {
3433 $ qb ->insert (self ::TABLE_METADATA )
3534 ->setValue ('file_id ' , $ qb ->createNamedParameter ($ filesMetadata ->getFileId (), IQueryBuilder::PARAM_INT ))
3635 ->setValue ('json ' , $ qb ->createNamedParameter (json_encode ($ filesMetadata ->jsonSerialize ())))
37- ->setValue ('sync_token ' , $ qb ->createNamedParameter ($ filesMetadata -> getSyncToken ()))
36+ ->setValue ('sync_token ' , $ qb ->createNamedParameter ($ this -> generateSyncToken ()))
3837 ->setValue ('last_update ' , $ qb ->createFunction ('NOW() ' ));
3938 $ qb ->executeStatement ();
4039 }
@@ -48,13 +47,17 @@ public function store(IFilesMetadata $filesMetadata): void {
4847 public function getMetadataFromFileId (int $ fileId ): IFilesMetadata {
4948 try {
5049 $ qb = $ this ->dbConnection ->getQueryBuilder ();
51- $ qb ->select ('json ' )->from (self ::TABLE_METADATA );
52- $ qb ->where ($ qb ->expr ()->eq ('file_id ' , $ qb ->createNamedParameter ($ fileId , IQueryBuilder::PARAM_INT )));
50+ $ qb ->select ('json ' , 'sync_token ' )->from (self ::TABLE_METADATA );
51+ $ qb ->where (
52+ $ qb ->expr ()->eq ('file_id ' , $ qb ->createNamedParameter ($ fileId , IQueryBuilder::PARAM_INT ))
53+ );
5354 $ result = $ qb ->executeQuery ();
5455 $ data = $ result ->fetch ();
5556 $ result ->closeCursor ();
5657 } catch (Exception $ e ) {
57- $ this ->logger ->warning ('exception while getMetadataFromDatabase() ' , ['exception ' => $ e , 'fileId ' => $ fileId ]);
58+ $ this ->logger ->warning (
59+ 'exception while getMetadataFromDatabase() ' , ['exception ' => $ e , 'fileId ' => $ fileId ]
60+ );
5861 throw new FilesMetadataNotFoundException ();
5962 }
6063
@@ -68,7 +71,6 @@ public function getMetadataFromFileId(int $fileId): IFilesMetadata {
6871 return $ metadata ;
6972 }
7073
71-
7274 /**
7375 * @param int $fileId
7476 *
@@ -82,32 +84,43 @@ public function dropMetadata(int $fileId): void {
8284 $ qb ->executeStatement ();
8385 }
8486
85- private function removeDeprecatedMetadata (IFilesMetadata $ filesMetadata ): void {
86- // TODO delete aussi les index generate a partir d'une string[]
87-
88- $ qb = $ this ->dbConnection ->getQueryBuilder ();
89- $ qb ->delete (self ::TABLE_METADATA_INDEX )
90- ->where ($ qb ->expr ()->eq ('file_id ' , $ qb ->createNamedParameter ($ filesMetadata ->getFileId (), IQueryBuilder::PARAM_INT )))
91- ->andWhere ($ qb ->expr ()->notIn ('file_id ' , $ filesMetadata ->getIndexes (), IQueryBuilder::PARAM_STR_ARRAY ));
92- $ qb ->executeStatement ();
93- }
94-
95-
9687 /**
9788 * @param IFilesMetadata $filesMetadata
9889 *
9990 * @return bool
10091 * @throws Exception
10192 */
10293 public function updateMetadata (IFilesMetadata $ filesMetadata ): int {
103- // TODO check sync_token on update
10494 $ qb = $ this ->dbConnection ->getQueryBuilder ();
95+ $ expr = $ qb ->expr ();
96+
10597 $ qb ->update (self ::TABLE_METADATA )
10698 ->set ('json ' , $ qb ->createNamedParameter (json_encode ($ filesMetadata ->jsonSerialize ())))
107- ->set ('sync_token ' , $ qb ->createNamedParameter (' abc ' ))
99+ ->set ('sync_token ' , $ qb ->createNamedParameter ($ this -> generateSyncToken () ))
108100 ->set ('last_update ' , $ qb ->createFunction ('NOW() ' ))
109- ->where ($ qb ->expr ()->eq ('file_id ' , $ qb ->createNamedParameter ($ filesMetadata ->getFileId (), IQueryBuilder::PARAM_INT )));
101+ ->where (
102+ $ expr ->andX (
103+ $ expr ->eq ('file_id ' , $ qb ->createNamedParameter ($ filesMetadata ->getFileId (), IQueryBuilder::PARAM_INT )),
104+ $ expr ->eq ('sync_token ' , $ qb ->createNamedParameter ($ filesMetadata ->getSyncToken ()))
105+ )
106+ );
110107
111108 return $ qb ->executeStatement ();
112109 }
110+
111+
112+ private function generateSyncToken (): string {
113+ $ chars = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890 ' ;
114+
115+ $ str = '' ;
116+ $ max = strlen ($ chars );
117+ for ($ i = 0 ; $ i < 7 ; $ i ++) {
118+ try {
119+ $ str .= $ chars [random_int (0 , $ max - 2 )];
120+ } catch (Exception $ e ) {
121+ }
122+ }
123+
124+ return $ str ;
125+ }
113126}
0 commit comments