Skip to content

Commit

Permalink
Adding archive/extract functionality to FTP driver on GNU/Linux
Browse files Browse the repository at this point in the history
Adding localization for new error messages for archive/extract commands
Fixing sort localization
Fixing defect with temporary path directory permissions
Fixing defect with cacheDir function hiding files in folders with space in name
Fixing defect with mount function
Fixed overwrite dialog for extract command
  • Loading branch information
Yuri Khrustalev committed Mar 19, 2013
1 parent 7f59c13 commit 1644251
Show file tree
Hide file tree
Showing 15 changed files with 694 additions and 85 deletions.
2 changes: 1 addition & 1 deletion js/commands/archive.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ elFinder.prototype.commands.archive = function() {
cnt = files.length,
mime = type || mimes[0],
cwd = fm.cwd(),
error = ['errArchive', 'errPerm'],
error = ['errArchive', 'errPerm', 'errCreatingTempDir', 'errFtpDownloadFile', 'errFtpUploadFile', 'errFtpMkdir', 'errArchiveExec', 'errExtractExec', 'errRm'],
dfrd = $.Deferred().fail(function(error) {
error && fm.error(error);
}),
Expand Down
136 changes: 106 additions & 30 deletions js/commands/extract.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,46 +35,122 @@ elFinder.prototype.commands.extract = function() {
var files = this.files(hashes),
dfrd = $.Deferred(),
cnt = files.length,
complete = cnt,
i, file, error;

if (!(this.enabled() && cnt && mimes.length)) {
return dfrd.reject();
}
i, error,
decision;

var overwriteAll = false;
var omitAll = false;

var names = $.map(fm.files(hashes), function(file) { return file.name; });
var map = {};
$.map(fm.files(hashes), function(file) { map[file.name] = file; });

for (i = 0; i < cnt; i++) {
file = files[i];
var decide = function(decision) {
switch (decision) {
case 'overwrite_all' :
overwriteAll = true;
break;
case 'omit_all':
omitAll = true;
break;
}
};

var unpack = function(file) {
if (!(file.read && fm.file(file.phash).write)) {
error = ['errExtract', file.name, 'errPerm']
error = ['errExtract', file.name, 'errPerm'];
fm.error(error);
return dfrd.reject(error);
}

if ($.inArray(file.mime, mimes) === -1) {
dfrd.reject(error);
} else if ($.inArray(file.mime, mimes) === -1) {
error = ['errExtract', file.name, 'errNoArchive'];
fm.error(error);
return dfrd.reject(error);
dfrd.reject(error);
} else {
fm.request({
data:{cmd:'extract', target:file.hash},
notify:{type:'extract', cnt:1},
syncOnFail:true
})
.fail(function (error) {
if (!dfrd.isRejected()) {
dfrd.reject(error);
}
})
.done(function () {
});
}

fm.request({
data : {cmd : 'extract', target : file.hash},
notify : {type : 'extract', cnt : 1},
syncOnFail : true
})
.fail(function(error) {
if (dfrd.state() == 'pending') {
dfrd.reject(error);
}
})
.done(function() {
complete--;
if (complete == 0) {
};

var confirm = function(files, index) {
var file = files[index];
var name = file.name.replace(/\.((tar\.(gz|bz|bz2|z|lzo))|cpio\.gz|ps\.gz|xcf\.(gz|bz2)|[a-z0-9]{1,4})$/ig, '');
var existed = ($.inArray(name, names) >= 0);
if(existed && map[name].mime != 'directory') {
fm.confirm(
{
title : fm.i18n('ntfextract'),
text : fm.i18n(['errExists', name, 'confirmRepl']),
accept:{
label : 'btnYes',
callback:function (all) {
decision = all ? 'overwrite_all' : 'overwrite';
decide(decision);
if(!overwriteAll && !omitAll) {
if('overwrite' == decision) {
unpack(file);
}
if((index+1) < cnt) {
confirm(files, index+1);
} else {
dfrd.resolve();
}
} else if(overwriteAll) {
for (i = 0; i < cnt; i++) {
unpack(files[i]);
}
dfrd.resolve();
}
}
},
reject : {
label : 'btnNo',
callback:function (all) {
decision = all ? 'omit_all' : 'omit';
decide(decision);
if(!overwriteAll && !omitAll && (index+1) < cnt) {
confirm(files, index+1);
} else if (omitAll) {
dfrd.resolve();
}
}
},
cancel : {
label : 'btnCancel',
callback:function () {
dfrd.resolve();
}
},
all : (cnt > 1)
}
);
} else {
unpack(file);
if((index+1) < cnt) {
confirm(files, index+1);
} else {
dfrd.resolve();
}
});

}
};

if (!(this.enabled() && cnt && mimes.length)) {
return dfrd.reject();
}

if(cnt > 0) {
confirm(files, 0);
}

return dfrd;
}

Expand Down
3 changes: 2 additions & 1 deletion js/elFinder.js
Original file line number Diff line number Diff line change
Expand Up @@ -1116,7 +1116,8 @@ window.elFinder = function(node, opts) {
dfrd.reject(error);
error && self.request({
data : {cmd : 'open', target : self.lastDir(''), tree : 1, init : 1},
notify : {type : 'open', cnt : 1, hideCnt : true}
notify : {type : 'open', cnt : 1, hideCnt : true},
preventDefault : true
});
})
.done(function(odata, pdata) {
Expand Down
2 changes: 1 addition & 1 deletion js/elFinder.version.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
*
* @type String
**/
elFinder.prototype.version = '2.0 rc1';
elFinder.prototype.version = '2.0.2';

19 changes: 17 additions & 2 deletions js/i18n/elfinder.de.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,22 @@ if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object'
'errArcType' : 'Archivtyp nicht untersützt.',
'errNoArchive' : 'Bei der Datei handelt es nicht um ein Archiv oder der Archivtyp nicht unterstütz.',
'errCmdNoSupport' : 'Das Backend unterstütz diesen Befehl nicht.',

'errSessionExpires' : 'Ihre Sitzung ist aufgrund von Inaktivität abgelaufen',
'errCreatingTempDir' : 'Erstellung des temporären Verzeichnisses nicht möglich: "$1"',
'errFtpDownloadFile' : 'Download der Datei über FTP nicht möglich: "$1"',
'errFtpUploadFile' : 'Upload der Datei zu FTP nicht möglich: "$1"',
'errFtpMkdir' : 'Erstellung des Remote-Verzeichnisses auf FTP nicht möglich: "$1"',
'errArchiveExec' : 'Fehler bei der Archivierung der Dateien: "$1"',
'errExtractExec' : 'Fehler beim Extrahieren der Dateien: "$1"',
'cmdsort' : 'Sortieren',
'sortkind' : 'nach Typ',
'sortname' : 'nach Name',
'sortsize' : 'nach Größe',
'sortdate' : 'nach Datum',
'sortFoldersFirst' : 'Ordner zuerst',
'errUploadFile' : 'Upload von "$1" nicht möglich.',


/******************************* commands names ********************************/
'cmdarchive' : 'Archiv erstellen',
'cmdback' : 'Zurück',
Expand Down Expand Up @@ -118,7 +133,7 @@ if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object'
'ntfarchive' : 'Erstelle Archiv',
'ntfextract' : 'Entpacke Dateien',
'ntfsearch' : 'Suche',
'ntfsmth' : 'Bin beschäftigt >_<',
'ntfsmth' : 'Bin beschäftigt',

/************************************ dates **********************************/
'dateUnknown' : 'unbekannt',
Expand Down
14 changes: 11 additions & 3 deletions js/i18n/elfinder.en.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,14 @@ if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object'
'errNetMountNoDriver' : 'Unsupported protocol.', // added 17.04.2012
'errNetMountFailed' : 'Mount failed.', // added 17.04.2012
'errNetMountHostReq' : 'Host required.', // added 18.04.2012
'errSessionExpires' : 'Your session has expired due to inactivity.',
'errCreatingTempDir' : 'Unable to create temporary directory: "$1"',
'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"',
'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"',
'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"',
'errArchiveExec' : 'Error while archiving files: "$1"',
'errExtractExec' : 'Error while extracting files: "$1"',

/******************************* commands names ********************************/
'cmdarchive' : 'Create archive',
'cmdback' : 'Back',
Expand Down Expand Up @@ -137,9 +145,9 @@ if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object'
'ntfextract' : 'Extracting files from archive',
'ntfsearch' : 'Searching files',
'ntfresize' : 'Resizing images',
'ntfsmth' : 'Doing something >_<',
'ntfloadimg' : 'Loading image',
'ntfnetmount' : 'Mounting network volume', // added 18.04.2012
'ntfsmth' : 'Doing something',
'ntfloadimg' : 'Loading image',
'ntfnetmount' : 'Mounting network volume', // added 18.04.2012

/************************************ dates **********************************/
'dateUnknown' : 'unknown',
Expand Down
19 changes: 17 additions & 2 deletions js/i18n/elfinder.es.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,21 @@ if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object'
'errReplByChild' : 'La carpeta “$1” no puede ser reemplazada por un elemento contenido en ella.',
'errArcSymlinks' : 'Por razones de seguridad no se pueden descomprimir archivos que contengan symlinks.',
'errArcMaxSize' : 'El tamaño del archivo excede el máximo permitido.',

'errSessionExpires' : 'La sesión ha expirado por inactividad',
'errCreatingTempDir' : 'No se ha podido crear al directorio temporal: "$1"',
'errFtpDownloadFile' : 'No se ha podido descargar el archivo desde FTP: "$1"',
'errFtpUploadFile' : 'No se ha podido cargar el archivo a FTP: "$1"',
'errFtpMkdir' : 'No se ha podido crear el directorio remoto en FTP: "$1"',
'errArchiveExec' : 'Se ha producido un error durante la archivación: "$1"',
'errExtractExec' : 'Se ha producido un error durante la extracción de archivos: "$1"',
'cmdsort' : 'Clasificar',
'sortkind' : 'por tipo',
'sortname' : 'por nombre',
'sortsize' : 'por tamaño',
'sortdate' : 'por fecha',
'sortFoldersFirst' : 'Las carpetas en primer lugar',
'errUploadFile' : 'No se ha podido cargar "$1".',

/******************************* commands names ********************************/
'cmdarchive' : 'Crear archivo',
Expand Down Expand Up @@ -121,8 +136,8 @@ if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object'
'ntfarchive' : 'Creando archivo',
'ntfextract' : 'Extrayendo elementos del archivo',
'ntfsearch' : 'Buscando archivos',
'ntfsmth' : 'Haciendo algo >_<',
'ntfloadimg' : 'Cargando imagen',
'ntfsmth' : 'Haciendo algo',
'ntfloadimg' : 'Cargando imagen',

/************************************ dates **********************************/
'dateUnknown' : 'desconocida',
Expand Down
13 changes: 9 additions & 4 deletions js/i18n/elfinder.fr.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,14 @@ if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object'
'errNetMountNoDriver' : 'Protocol non supporté.', // added 17.04.2012
'errNetMountFailed' : 'Echec du montage.', // added 17.04.2012
'errNetMountHostReq' : 'Hôte requis.', // added 18.04.2012

'errSessionExpires' : 'Votre session a expiré en raison de son inactivité',
'errCreatingTempDir' : 'Impossible de créer le répertoire temporaire : "$1"',
'errFtpDownloadFile' : 'Impossible de télécharger le file depuis l\'accès FTP : "$1"',
'errFtpUploadFile' : 'Impossible d\'envoyer le fichier vers l\'accès FTP : "$1"',
'errFtpMkdir' : 'Impossible de créer un répertoire distant sur l\'accès FTP :"$1"',
'errArchiveExec' : 'Erreur lors de l\'archivage des fichiers : "$1"',
'errExtractExec' : 'Erreur lors de l\'extraction des fichiers : "$1"',
'errUploadFile' : 'Envoi impossible de "$1"',

/******************************* commands names ********************************/
'cmdarchive' : 'Créer une archive',
Expand Down Expand Up @@ -136,7 +143,7 @@ if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object'
'ntfarchive' : 'Création de l\'archive',
'ntfextract' : 'Extraction des fichiers de l\'archive',
'ntfsearch' : 'Recherche des fichiers',
'ntfsmth' : 'Fait quelque chose >_<',
'ntfsmth' : 'Fait quelque chose',
'ntfloadimg' : 'Chargement de l\' image',
'ntfnetmount' : 'Monte le volume réseau', // added 18.04.2012

Expand Down Expand Up @@ -321,5 +328,3 @@ if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object'
}
}
}


10 changes: 9 additions & 1 deletion js/i18n/elfinder.jp.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,14 @@ if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object'
'errNetMountNoDriver' : 'サポートされていないプロトコルです', // added 17.04.2012
'errNetMountFailed' : 'マウントに失敗しました', // added 17.04.2012
'errNetMountHostReq' : 'ホスト名は必須です', // added 18.04.2012
'errSessionExpires' : 'アクションがなかったため、セッションが期限切れになりました',
'errCreatingTempDir' : '一時ディレクトリを作成できません:"$1"',
'errFtpDownloadFile' : 'FTP からファイルをダウンロードできません:"$1"',
'errFtpUploadFile' : 'FTP へファイルをアップロードできません:"$1"',
'errFtpMkdir' : 'FTP にリモートディレクトリを作成できません:"$1"',
'errArchiveExec' : 'ファイルのアーカイブ中にエラーが発生しました:"$1"',
'errExtractExec' : 'ファイルの抽出中にエラーが発生しました:"$1"',

/******************************* commands names ********************************/
'cmdarchive' : 'アーカイブ作成',
'cmdback' : '戻る',
Expand Down Expand Up @@ -137,7 +145,7 @@ if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object'
'ntfextract' : 'アーカイブを解凍',
'ntfsearch' : 'ファイル検索',
'ntfresize' : 'リサイズしています',
'ntfsmth' : '何かしています >_<',
'ntfsmth' : '何かしています',
'ntfloadimg' : 'イメージを読み込んでいます',
'ntfnetmount' : 'ネットワークボリュームをマウントしています', // added 18.04.2012

Expand Down
29 changes: 19 additions & 10 deletions js/i18n/elfinder.nl.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,15 @@ if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object'
'errNetMountNoDriver' : 'Niet ondersteund protocol.',
'errNetMountFailed' : 'Mount mislukt.',
'errNetMountHostReq' : 'Host is verplicht.',

'errSessionExpires' : 'Uw sessie is verlopen vanwege inactiviteit.',
'errCreatingTempDir' : 'Kan de tijdelijke map niet aanmaken: "$1" ',
'errFtpDownloadFile' : 'Kan het bestand niet downloaden vanaf FTP: "$1"',
'errFtpUploadFile' : 'Kan het bestand niet uploaden naar FTP: "$1"',
'errFtpMkdir' : 'Kan het externe map niet aanmaken op de FTP-server: "$1"',
'errArchiveExec' : 'Er is een fout opgetreden bij het archivering van de bestanden: "$1" ',
'errExtractExec' : 'Er is een fout opgetreden bij het uitpakken van de bestanden: "$1" ',
'errUploadFile' : 'Kan "$1" niet uploaden',

/******************************* commands names ********************************/
'cmdarchive' : 'Maak archief',
'cmdback' : 'Vorige',
Expand Down Expand Up @@ -116,28 +124,28 @@ if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object'
'btnCancel' : 'Annuleren',
'btnNo' : 'Nee',
'btnYes' : 'Ja',
'btnMount' : 'Mount',
'btnMount' : 'Mount',

/******************************** notifications ********************************/
'ntfopen' : 'Bezig met openen van map',
'ntffile' : 'Bezig met openen bestand',
'ntfreload' : 'Bezig met inhoud map vernieuwen',
'ntfreload' : 'Herladen map inhoud',
'ntfmkdir' : 'Bezig met map maken',
'ntfmkfile' : 'Bezig met Bestanden maken',
'ntfrm' : 'Bezig met verwijderen bestanden',
'ntfrm' : 'Verwijderen bestanden',
'ntfcopy' : 'Kopieer bestanden',
'ntfmove' : 'Verplaats bestanden',
'ntfprepare' : 'Voorbereiden om bestanden te kopiëren',
'ntfprepare' : 'Voorbereiden kopiëren',
'ntfrename' : 'Hernoem bestanden',
'ntfupload' : 'Bezig met uploaden bestanden',
'ntfdownload' : 'Bezig met downloaden bestanden',
'ntfupload' : 'Bestanden uploaden actief',
'ntfdownload' : 'Bestanden downloaden actief',
'ntfsave' : 'Bestanden opslaan',
'ntfarchive' : 'Archief aan het maken',
'ntfextract' : 'Bestanden uit het archief aan het uitpakken',
'ntfextract' : 'Bestanden uitpakken actief',
'ntfsearch' : 'Zoeken naar bestanden',
'ntfsmth' : 'Iets aan het doen >_<',
'ntfsmth' : 'Iets aan het doen',
'ntfloadimg' : 'Laden van plaatje',
'ntfnetmount' : 'Bezig met mounten van netwerk volume',
'ntfnetmount' : 'Verhogen netwerk volume',

/************************************ dates **********************************/
'dateUnknown' : 'onbekend',
Expand Down Expand Up @@ -350,3 +358,4 @@ if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object'
}
}
}

Loading

0 comments on commit 1644251

Please sign in to comment.