From afcf3d06b36ace3e0179772eb4c9dfc4427043a1 Mon Sep 17 00:00:00 2001
From: ansuz <ansuz@transitiontech.ca>
Date: Tue, 12 Dec 2017 16:00:05 +0100
Subject: [PATCH 1/2] unpin pads when they are removed from your drive

---
 www/common/outer/async-store.js |  1 +
 www/common/outer/userObject.js  | 13 +++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/www/common/outer/async-store.js b/www/common/outer/async-store.js
index 9aaba8627..8e6c91f70 100644
--- a/www/common/outer/async-store.js
+++ b/www/common/outer/async-store.js
@@ -837,6 +837,7 @@ define([
         var proxy = store.proxy;
         var userObject = store.userObject = UserObject.init(proxy.drive, {
             pinPads: Store.pinPads,
+            unpinPads: Store.unpinPads,
             loggedIn: store.loggedIn,
             log: function (msg) {
                 postMessage("DRIVE_LOG", msg);
diff --git a/www/common/outer/userObject.js b/www/common/outer/userObject.js
index 10a796e3c..32e3e3b92 100644
--- a/www/common/outer/userObject.js
+++ b/www/common/outer/userObject.js
@@ -13,6 +13,9 @@ define([
     };
 
     module.init = function (config, exp, files) {
+        var unpinPads = config.unpinPads || function () {
+            console.error("unpinPads was not provided");
+        };
         var pinPads = config.pinPads;
         var loggedIn = config.loggedIn;
         var workgroup = config.workgroup;
@@ -83,11 +86,21 @@ define([
             if (workgroup || (!loggedIn && !config.testMode)) { return; }
 
             var filesList = exp.getFiles([ROOT, 'hrefArray', TRASH]);
+            var toClean = [];
             exp.getFiles([FILES_DATA]).forEach(function (id) {
                 if (filesList.indexOf(id) === -1) {
+                    var fd = exp.getFileData(id);
+                    if (fd && fd.href) {
+                        toClean.push(Hash.hrefToHexChannelId(fd.href));
+                    }
                     spliceFileData(id);
                 }
             });
+            if (!toClean.length) { return; }
+            unpinPads(toClean, function (response) {
+                if (response && response.error) { return console.error(response.error); }
+                // console.error(response);
+            });
         };
         var deleteHrefs = function (ids) {
             ids.forEach(function (obj) {

From a08cf8faa8416595c4b69308243318d2e3cca183 Mon Sep 17 00:00:00 2001
From: yflory <yann.flory@xwiki.com>
Date: Thu, 14 Dec 2017 09:44:20 +0100
Subject: [PATCH 2/2] Allow drive to receive updates after leaving history mode

---
 www/drive/inner.js | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/www/drive/inner.js b/www/drive/inner.js
index 2197ba563..d403c61ad 100644
--- a/www/drive/inner.js
+++ b/www/drive/inner.js
@@ -2233,6 +2233,9 @@ define([
             appStatus.ready(true);
         };
         var displayDirectory = APP.displayDirectory = function (path, force) {
+            if (history.isHistoryMode) {
+                return void _displayDirectory(path, force);
+            }
             updateObject(sframeChan, proxy, function () {
                 copyObjectValue(files, proxy.drive);
                 _displayDirectory(path, force);
@@ -2902,14 +2905,12 @@ define([
         });
 
         history.onEnterHistory = function (obj) {
-            var files = obj.drive;
-            filesOp = FO.init(files, config);
+            copyObjectValue(files, obj.drive);
             appStatus.isReady = true;
             refresh();
         };
         history.onLeaveHistory = function () {
-            var files = proxy.drive;
-            filesOp = FO.init(files, config);
+            copyObjectValue(files, proxy.drive);
             refresh();
         };