Pin the pads
This commit is contained in:
parent
b3867429ee
commit
cde724399c
@ -389,6 +389,19 @@ load pinpad dynamically only after you know that it will be needed */
|
||||
* title
|
||||
* ??? // what else can we put in here?
|
||||
*/
|
||||
var checkObjectData = function (pad) {
|
||||
if (!pad.ctime) { pad.ctime = pad.atime; }
|
||||
if (/^https*:\/\//.test(pad.href)) {
|
||||
pad.href = common.getRelativeHref(pad.href);
|
||||
}
|
||||
var parsed = common.parsePadUrl(pad.href);
|
||||
if (!parsed || !parsed.hash) { return; }
|
||||
if (!pad.title) {
|
||||
pad.title = common.getDefaultname(parsed);
|
||||
}
|
||||
return parsed.hash;
|
||||
};
|
||||
// Migrate from legacy store (localStorage)
|
||||
var migrateRecentPads = common.migrateRecentPads = function (pads) {
|
||||
return pads.map(function (pad) {
|
||||
var hash;
|
||||
@ -405,16 +418,7 @@ load pinpad dynamically only after you know that it will be needed */
|
||||
ctime: pad[1],
|
||||
};
|
||||
} else if (pad && typeof(pad) === 'object') {
|
||||
if (!pad.ctime) { pad.ctime = pad.atime; }
|
||||
if (!pad.title) {
|
||||
pad.href.replace(/#(.*)$/, function (x, hash) {
|
||||
pad.title = hash.slice(0,8);
|
||||
});
|
||||
}
|
||||
if (/^https*:\/\//.test(pad.href)) {
|
||||
pad.href = common.getRelativeHref(pad.href);
|
||||
}
|
||||
hash = pad.href.slice(pad.href.indexOf('#')+1);
|
||||
hash = checkObjectData(pad);
|
||||
if (!hash || !common.parseHash(hash)) { return; }
|
||||
return pad;
|
||||
} else {
|
||||
@ -424,6 +428,18 @@ load pinpad dynamically only after you know that it will be needed */
|
||||
}
|
||||
}).filter(function (x) { return x; });
|
||||
};
|
||||
// Remove everything from RecentPads that is not an object and check the objects
|
||||
var checkRecentPads = common.checkRecentPads = function (pads) {
|
||||
pads.forEach(function (pad, i) {
|
||||
if (pad && typeof(pad) === 'object') {
|
||||
var hash = checkObjectData(pad);
|
||||
if (!hash || !common.parseHash(hash)) { return; }
|
||||
return pad;
|
||||
}
|
||||
console.error("[Cryptpad.migrateRecentPads] pad had unexpected value");
|
||||
getStore().removeData(i);
|
||||
});
|
||||
};
|
||||
|
||||
// Get the pads from localStorage to migrate them to the object store
|
||||
var getLegacyPads = common.getLegacyPads = function (cb) {
|
||||
@ -486,14 +502,14 @@ load pinpad dynamically only after you know that it will be needed */
|
||||
};
|
||||
|
||||
// Create untitled documents when no name is given
|
||||
var getDefaultName = common.getDefaultName = function (parsed, recentPads) {
|
||||
var getDefaultName = common.getDefaultName = function (parsed) {
|
||||
var type = parsed.type;
|
||||
var untitledIndex = 1;
|
||||
var name = (Messages.type)[type] + ' - ' + new Date().toString().split(' ').slice(0,4).join(' ');
|
||||
return name;
|
||||
};
|
||||
var isDefaultName = common.isDefaultName = function (parsed, title) {
|
||||
var name = getDefaultName(parsed, []);
|
||||
var name = getDefaultName(parsed);
|
||||
return title === name;
|
||||
};
|
||||
|
||||
@ -594,29 +610,18 @@ load pinpad dynamically only after you know that it will be needed */
|
||||
};
|
||||
|
||||
// STORAGE
|
||||
/* fetch and migrate your pad history from localStorage */
|
||||
/* fetch and migrate your pad history from the store */
|
||||
var getRecentPads = common.getRecentPads = function (cb) {
|
||||
getStore().getDrive(storageKey, function (err, recentPads) {
|
||||
if (isArray(recentPads)) {
|
||||
cb(void 0, migrateRecentPads(recentPads));
|
||||
checkRecentPads(recentPads);
|
||||
cb(void 0, recentPads);
|
||||
return;
|
||||
}
|
||||
cb(void 0, []);
|
||||
});
|
||||
};
|
||||
|
||||
// STORAGE
|
||||
/* commit a list of pads to localStorage */
|
||||
// TODO integrate pinning if enabled
|
||||
var setRecentPads = common.setRecentPads = function (pads, cb) {
|
||||
getStore().setDrive(storageKey, pads, function (err, data) {
|
||||
if (PINNING_ENABLED && isLoggedIn()) {
|
||||
console.log("TODO check pin hash");
|
||||
}
|
||||
cb(err, data);
|
||||
});
|
||||
};
|
||||
|
||||
// STORAGE: Display Name
|
||||
var getLastName = common.getLastName = function (cb) {
|
||||
common.getAttribute('username', function (err, userName) {
|
||||
@ -636,7 +641,6 @@ load pinpad dynamically only after you know that it will be needed */
|
||||
};
|
||||
|
||||
// STORAGE
|
||||
// TODO integrate pinning if enabled
|
||||
var forgetPad = common.forgetPad = function (href, cb) {
|
||||
var parsed = parsePadUrl(href);
|
||||
|
||||
@ -724,6 +728,8 @@ load pinpad dynamically only after you know that it will be needed */
|
||||
var href = window.location.href;
|
||||
var parsed = parsePadUrl(href);
|
||||
href = getRelativeHref(href);
|
||||
// getRecentPads return the array from the drive, not a copy
|
||||
// We don't have to call "set..." at the end, everything is stored with listmap
|
||||
getRecentPads(function (err, recent) {
|
||||
if (err) {
|
||||
cb(err);
|
||||
@ -779,20 +785,15 @@ load pinpad dynamically only after you know that it will be needed */
|
||||
|
||||
if (!contains) {
|
||||
var data = makePad(href, name);
|
||||
renamed.push(data);
|
||||
if (typeof(getStore().addPad) === "function") {
|
||||
getStore().pushData(data);
|
||||
getStore().addPad(href, common.initialPath, common.initialName || name);
|
||||
}
|
||||
}
|
||||
|
||||
setRecentPads(renamed, function (err, data) {
|
||||
if (updateWeaker.length > 0) {
|
||||
updateWeaker.forEach(function (obj) {
|
||||
getStore().replaceHref(obj.o, obj.n);
|
||||
});
|
||||
}
|
||||
cb(err, data);
|
||||
});
|
||||
cb(err, recent);
|
||||
});
|
||||
};
|
||||
|
||||
@ -920,6 +921,13 @@ load pinpad dynamically only after you know that it will be needed */
|
||||
|
||||
// TODO check if pin list is up to date
|
||||
// if not, reset
|
||||
common.arePinsSynced(function (err, yes) {
|
||||
if (!yes) {
|
||||
common.resetPins(function (err, hash) {
|
||||
console.log('RESET DONE');
|
||||
});
|
||||
}
|
||||
});
|
||||
cb();
|
||||
});
|
||||
} else if (PINNING_ENABLED) {
|
||||
@ -1098,6 +1106,9 @@ load pinpad dynamically only after you know that it will be needed */
|
||||
};
|
||||
|
||||
var pinsReady = common.pinsReady = function () {
|
||||
if (!isLoggedIn()) {
|
||||
return false;
|
||||
}
|
||||
if (!PINNING_ENABLED) {
|
||||
console.error('[PINNING_DISABLED]');
|
||||
return false;
|
||||
@ -1121,8 +1132,7 @@ load pinpad dynamically only after you know that it will be needed */
|
||||
};
|
||||
|
||||
var resetPins = common.resetPins = function (cb) {
|
||||
if (!PINNING_ENABLED) { return void console.error('[PINNING_DISABLED]'); }
|
||||
if (!rpc) { return void console.error('[RPC_NOT_READY]'); }
|
||||
if (!pinsReady()) { return void cb ('[RPC_NOT_READY]'); }
|
||||
|
||||
var list = getCanonicalChannelList();
|
||||
rpc.reset(list, function (e, hash) {
|
||||
@ -1131,6 +1141,24 @@ load pinpad dynamically only after you know that it will be needed */
|
||||
});
|
||||
};
|
||||
|
||||
var pinPads = common.pinPads = function (pads, cb) {
|
||||
if (!pinsReady()) { return void cb ('[RPC_NOT_READY]'); }
|
||||
|
||||
rpc.pin(pads, function (e, hash) {
|
||||
if (e) { return void cb(e); }
|
||||
cb(void 0, hash);
|
||||
});
|
||||
};
|
||||
|
||||
var unpinPads = common.unpinPads = function (pads, cb) {
|
||||
if (!pinsReady()) { return void cb ('[RPC_NOT_READY]'); }
|
||||
|
||||
rpc.unpin(pads, function (e, hash) {
|
||||
if (e) { return void cb(e); }
|
||||
cb(void 0, hash);
|
||||
});
|
||||
};
|
||||
|
||||
var createButton = common.createButton = function (type, rightside, data, callback) {
|
||||
var button;
|
||||
var size = "17px";
|
||||
|
||||
@ -45,6 +45,23 @@ define([
|
||||
return a;
|
||||
};
|
||||
|
||||
var pushFileData = exp.pushData = function (data) {
|
||||
Cryptpad.pinPads([Cryptpad.hrefToHexChannelId(data.href)], function (e, hash) {
|
||||
console.log(hash);
|
||||
});
|
||||
files[FILES_DATA].push(data);
|
||||
};
|
||||
var spliceFileData = exp.removeData = function (idx) {
|
||||
var data = files[FILES_DATA][idx];
|
||||
if (typeof data === "object") {
|
||||
Cryptpad.unpinPads([Cryptpad.hrefToHexChannelId(data.href)], function (e, hash) {
|
||||
console.log(hash);
|
||||
});
|
||||
}
|
||||
files[FILES_DATA].splice(idx, 1);
|
||||
};
|
||||
|
||||
|
||||
var comparePath = exp.comparePath = function (a, b) {
|
||||
if (!a || !b || !$.isArray(a) || !$.isArray(b)) { return false; }
|
||||
if (a.length !== b.length) { return false; }
|
||||
@ -459,7 +476,7 @@ define([
|
||||
var idx = files[FILES_DATA].indexOf(f);
|
||||
if (idx !== -1) {
|
||||
debug("Removing", f, "from filesData");
|
||||
files[FILES_DATA].splice(idx, 1);
|
||||
spliceFileData(idx);
|
||||
removePadAttribute(f.href);
|
||||
}
|
||||
});
|
||||
@ -745,7 +762,7 @@ define([
|
||||
};
|
||||
|
||||
var pushNewFileData = function (href, title) {
|
||||
files[FILES_DATA].push({
|
||||
pushFileData({
|
||||
href: href,
|
||||
title: title,
|
||||
atime: +new Date(),
|
||||
@ -865,7 +882,7 @@ define([
|
||||
var idx = files[FILES_DATA].indexOf(f);
|
||||
if (idx !== -1) {
|
||||
debug("Removing", f, "from filesData");
|
||||
files[FILES_DATA].splice(idx, 1);
|
||||
spliceFileData(idx);
|
||||
// Remove the "padAttributes" stored in the realtime object for that pad
|
||||
removePadAttribute(f.href);
|
||||
}
|
||||
@ -1009,7 +1026,7 @@ define([
|
||||
return o.href === href;
|
||||
});
|
||||
if (!test) {
|
||||
files[FILES_DATA].push(fileData);
|
||||
pushFileData(fileData);
|
||||
}
|
||||
if (files[TEMPLATE].indexOf(href) === -1) {
|
||||
files[TEMPLATE].push(href);
|
||||
@ -1141,7 +1158,7 @@ define([
|
||||
toClean.forEach(function (el) {
|
||||
var idx = fd.indexOf(el);
|
||||
if (idx !== -1) {
|
||||
fd.splice(idx, 1);
|
||||
spliceFileData(idx);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@ -86,6 +86,9 @@ define([
|
||||
cb(void 0, Object.keys(storeObj));
|
||||
};
|
||||
|
||||
ret.removeData = filesOp.removeData;
|
||||
ret.pushData = filesOp.pushData;
|
||||
|
||||
ret.addPad = function (href, path, name) {
|
||||
filesOp.addPad(href, path, name);
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user