@@ -156,6 +156,25 @@ static int scanner_local_folder_to_list(const char *localpath, psync_list *lst){
156
156
return psync_list_dir (localpath , scanner_local_entry_to_list , lst );
157
157
}
158
158
159
+ static void delete_local_folder_rec (psync_folderid_t localfolderid );
160
+
161
+ static void try_delete_localfolder (psync_folderid_t localfolderid ){
162
+ if (psync_sql_tryupgradelock ())
163
+ return ;
164
+ psync_sql_start_transaction ();
165
+ delete_local_folder_rec (localfolderid );
166
+ psync_sql_commit_transaction ();
167
+ }
168
+
169
+ static void try_delete_localfile (psync_fileid_t localfileid ){
170
+ psync_sql_res * res ;
171
+ if (psync_sql_tryupgradelock ())
172
+ return ;
173
+ res = psync_sql_prep_statement ("DELETE FROM localfile WHERE id=?" );
174
+ psync_sql_bind_uint (res , 1 , localfileid );
175
+ psync_sql_run_free (res );
176
+ }
177
+
159
178
static void scanner_db_folder_to_list (psync_syncid_t syncid , psync_folderid_t localfolderid , psync_list * lst ){
160
179
psync_sql_res * res ;
161
180
psync_variant_row row ;
@@ -168,6 +187,11 @@ static void scanner_db_folder_to_list(psync_syncid_t syncid, psync_folderid_t lo
168
187
psync_sql_bind_uint (res , 2 , syncid );
169
188
while ((row = psync_sql_fetch_row (res ))){
170
189
name = psync_get_lstring (row [5 ], & namelen );
190
+ if (unlikely (psync_is_lname_to_ignore (name , namelen ))){
191
+ debug (D_NOTICE , "found a name %s matching ignore pattern in localfolder, will try to delete" , name );
192
+ try_delete_localfolder (psync_get_number (row [0 ]));
193
+ continue ;
194
+ }
171
195
namelen ++ ;
172
196
e = (sync_folderlist * )psync_malloc (offsetof(sync_folderlist , name )+ namelen );
173
197
e -> localid = psync_get_number (row [0 ]);
@@ -186,6 +210,11 @@ static void scanner_db_folder_to_list(psync_syncid_t syncid, psync_folderid_t lo
186
210
psync_sql_bind_uint (res , 2 , syncid );
187
211
while ((row = psync_sql_fetch_row (res ))){
188
212
name = psync_get_lstring (row [5 ], & namelen );
213
+ if (unlikely (psync_is_lname_to_ignore (name , namelen ))){
214
+ debug (D_NOTICE , "found a name %s matching ignore pattern in localfile, will try to delete" , name );
215
+ try_delete_localfile (psync_get_number (row [0 ]));
216
+ continue ;
217
+ }
189
218
namelen ++ ;
190
219
e = (sync_folderlist * )psync_malloc (offsetof(sync_folderlist , name )+ namelen );
191
220
e -> localid = psync_get_number (row [0 ]);
0 commit comments