@@ -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 |
} |
@@ -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); |
@@ -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)"> |