Hide duplicated owned pads

pull/1/head
yflory 6 years ago
parent 7658fb90a2
commit 0a7adb3e88

@ -885,6 +885,7 @@ define([
if (fPath) { if (fPath) {
// This is a shared folder, we have to fix the paths in the search results // This is a shared folder, we have to fix the paths in the search results
results.forEach(function (r) { results.forEach(function (r) {
r.inSharedFolder = true;
r.paths.forEach(function (p) { r.paths.forEach(function (p) {
Array.prototype.unshift.apply(p, fPath); Array.prototype.unshift.apply(p, fPath);
}); });
@ -899,8 +900,8 @@ define([
var getRecentPads = function (Env) { var getRecentPads = function (Env) {
return Env.user.userObject.getRecentPads(); return Env.user.userObject.getRecentPads();
}; };
var getOwnedPads = function (Env, edPublic) { var getOwnedPads = function (Env) {
return Env.user.userObject.getOwnedPads(edPublic); return Env.user.userObject.getOwnedPads(Env.edPublic);
}; };
var getSharedFolderData = function (Env, id) { var getSharedFolderData = function (Env, id) {
@ -961,10 +962,27 @@ define([
return Env.user.userObject.hasFile(el, trashRoot); return Env.user.userObject.hasFile(el, trashRoot);
}; };
var createInner = function (proxy, sframeChan, uoConfig) { // Get the owned files in the main drive that are also duplicated in shared folders
var isDuplicateOwned = function (Env, path) {
if (isInSharedFolder(Env, path)) { return; }
var data = getFileData(Env, Env.user.userObject.find(path));
if (!data) { return; }
if (!_ownedByMe(Env, data.owners)) { return; }
var channel = data.channel;
if (!channel) { return; }
var foldersUO = Object.keys(Env.folders).map(function (k) {
return Env.folders[k].userObject;
});
return foldersUO.some(function (uo) {
return uo.findChannels([channel]).length;
});
};
var createInner = function (proxy, sframeChan, edPublic, uoConfig) {
var Env = { var Env = {
cfg: uoConfig, cfg: uoConfig,
sframeChan: sframeChan, sframeChan: sframeChan,
edPublic: edPublic,
user: { user: {
proxy: proxy, proxy: proxy,
userObject: UserObject.init(proxy, uoConfig) userObject: UserObject.init(proxy, uoConfig)
@ -1006,6 +1024,7 @@ define([
getSharedFolderData: callWithEnv(getSharedFolderData), getSharedFolderData: callWithEnv(getSharedFolderData),
isInSharedFolder: callWithEnv(isInSharedFolder), isInSharedFolder: callWithEnv(isInSharedFolder),
getUserObjectPath: callWithEnv(getUserObjectPath), getUserObjectPath: callWithEnv(getUserObjectPath),
isDuplicateOwned: callWithEnv(isDuplicateOwned),
// Generic // Generic
isFile: callWithEnv(isFile), isFile: callWithEnv(isFile),
isFolder: callWithEnv(isFolder), isFolder: callWithEnv(isFolder),

@ -275,7 +275,7 @@ define([
forceCreationScreen: forceCreationScreen, forceCreationScreen: forceCreationScreen,
password: password, password: password,
channel: secret.channel, channel: secret.channel,
enableSF: localStorage.CryptPad_SF === "1" // TODO to remove when enabled by default enableSF: localStorage.CryptPad_SF === "1", // TODO to remove when enabled by default
}; };
if (window.CryptPad_newSharedFolder) { if (window.CryptPad_newSharedFolder) {
additionalPriv.newSharedFolder = window.CryptPad_newSharedFolder; additionalPriv.newSharedFolder = window.CryptPad_newSharedFolder;

@ -646,6 +646,10 @@ define(function () {
out.settings_logoutEverywhere = "Force log out of all other web sessions"; out.settings_logoutEverywhere = "Force log out of all other web sessions";
out.settings_logoutEverywhereConfirm = "Are you sure? You will need to log in with all your devices."; out.settings_logoutEverywhereConfirm = "Are you sure? You will need to log in with all your devices.";
out.settings_driveDuplicateTitle = "Duplicated owned pads";
out.settings_driveDuplicateHint = "To make sure you always have control over your owned pads, whenever you try to move one into a shared folder, a copy is kept in your drive. You can choose here to hide these duplicated files. You will only see the version stored the shared folder until it is removed from the shared folder or the shared folder itself is removed, then the copy will reappear.";
out.settings_driveDuplicateLabel = "Hide duplicates";
out.settings_codeIndentation = 'Code editor indentation (spaces)'; out.settings_codeIndentation = 'Code editor indentation (spaces)';
out.settings_codeUseTabs = "Indent using tabs (instead of spaces)"; out.settings_codeUseTabs = "Indent using tabs (instead of spaces)";
out.settings_codeFontSize = "Font size in the code editor"; out.settings_codeFontSize = "Font size in the code editor";

@ -363,8 +363,9 @@ define([
APP.origin = priv.origin; APP.origin = priv.origin;
config.loggedIn = APP.loggedIn; config.loggedIn = APP.loggedIn;
config.sframeChan = sframeChan; config.sframeChan = sframeChan;
APP.hideDuplicateOwned = Util.find(priv, ['settings', 'drive', 'hideDuplicate']);
var manager = ProxyManager.createInner(files, sframeChan, config); var manager = ProxyManager.createInner(files, sframeChan, edPublic, config);
Object.keys(folders).forEach(function (id) { Object.keys(folders).forEach(function (id) {
var f = folders[id]; var f = folders[id];
@ -2374,6 +2375,8 @@ define([
var filesList = manager.search(value); var filesList = manager.search(value);
filesList.forEach(function (r) { filesList.forEach(function (r) {
r.paths.forEach(function (path) { r.paths.forEach(function (path) {
if (!r.inSharedFolder &&
APP.hideDuplicateOwned && manager.isDuplicateOwned(path)) { return; }
var href = r.data.href; var href = r.data.href;
var parsed = Hash.parsePadUrl(href); var parsed = Hash.parsePadUrl(href);
var $table = $('<table>'); var $table = $('<table>');
@ -2481,7 +2484,7 @@ define([
// Owned pads category // Owned pads category
var displayOwned = function ($container) { var displayOwned = function ($container) {
var list = manager.getOwnedPads(edPublic); var list = manager.getOwnedPads();
if (list.length === 0) { return; } if (list.length === 0) { return; }
var $fileHeader = getFileListHeader(false); var $fileHeader = getFileListHeader(false);
$container.append($fileHeader); $container.append($fileHeader);
@ -2743,6 +2746,9 @@ define([
// display files // display files
sortedFiles.forEach(function (key) { sortedFiles.forEach(function (key) {
if (manager.isFolder(root[key])) { return; } if (manager.isFolder(root[key])) { return; }
var p = path.slice();
p.push(key);
if (APP.hideDuplicateOwned && manager.isDuplicateOwned(p)) { return; }
var $element = createElement(path, key, root, false); var $element = createElement(path, key, root, false);
if (!$element) { return; } if (!$element) { return; }
$element.appendTo($list); $element.appendTo($list);

@ -63,6 +63,7 @@ define([
'cp-settings-creation-template' 'cp-settings-creation-template'
], ],
'drive': [ 'drive': [
'cp-settings-drive-duplicate',
'cp-settings-resettips', 'cp-settings-resettips',
'cp-settings-thumbnails', 'cp-settings-thumbnails',
'cp-settings-drive-backup', 'cp-settings-drive-backup',
@ -777,6 +778,44 @@ define([
// Drive settings // Drive settings
create['drive-duplicate'] = function () {
var $div = $('<div>', {
'class': 'cp-settings-drive-duplicate cp-sidebarlayout-element'
});
$('<label>').text(Messages.settings_driveDuplicateTitle).appendTo($div);
$('<span>', {'class': 'cp-sidebarlayout-description'})
.text(Messages.settings_driveDuplicateHint).appendTo($div);
var $ok = $('<span>', {'class': 'fa fa-check', title: Messages.saved});
var $spinner = $('<span>', {'class': 'fa fa-spinner fa-pulse'});
var $cbox = $(UI.createCheckbox('cp-settings-drive-duplicate',
Messages.settings_driveDuplicateLabel,
false, { label: {class: 'noTitle'} }));
var $checkbox = $cbox.find('input').on('change', function () {
$spinner.show();
$ok.hide();
var val = $checkbox.is(':checked');
common.setAttribute(['drive', 'hideDuplicate'], val, function () {
$spinner.hide();
$ok.show();
});
});
$cbox.appendTo($div);
$ok.hide().appendTo($cbox);
$spinner.hide().appendTo($cbox);
common.getAttribute(['drive', 'hideDuplicate'], function (e, val) {
if (e) { return void console.error(e); }
if (val) {
$checkbox.attr('checked', 'checked');
}
});
return $div;
};
create['resettips'] = function () { create['resettips'] = function () {
var $div = $('<div>', {'class': 'cp-settings-resettips cp-sidebarlayout-element'}); var $div = $('<div>', {'class': 'cp-settings-resettips cp-sidebarlayout-element'});
$('<label>').text(Messages.settings_resetTips).appendTo($div); $('<label>').text(Messages.settings_resetTips).appendTo($div);

Loading…
Cancel
Save