Skip to content

Commit

Permalink
Merge pull request #10 from bhakta0007/master
Browse files Browse the repository at this point in the history
Recent-Files: Track most recent edited files
  • Loading branch information
vukbgit authored Dec 12, 2020
2 parents 7665711 + c23b7a0 commit f02ed16
Show file tree
Hide file tree
Showing 6 changed files with 150 additions and 19 deletions.
7 changes: 7 additions & 0 deletions lib/config/config-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,13 @@
"type": "boolean",
"default": true,
"order": 9
},
"showRecentFiles": {
"title": "Show Recent files",
"description": "For every remote server, show list of recent accessed file(s)",
"type": "boolean",
"default": false,
"order": 10
}
},
"order": 3
Expand Down
73 changes: 55 additions & 18 deletions lib/views/directory-view.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class DirectoryView extends View {
self.name = null;
self.rights = null;
self.isExpanded = false;
self.internalCache = false;
}

static content() {
Expand Down Expand Up @@ -68,6 +69,7 @@ class DirectoryView extends View {
self.config = parent.config;
self.name = directory.name;
self.rights = directory.rights;
self.internalCache = directory.internalCache ? directory.internalCache : false;
self.isExpanded = false;
self.id = self.getId();

Expand Down Expand Up @@ -157,6 +159,16 @@ class DirectoryView extends View {
return element;
}

addRecentFileEntry(file) {
const self = this;
self.parent.addRecentFileEntry(file)
}

delRecentFileEntry(file) {
const self = this;
self.parent.delRecentFileEntry(file)
}

paint(list) {
const self = this;
let entries = [];
Expand Down Expand Up @@ -191,7 +203,6 @@ class DirectoryView extends View {
directories.forEach(function (element) {
let pathOnFileSystem = self.getPath() + element.name;
pathOnFileSystem = pathOnFileSystem.replace(/\/+/g, "/");

if (!isPathIgnored(pathOnFileSystem)) {
let li = new DirectoryView(self, {
name: element.name,
Expand Down Expand Up @@ -228,9 +239,21 @@ class DirectoryView extends View {
});
}

if (self.showRecentFilesCache) {
const pathOnFileSystem = self.getPath() + "__FTP_REMOTE_EDIT_PLUS_RECENT_FILES__";
self.cacheFolderDirectoryView = new DirectoryView(self, {
name: "Recent-Files",
path: pathOnFileSystem,
rights: {user: "rwx", group: "rx", others: "rx"},
internalCache: true,
});
entries.unshift(self.cacheFolderDirectoryView);
}

entries.forEach(function (entry) {
self.entries.append(entry);
});

};

setClasses() {
Expand Down Expand Up @@ -259,24 +282,38 @@ class DirectoryView extends View {
self.deselect();
self.select(self);

self.getRoot()
.connector.listDirectory(self.getPath())
.then((list) => {
self.paint(list);
self.label.removeClass('icon-sync')
.removeClass('spin')
.addClass('icon-file-directory');
resolve(true);
})
.catch(function (err) {
self.getRoot()
.connector.showMessage(err.message, 'error');
self.label.removeClass('icon-sync')
.removeClass('spin')
.addClass('icon-file-directory');
self.collapse();
reject(err);
if (!self.internalCache) {
self.getRoot()
.connector.listDirectory(self.getPath())
.then((list) => {
self.paint(list);
self.label.removeClass('icon-sync')
.removeClass('spin')
.addClass('icon-file-directory');
resolve(true);
})
.catch(function (err) {
self.getRoot()
.connector.showMessage(err.message, 'error');
self.label.removeClass('icon-sync')
.removeClass('spin')
.addClass('icon-file-directory');
self.collapse();
reject(err);
});
} else {

let entries = self.parent.getRecentFileEntries();
self.entries.children().detach();
entries.forEach((entry) => {
self.entries.append(entry);
});
// self.paint(list);
self.label.removeClass('icon-sync')
.removeClass('spin')
.addClass('icon-file-directory');
resolve(true);
}
});

return promise;
Expand Down
23 changes: 23 additions & 0 deletions lib/views/file-view.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ class FileView extends View {
self.size = file.size;
self.rights = file.rights;
self.id = self.getId();
self.internalCache = file.internalCache ? file.internalCache : false;

// Add filename
self.label.text(self.name);
Expand Down Expand Up @@ -191,6 +192,22 @@ class FileView extends View {
element.label.removeClass('icon-sync').removeClass('spin');
};

addRecentFileEntry(file) {
const self = this;
const showRecentFiles = atom.config.get('ftp-remote-edit-plus.tree.showRecentFiles')
if (showRecentFiles) {
// Create a clone object and add it
const fileObjectClone = new FileView(file.parent, {
name: file.name,
path: "",
size: file.size,
rights: file.rights,
internalCache: true
});
self.parent.addRecentFileEntry(fileObjectClone);
}
}

open(pending = false) {
const self = this;

Expand All @@ -199,6 +216,7 @@ class FileView extends View {
// Check if file is already opened in texteditor
if (self.getTextEditor(self.getLocalPath(true) + self.name, true)) {
atom.workspace.open(self.getLocalPath(true) + self.name, { pending: pending, searchAllPanes: true })
self.addRecentFileEntry(self);
return false;
}

Expand Down Expand Up @@ -231,6 +249,7 @@ class FileView extends View {
// Open file in texteditor
return atom.workspace.open(self.getLocalPath(true) + self.name, { pending: pending, searchAllPanes: true })
.then((editor) => {
self.addRecentFileEntry(self);
if (self.editor === null || self.editor === undefined) {
self.editor = editor;
editor.saveObject = self;
Expand Down Expand Up @@ -437,6 +456,10 @@ class FileView extends View {

deleteFile() {
const self = this;
if (self.internalCache) {
// Internal cache file.. skip delete
return;
}
self.getRoot()
.connector.deleteFile(self.getPath(true) + self.name)
.then(() => {
Expand Down
13 changes: 12 additions & 1 deletion lib/views/folder-view.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class FolderView extends DirectoryView {
self.servers = [];
self.isExpanded = false;
self.debug = false;
self.showRecentFilesCache = false;
}

static content() {
Expand Down Expand Up @@ -67,6 +68,7 @@ class FolderView extends DirectoryView {
self.debug = false;
}


self.label.text(self.name);
self.label.addClass('icon-file-symlink-directory');
self.addClass('project-root');
Expand Down Expand Up @@ -119,7 +121,6 @@ class FolderView extends DirectoryView {

expand() {
const self = this;

let promise = new Promise((resolve, reject) => {
self.entries.children()
.detach();
Expand Down Expand Up @@ -172,6 +173,16 @@ class FolderView extends DirectoryView {
.addClass('icon-file-directory');
};

addRecentFileEntry(file) {
const self = this;
self.parent.addRecentFileEntry(file)
}

delRecentFileEntry(file) {
const self = this;
self.parent.delRecentFileEntry(file)
}

onDragStart(e) {
const self = this;
let entry, initialPath;
Expand Down
48 changes: 48 additions & 0 deletions lib/views/server-view.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ class ServerView extends DirectoryView {
self.isExpanded = false;
self.debug = false;
self.finderItemsCache = null;
self.recentFilesCache = [];
self.showRecentFilesCache = false;
self.cacheFolderDirectoryView = null;
self.recentFilesCacheFolderEntry = {}
}

static content() {
Expand Down Expand Up @@ -78,6 +82,23 @@ class ServerView extends DirectoryView {
self.connector = null;
self.connector = new Connector(self.config);

self.recentFilesCache = [];
self.showRecentFilesCache = atom.config.get('ftp-remote-edit-plus.tree.showRecentFiles');
if (self.showRecentFilesCache) {
self.recentFilesCacheFolderEntry = {
accessTime: new Date().getTime(),
group: 0,
modifyTime: new Date().getTime(),
owner: 0,
permission: "755",
rights: {user: "rwx", group: "rwx", others: "rwx"},
size: 0,
type: "d",
internalCache: true
};
}


// Events
self.connector.on('log', function (msg) {
self.treeView.ftpLogView.trigger('log', msg);
Expand Down Expand Up @@ -120,6 +141,33 @@ class ServerView extends DirectoryView {
return 'ftp-remote-edit-' + md5(JSON.stringify(object));
}

addRecentFileEntry(file) {
const self = this;
const res = self.recentFilesCache.filter(item => item.id === file.id);
if (res.length === 0) {
self.recentFilesCache.unshift(file);
}

if (self.cacheFolderDirectoryView) {
if (self.cacheFolderDirectoryView.isExpanded) {
self.cacheFolderDirectoryView.expand();
}
}
}

delRecentFileEntry(file) {
const self = this;
const res = self.recentFilesCache.filter(item => item.id === file.id);
if (res.length !== 0) {
self.recentFilesCache = self.recentFilesCache.filter(item => item.id != file.id);
}
}

getRecentFileEntries() {
const self = this;
return self.recentFilesCache;
}

collapse() {
const self = this;

Expand Down
5 changes: 5 additions & 0 deletions lib/views/tree-view.js
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,11 @@ class TreeView extends ScrollView {
self.reload();
}
});
atom.config.onDidChange('ftp-remote-edit.tree.showRecentFiles', () => {
if (self.isVisible()) {
self.reload();
}
});
atom.config.onDidChange('ftp-remote-edit.tree.hideIgnoredNames', () => {
resetIgnoredPatterns();
if (self.isVisible()) {
Expand Down

0 comments on commit f02ed16

Please sign in to comment.