File structure buffer

James Peret 7 years ago
parent
commit
942581c764
3 changed files with 92 additions and 73 deletions
  1. 35 17
      app/scripts/controllers/app-ctrl.js
  2. 56 55
      app/scripts/services/file-service.js
  3. 1 1
      app/views/index.html

+ 35 - 17
app/scripts/controllers/app-ctrl.js

@@ -12,9 +12,11 @@ angular.module('codexApp.index', [])
12 12
 
13 13
     var all_files = [];
14 14
     var current_page = 0;
15
-    var page_count = 5
15
+    var page_count = 2;
16
+    var page_count_start = 30;
16 17
     var info_count = 0;
17 18
     var loaded = false;
19
+    var view_changing = true;
18 20
     $scope.files = [];
19 21
 
20 22
     $scope.setView = function() {
@@ -29,7 +31,7 @@ angular.module('codexApp.index', [])
29 31
             info_count = all_files.length;
30 32
             var f = [];
31 33
             var i = 0;
32
-            for (i = 0; i <= (page_count * 5); i++) {
34
+            for (i = 0; i <= page_count_start; i++) {
33 35
               if(all_files[i] != undefined){
34 36
                 f.push(all_files[i])
35 37
               } else {
@@ -48,7 +50,7 @@ angular.module('codexApp.index', [])
48 50
             info_count = all_files.length;
49 51
             var f = [];
50 52
             var i = 0;
51
-            for (i = 0; i <= (page_count * 5); i++) {
53
+            for (i = 0; i <= page_count_start; i++) {
52 54
               if(all_files[i] != undefined){
53 55
                 f.push(all_files[i])
54 56
               } else {
@@ -77,28 +79,45 @@ angular.module('codexApp.index', [])
77 79
             $rootScope.$broadcast('footer:info', info);
78 80
             break;
79 81
         }
82
+        var last_view = FileService.getLastHistoryView();
83
+        if(last_view !== undefined){
84
+          if(last_view.title !== undefined){
85
+            $location.hash(last_view.title);
86
+            console.log("return list pointer to item " + last_view.title)
87
+          } else {
88
+            $location.hash('grid');
89
+          }
90
+        } else {
91
+          $location.hash('grid');
92
+        }
80 93
         $location.hash('grid');
81 94
         $anchorScroll();
82
-        loaded = true;
83
-        $scope.fader = "fade-in";
95
+        $timeout(function() {
96
+          $scope.fader = "fade-in";
97
+          loaded = true;
98
+          view_changing = false;
99
+        }, 250);
84 100
       }, 25);
85 101
     }
86 102
 
87 103
     $scope.setView();
88 104
 
89 105
     $rootScope.$on('window-view:change', function(){
90
-      console.log("Changin view...");
91
-      current_page = 1;
92
-      loaded = false;
93
-      $scope.fader = "fade-out";
106
+      if(view_changing == false){
107
+        view_changing = true
108
+        console.log("Changin view...");
109
+        current_page = 1;
110
+        loaded = false;
111
+        $scope.fader = "fade-out";
94 112
 
95
-      var state = FileService.getCurrentNote();
96
-      if(state.type == "All Notes" || state.type == "All Files" || state.type == "Folder"){
97
-        $scope.setView();
98
-      } else {
99
-        $timeout(function() {
100
-          $state.go($state.current, {}, {reload: true});
101
-        }, 200);
113
+        var state = FileService.getCurrentNote();
114
+        if(state.type == "All Notes" || state.type == "All Files" || state.type == "Folder"){
115
+          $scope.setView();
116
+        } else {
117
+          $timeout(function() {
118
+            $state.go($state.current, {}, {reload: true});
119
+          }, 200);
120
+        }
102 121
       }
103 122
     });
104 123
 
@@ -239,7 +258,6 @@ angular.module('codexApp.index', [])
239 258
                 } else {
240 259
                   break;
241 260
                 }
242
-
243 261
               }
244 262
               all_files.splice(0, i + 1);
245 263
           }

+ 56 - 55
app/scripts/services/file-service.js

@@ -6,19 +6,24 @@ angular.module('codexApp')
6 6
   var appData = {};
7 7
   var notes_dir = "";
8 8
   var searched_files = [];
9
+  var recent_file_views = [];
9 10
 
10 11
   var getAppData = function(){
11
-    var remote = require('remote');
12
-    var app = remote.require('app');
13
-    appDataPath = app.getPath("userData");
14
-    defaultUserContentPath = app.getPath("home") + "/Documents/codex";
15
-    findOrGenerateUserDataFile(appDataPath, defaultUserContentPath);
16
-    var raw_data = fs.readFileSync(appDataPath + '/userData.json', 'utf8');
17
-    var data = JSON.parse(raw_data);
18
-    appData = data;
19
-    notes_dir = appData.UserDataDirectory;
20
-    default_notes_dir = notes_dir + "/inbox";
21
-    default_home_note = notes_dir + "/index.md"
12
+    if(notes_dir === ""){
13
+      var remote = require('remote');
14
+      var app = remote.require('app');
15
+      appDataPath = app.getPath("userData");
16
+      defaultUserContentPath = app.getPath("home") + "/Documents/codex";
17
+      findOrGenerateUserDataFile(appDataPath, defaultUserContentPath);
18
+      var raw_data = fs.readFileSync(appDataPath + '/userData.json', 'utf8');
19
+      var data = JSON.parse(raw_data);
20
+      appData = data;
21
+      notes_dir = appData.UserDataDirectory;
22
+      default_notes_dir = notes_dir + "/inbox";
23
+      default_home_note = notes_dir + "/index.md"
24
+    } else {
25
+      data = appData;
26
+    }
22 27
     return data
23 28
   }
24 29
 
@@ -216,40 +221,30 @@ angular.module('codexApp')
216 221
     return file_obj;
217 222
   }
