mirror of
https://github.com/cryptpad/cryptpad.git
synced 2026-09-14 11:05:41 +05:00
Load the drive and its shared folders without any network
This commit is contained in:
parent
3a24ef8935
commit
980d3c7fff
@ -317,9 +317,12 @@ button.primary:hover{
|
||||
var c = types.indexOf(data.type);
|
||||
if (c < current) { return console.error(data); }
|
||||
try {
|
||||
document.querySelector('.cp-loading-spinner-container').style.display = 'none';
|
||||
document.querySelector('.cp-loading-progress-list').innerHTML = makeList(data);
|
||||
document.querySelector('.cp-loading-progress-container').innerHTML = makeBar(data);
|
||||
var a = document.querySelector('.cp-loading-spinner-container');
|
||||
if (a) { a.style.display = 'none'; }
|
||||
var b = document.querySelector('.cp-loading-progress-list');
|
||||
if (b) { b.innerHTML = makeList(data); }
|
||||
var c = document.querySelector('.cp-loading-progress-container');
|
||||
if (c) { c.innerHTML = makeBar(data); }
|
||||
} catch (e) { console.error(e); }
|
||||
};
|
||||
window.CryptPad_updateLoadingProgress = updateLoadingProgress;
|
||||
|
||||
@ -42,7 +42,7 @@ define([
|
||||
|
||||
var APP = window.APP = {
|
||||
editable: false,
|
||||
online: true,
|
||||
online: false,
|
||||
mobile: function () {
|
||||
if (window.matchMedia) { return !window.matchMedia('(any-pointer:fine)').matches; }
|
||||
else { return $('body').width() <= 600; }
|
||||
@ -4361,8 +4361,12 @@ define([
|
||||
var anonDrive = manager.isPathIn(currentPath, [FILES_DATA]) && !APP.loggedIn;
|
||||
|
||||
if (manager.isFolder(el) && !manager.isSharedFolder(el) && !anonDrive) { // Folder
|
||||
// disconnected
|
||||
if (!APP.editable) {
|
||||
return void UI.warn(Messages.error); // XXX
|
||||
}
|
||||
// if folder is inside SF
|
||||
if (manager.isInSharedFolder(paths[0].path)) {
|
||||
else if (manager.isInSharedFolder(paths[0].path)) {
|
||||
return void UI.alert(Messages.convertFolderToSF_SFParent);
|
||||
}
|
||||
// if folder already contains SF
|
||||
|
||||
@ -89,7 +89,7 @@ define([
|
||||
Realtime.whenRealtimeSyncs(s.sharedFolders[k].realtime, waitFor());
|
||||
}
|
||||
}
|
||||
}).nThen(function () { cb(); });
|
||||
}).nThen(function () { console.log('done');cb(); });
|
||||
};
|
||||
|
||||
Store.get = function (clientId, data, cb) {
|
||||
@ -2162,7 +2162,7 @@ define([
|
||||
if (!s) { return void cb({ error: 'ENOTFOUND' }); }
|
||||
SF.load({
|
||||
isNew: isNew,
|
||||
network: store.network,
|
||||
network: store.network || store.networkPromise,
|
||||
store: s,
|
||||
isNewChannel: Store.isNewChannel
|
||||
}, id, data, cb);
|
||||
@ -2465,8 +2465,45 @@ define([
|
||||
});
|
||||
};
|
||||
|
||||
var onReady = function (clientId, returned, cb) {
|
||||
var onCacheReady = function (clientId, cb) {
|
||||
var proxy = store.proxy;
|
||||
if (!proxy.settings) { proxy.settings = NEW_USER_SETTINGS; }
|
||||
if (!proxy.friends_pending) { proxy.friends_pending = {}; }
|
||||
var unpin = function (data, cb) {
|
||||
if (!store.loggedIn) { return void cb(); }
|
||||
Store.unpinPads(null, data, cb);
|
||||
};
|
||||
var pin = function (data, cb) {
|
||||
if (!store.loggedIn) { return void cb(); }
|
||||
Store.pinPads(null, data, cb);
|
||||
};
|
||||
var manager = store.manager = ProxyManager.create(proxy.drive, {
|
||||
onSync: function (cb) { onSync(null, cb); },
|
||||
edPublic: proxy.edPublic,
|
||||
pin: pin,
|
||||
unpin: unpin,
|
||||
loadSharedFolder: loadSharedFolder,
|
||||
settings: proxy.settings,
|
||||
removeOwnedChannel: function (channel, cb) { Store.removeOwnedChannel('', channel, cb); },
|
||||
Store: Store
|
||||
}, {
|
||||
outer: true,
|
||||
edPublic: store.proxy.edPublic,
|
||||
loggedIn: store.loggedIn,
|
||||
log: function (msg) {
|
||||
// broadcast to all drive apps
|
||||
sendDriveEvent("DRIVE_LOG", msg);
|
||||
},
|
||||
rt: store.realtime
|
||||
});
|
||||
var userObject = store.userObject = manager.user.userObject;
|
||||
addSharedFolderHandler();
|
||||
userObject.migrate(cb);
|
||||
};
|
||||
var onReady = function (clientId, returned, cb) {
|
||||
console.error('READY');
|
||||
var proxy = store.proxy;
|
||||
/*
|
||||
var unpin = function (data, cb) {
|
||||
if (!store.loggedIn) { return void cb(); }
|
||||
Store.unpinPads(null, data, cb);
|
||||
@ -2498,9 +2535,16 @@ define([
|
||||
});
|
||||
var userObject = store.userObject = manager.user.userObject;
|
||||
addSharedFolderHandler();
|
||||
*/
|
||||
store.ready = true;
|
||||
var manager = store.manager;
|
||||
var userObject = store.userObject;
|
||||
|
||||
nThen(function (waitFor) {
|
||||
userObject.migrate(waitFor());
|
||||
if (manager) { return; }
|
||||
onCacheReady(clientId, waitFor);
|
||||
manager = store.manager;
|
||||
userObject = store.userObject;
|
||||
}).nThen(function (waitFor) {
|
||||
initAnonRpc(null, null, waitFor());
|
||||
initRpc(null, null, waitFor());
|
||||
@ -2533,12 +2577,12 @@ define([
|
||||
loadUniversal(Messenger, 'messenger', waitFor);
|
||||
store.messenger = store.modules['messenger'];
|
||||
loadUniversal(Profile, 'profile', waitFor);
|
||||
loadUniversal(Team, 'team', waitFor, clientId);
|
||||
loadUniversal(Team, 'team', waitFor, clientId); // XXX load teams offline?
|
||||
loadUniversal(History, 'history', waitFor);
|
||||
cleanFriendRequests();
|
||||
}).nThen(function () {
|
||||
var requestLogin = function () {
|
||||
broadcast([], "REQUEST_LOGIN");
|
||||
var requestLogin = function () {
|
||||
broadcast([], "REQUEST_LOGIN");
|
||||
};
|
||||
|
||||
if (store.loggedIn) {
|
||||
@ -2571,7 +2615,10 @@ define([
|
||||
returned.feedback = Util.find(proxy, ['settings', 'general', 'allowUserFeedback']);
|
||||
Feedback.init(returned.feedback);
|
||||
|
||||
if (typeof(cb) === 'function') { cb(returned); }
|
||||
// XXX send feedback and logintoken to outer...
|
||||
//if (typeof(cb) === 'function') { cb(returned); }
|
||||
store.offline = false;
|
||||
sendDriveEvent('NETWORK_RECONNECT');
|
||||
|
||||
if (typeof(proxy.uid) !== 'string' || proxy.uid.length !== 32) {
|
||||
// even anonymous users should have a persistent, unique-ish id
|
||||
@ -2670,8 +2717,17 @@ define([
|
||||
if (!data.userHash) {
|
||||
returned.anonHash = Hash.getEditHashFromKeys(secret);
|
||||
}
|
||||
if (typeof(cb) === "function") { cb(returned); }
|
||||
}).on('cacheready', function (info) {
|
||||
store.offline = true;
|
||||
store.realtime = info.realtime;
|
||||
store.networkPromise = info.networkPromise;
|
||||
// XXX make sure we have a valid drive available
|
||||
onCacheReady(clientId, function () {
|
||||
if (typeof(cb) === "function") { cb(returned); }
|
||||
});
|
||||
}).on('ready', function (info) {
|
||||
if (store.userObject) { return; } // the store is already ready, it is a reconnection
|
||||
if (store.ready) { return; } // the store is already ready, it is a reconnection
|
||||
store.driveMetadata = info.metadata;
|
||||
if (!rt.proxy.drive || typeof(rt.proxy.drive) !== 'object') { rt.proxy.drive = {}; }
|
||||
var drive = rt.proxy.drive;
|
||||
|
||||
@ -128,11 +128,11 @@ define([
|
||||
var uo = store.manager.addProxy(id, sf.rt, leave, secondaryKey);
|
||||
// NOTE: Shared folder migration, disable for now
|
||||
SF.checkMigration(secondaryKey, sf.rt.proxy, uo, function () {
|
||||
cb(sf.rt, sf.metadata);
|
||||
cb(sf.rt);
|
||||
});
|
||||
*/
|
||||
store.manager.addProxy(id, sf.rt, leave, secondaryKey);
|
||||
cb(sf.rt, sf.metadata);
|
||||
cb(sf.rt);
|
||||
});
|
||||
sf.teams.push({
|
||||
cb: cb,
|
||||
@ -182,6 +182,26 @@ define([
|
||||
}
|
||||
};
|
||||
var rt = sf.rt = Listmap.create(listmapConfig);
|
||||
rt.proxy.on('cacheready', function (info) {
|
||||
if (isNew && !Object.keys(rt.proxy).length) {
|
||||
// New Shared folder: no migration required
|
||||
rt.proxy.version = 2;
|
||||
}
|
||||
if (!sf.teams) {
|
||||
return;
|
||||
}
|
||||
sf.teams.forEach(function (obj) {
|
||||
var leave = function () { SF.leave(secret.channel, obj.store.id); };
|
||||
|
||||
// We can safely call addProxy and obj.cb here because
|
||||
// 1. addProxy won't re-add the same folder twice on 'ready'
|
||||
// 2. obj.cb is using Util.once
|
||||
rt.cache = true;
|
||||
obj.store.manager.addProxy(obj.id, rt, leave, obj.secondaryKey);
|
||||
obj.cb(sf.rt);
|
||||
});
|
||||
sf.ready = true;
|
||||
});
|
||||
rt.proxy.on('ready', function (info) {
|
||||
if (isNew && !Object.keys(rt.proxy).length) {
|
||||
// New Shared folder: no migration required
|
||||
@ -196,13 +216,13 @@ define([
|
||||
var uo = obj.store.manager.addProxy(obj.id, rt, leave, obj.secondaryKey);
|
||||
// NOTE: Shared folder migration, disable for now
|
||||
SF.checkMigration(secondaryKey, rt.proxy, uo, function () {
|
||||
obj.cb(sf.rt, info.metadata);
|
||||
obj.cb(sf.rt);
|
||||
});
|
||||
*/
|
||||
rt.cache = false;
|
||||
obj.store.manager.addProxy(obj.id, rt, leave, obj.secondaryKey);
|
||||
obj.cb(sf.rt, info.metadata);
|
||||
obj.cb(sf.rt);
|
||||
});
|
||||
sf.metadata = info.metadata;
|
||||
sf.ready = true;
|
||||
});
|
||||
rt.proxy.on('error', function (info) {
|
||||
|
||||
@ -17,6 +17,15 @@ define([
|
||||
|
||||
// Add a shared folder to the list
|
||||
var addProxy = function (Env, id, lm, leave, editKey) {
|
||||
if (Env.folders[id]) {
|
||||
// Shared folder already added to the proxy-manager, probably
|
||||
// a cached version
|
||||
if (Env.folders[id].offline && !lm.cache) {
|
||||
Env.folders[id].offline = false;
|
||||
Env.Store.refreshDriveUI();
|
||||
}
|
||||
return;
|
||||
}
|
||||
var cfg = getConfig(Env);
|
||||
cfg.sharedFolder = true;
|
||||
cfg.id = id;
|
||||
@ -38,14 +47,15 @@ define([
|
||||
Env.folders[id] = {
|
||||
proxy: lm.proxy,
|
||||
userObject: userObject,
|
||||
leave: leave
|
||||
leave: leave,
|
||||
offline: Boolean(lm.cache)
|
||||
};
|
||||
if (proxy.on) {
|
||||
proxy.on('disconnect', function () {
|
||||
Env.folders[id].offline = true;
|
||||
});
|
||||
proxy.on('reconnect', function () {
|
||||
Env.folders[id].online = true;
|
||||
Env.folders[id].offline = false;
|
||||
});
|
||||
}
|
||||
return userObject;
|
||||
@ -537,7 +547,7 @@ define([
|
||||
Env.user.userObject.add(id, resolved.path);
|
||||
|
||||
// 2b. load the proxy
|
||||
Env.loadSharedFolder(id, folderData, waitFor(function (rt, metadata) {
|
||||
Env.loadSharedFolder(id, folderData, waitFor(function (rt) {
|
||||
if (!rt) {
|
||||
waitFor.abort();
|
||||
return void cb({ error: 'EDELETED' });
|
||||
@ -546,11 +556,13 @@ define([
|
||||
if (!rt.proxy.metadata) { // Creating a new shared folder
|
||||
rt.proxy.metadata = { title: data.name || Messages.fm_newFolder };
|
||||
}
|
||||
// If we're importing a folder, check its serverside metadata
|
||||
if (data.folderData && metadata) {
|
||||
var fData = Env.user.proxy[UserObject.SHARED_FOLDERS][id];
|
||||
if (metadata.owners) { fData.owners = metadata.owners; }
|
||||
if (metadata.expire) { fData.expire = +metadata.expire; }
|
||||
if (data.folderData) {
|
||||
// If we're importing a folder, check its serverside metadata
|
||||
Env.Store.getPadMetadata(null, { channel: folderData.channel }, function (md) {
|
||||
var fData = Env.user.proxy[UserObject.SHARED_FOLDERS][id];
|
||||
if (md.owners) { fData.owners = md.owners; }
|
||||
if (md.expire) { fData.expire = +md.expire; }
|
||||
});
|
||||
}
|
||||
}), !Boolean(data.folderData));
|
||||
}).nThen(function () {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user