~victored/noise/grid-view-optimizations-2

« back to all changes in this revision

Viewing changes to src/FileOperator.vala

  • Committer: Sergey "Shnatsel" Davidoff
  • Date: 2014-07-03 09:18:20 UTC
  • mfrom: (1625.1.1 noise)
  • Revision ID: shnatsel@gmail.com-20140703091820-2vasu5imxl5m999u
* Migrate the collection of files to import from Gee.LinkedList to Gee.TreeSet; this speeds up deduplication to log(n) complexity compared to current n^2, speeds up .contains() lookups to log(n) compared to current linear, and allows to remove some custom deduplication code. Fixes bug #1286944
* Abstract the troubled (bug #1336846) FileUtils.count_music_files () method to handle any Gee.Collection and not just Gee.LinkedList; this is a prerequisite to the above speedup. It breaks plugin API/ABI but we officially don't care about such things (bug #1336493).

Show diffs side-by-side

added added

removed removed

Lines of Context:
216
216
            /* if we are supposed to delete the old, make sure there are no items left in folder if we do */
217
217
            if (delete_old) {
218
218
                var dummy = new Gee.LinkedList<string> ();
219
 
                var old_folder_items = FileUtils.count_music_files (original.get_parent (), ref dummy);
 
219
                var old_folder_items = FileUtils.count_music_files (original.get_parent (), dummy);
220
220
                // must check for .jpg's as well.
221
221
                
222
222
                if (old_folder_items == 0) {
238
238
                var file = File.new_for_uri (s);
239
239
                file.trash ();
240
240
                
241
 
                var old_folder_items = FileUtils.count_music_files (file.get_parent (), ref dummy_list);
 
241
                var old_folder_items = FileUtils.count_music_files (file.get_parent (), dummy_list);
242
242
                    
243
243
                //TODO: COPY ALBUM AND IMAGE ARTWORK
244
244
                if (old_folder_items == 0) {
245
245
                    debug("going to delete %s because no files are in it\n", file.get_parent ().get_path ());
246
246
                    //original.get_parent ().delete ();
247
247
                    
248
 
                    var old_folder_parent_items = FileUtils.count_music_files (file.get_parent ().get_parent (), ref dummy_list);
 
248
                    var old_folder_parent_items = FileUtils.count_music_files (file.get_parent ().get_parent (), dummy_list);
249
249
                    
250
250
                    if(old_folder_parent_items == 0) {
251
251
                        debug("going to delete %s because no files are in it\n", file.get_parent ().get_parent ().get_path ());
284
284
                        import_files (list, ImportType.IMPORT);
285
285
                    } else if (info.get_file_type () == FileType.DIRECTORY) {
286
286
                        var list = new Gee.LinkedList<string> ();
287
 
                        FileUtils.count_music_files (file, ref list);
 
287
                        FileUtils.count_music_files (file, list);
288
288
                        import_files (list, ImportType.IMPORT);
289
289
                    }
290
290
                } catch (Error e) {