218 223
 
219
-  var getNotesFromFolders = function(dir) {
224
+  var getAllFilesFromFolder = function(dir) {
220 225
     if (typeof(dir)==='undefined') dir = notes_dir;
221
-    var filesystem = require("fs");
222
-    filesystem.readdirSync(dir).forEach(function(file) {
223
-
224
-        file_path = dir+'/'+file;
225
-        var stat = filesystem.statSync(file_path);
226
-        if (stat && stat.isDirectory()) {
227
-            notes = notes.concat(getNotesFromFolders(file_path))
228
-        } else {
229
-          if(file == "info.json"){
230
-            filesystem.readFile(file_path, function(err, data) {
231
-              var jsonData = JSON.parse(data);
232
-              var file_obj = SetFileInfo(jsonData, dir, file_path, stat)
233
-              notes.push(file_obj);
234
-            });
235
-          }
236
-        }
237
-    });
238
-    return notes;
226
+    console.log("Loading file list for " + dir)
227
+    var results = searchRecentFileViews(dir);
228
+    if(results === undefined){
229
+      results = listAllFilesFromFolder(dir)
230
+      var history = {"dir" : dir, "files" : results }
231
+      recent_file_views.push(history);
232
+      console.log("Saved " + history.files.length + " files...")
233
+    } else {
234
+      console.log("Loading " + results.length + " files...")
235
+    }
236
+    $rootScope.$broadcast('file-service:files-loaded');
237
+    return results;
239 238
   };
240 239
 
241
-  this.getNotesFromFolders = getNotesFromFolders;
242
-
243
-  var getAllFilesFromFolder = function(dir) {
244
-    if (typeof(dir)==='undefined') dir = notes_dir;
240
+  var listAllFilesFromFolder = function(dir){
245 241
     var filesystem = require("fs");
246 242
     var results = [];
247 243
     filesystem.readdirSync(dir).forEach(function(file) {
248
-
249 244
         file_path = dir+'/'+file;
250 245
         var stat = filesystem.statSync(file_path);
251 246
         if (stat && stat.isDirectory()) {
252
-            results = results.concat(getAllFilesFromFolder(file_path))
247
+            results = results.concat(listAllFilesFromFolder(file_path))
253 248
         } else {
254 249
           if(isValidFile(file)) {
255 250
             var jsonData = {};
@@ -257,29 +252,19 @@ angular.module('codexApp')
257 252
             results.push(file_obj);
258 253
           }
259 254
         }
260
-
261
-        //console.log(file_obj);
262 255
     });
263
-    $rootScope.$broadcast('file-service:files-loaded');
264 256
     return results;
265
-  };
257
+  }
266 258
 
267
-  var getFilesFromFolder = function(dir) {
268
-    if (typeof(dir)==='undefined') dir = notes_dir;
269
-    var filesystem = require("fs");
270
-    var results = [];
271
-    filesystem.readdirSync(dir).forEach(function(file) {
272
-      file_path = dir+'/'+file;
273
-      var stat = filesystem.statSync(file_path);
274
-      if(isValidFile(file)) {
275
-        var jsonData = {};
276
-        var file_obj = SetFileInfo(jsonData, dir, file_path, stat)
277
-        results.push(file_obj);
259
+  var searchRecentFileViews = function(dir){
260
+    for (var i = 0; i < recent_file_views.length; i++) {
261
+      if(recent_file_views[i].dir == dir){
262
+        var files = extend([], recent_file_views[i].files);
263
+        return files
278 264
       }
279
-    });
280
-    $rootScope.$broadcast('file-service:files-loaded');
281
-    return results;
282
-  };
265
+    }
266
+  }
267
+
283 268
 
284 269
   var findNoteInFolder = function(note_id, dir) {
285 270
     if (typeof(dir)==='undefined') dir = notes_dir;
@@ -491,6 +476,18 @@ angular.module('codexApp')
491 476
     return true;
492 477
   }
493 478
 
479
+  extend = function(origin, add) {
480
+    // Don't do anything if add isn't an object
481
+    if (!add || typeof add !== 'object') return origin;
482
+
483
+    var keys = Object.keys(add);
484
+    var i = keys.length;
485
+    while (i--) {
486
+      origin[keys[i]] = add[keys[i]];
487
+    }
488
+    return origin;
489
+  };
490
+
494 491
 
495 492
 
496 493
   // RESPONSE
@@ -561,6 +558,10 @@ angular.module('codexApp')
561 558
     }
562 559
   }
563 560
 
561
+  this.getLastHistoryView = function(){
562
+    return note_history[note_history.length - 2]
563
+  }
564
+
564 565
   this.setNotesDir = function(dir) {
565 566
     appData.UserDataDirectory = dir[0];
566 567
     saveAppData(appData);

+ 1 - 1
app/views/index.html

@@ -21,7 +21,7 @@
21 21
 
22 22
 <div class="file-view" style="height: 100%; overflow-y: scroll">
23 23
   <ul id="grid" infinite-scroll='infiniteScroll()' infinite-scroll-distance='4' infinite-scroll-immediate-check="false" infinite-scroll-parent="true">
24
-    <li ng-repeat="file in files track by $index" ng-dblclick="openFile(file)" class="file-view-item" ng-class="fader" isotope-item="{{file.path}}" style="display: block;">
24
+    <li id="{{file.title}}" ng-repeat="file in files track by $index" ng-dblclick="openFile(file)" class="file-view-item" ng-class="fader" isotope-item="{{file.path}}" style="display: block; opacity: 0;">
25 25
       <div class="thumbnail-icon" ng-show="file.type != 'Folder'" ng-right-click="fileContextMenu(file)">
26 26
         <img src="{{getImageURL(file.path)}}" ng-hide="isImage(file.type)">
27 27
         <img src="{{file.thumbnail}}" ng-show="isImage(file.type)">