commit
						ecf47eb1e2
					
				@ -57,6 +57,12 @@ export class CoreSitePickerComponent implements OnInit {
 | 
				
			|||||||
                }));
 | 
					                }));
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (!this.selectedSite && sites.length) {
 | 
				
			||||||
 | 
					                // There is no current site, select the first one.
 | 
				
			||||||
 | 
					                this.selectedSite = sites[0].id;
 | 
				
			||||||
 | 
					                this.siteSelected.emit(this.selectedSite);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return Promise.all(promises).then(() => {
 | 
					            return Promise.all(promises).then(() => {
 | 
				
			||||||
                this.sites = sites;
 | 
					                this.sites = sites;
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
				
			|||||||
@ -35,11 +35,13 @@ export class CoreSharedFilesChooseSitePage implements OnInit {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    protected filePath: string;
 | 
					    protected filePath: string;
 | 
				
			||||||
    protected fileEntry: any;
 | 
					    protected fileEntry: any;
 | 
				
			||||||
 | 
					    protected isInbox: boolean; // Whether the file is in the Inbox folder.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    constructor(private navCtrl: NavController, navParams: NavParams, private sharedFilesHelper: CoreSharedFilesHelperProvider,
 | 
					    constructor(private navCtrl: NavController, navParams: NavParams, private sharedFilesHelper: CoreSharedFilesHelperProvider,
 | 
				
			||||||
            private sitesProvider: CoreSitesProvider, private domUtils: CoreDomUtilsProvider,
 | 
					            private sitesProvider: CoreSitesProvider, private domUtils: CoreDomUtilsProvider,
 | 
				
			||||||
            private fileProvider: CoreFileProvider) {
 | 
					            private fileProvider: CoreFileProvider) {
 | 
				
			||||||
        this.filePath = navParams.get('filePath');
 | 
					        this.filePath = navParams.get('filePath');
 | 
				
			||||||
 | 
					        this.isInbox = navParams.get('isInbox');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -57,7 +59,7 @@ export class CoreSharedFilesChooseSitePage implements OnInit {
 | 
				
			|||||||
        this.fileName = fileAndDir.name;
 | 
					        this.fileName = fileAndDir.name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Get the file.
 | 
					        // Get the file.
 | 
				
			||||||
        this.fileProvider.getFile(this.filePath).then((fe) => {
 | 
					        this.fileProvider.getExternalFile(this.filePath).then((fe) => {
 | 
				
			||||||
            this.fileEntry = fe;
 | 
					            this.fileEntry = fe;
 | 
				
			||||||
            this.fileName = this.fileEntry.name;
 | 
					            this.fileName = this.fileEntry.name;
 | 
				
			||||||
        }).catch(() => {
 | 
					        }).catch(() => {
 | 
				
			||||||
@ -80,7 +82,7 @@ export class CoreSharedFilesChooseSitePage implements OnInit {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    storeInSite(siteId: string): void {
 | 
					    storeInSite(siteId: string): void {
 | 
				
			||||||
        this.loaded = false;
 | 
					        this.loaded = false;
 | 
				
			||||||
        this.sharedFilesHelper.storeSharedFileInSite(this.fileEntry, siteId).then(() => {
 | 
					        this.sharedFilesHelper.storeSharedFileInSite(this.fileEntry, siteId, this.isInbox).then(() => {
 | 
				
			||||||
            this.navCtrl.pop();
 | 
					            this.navCtrl.pop();
 | 
				
			||||||
        }).finally(() => {
 | 
					        }).finally(() => {
 | 
				
			||||||
            this.loaded = true;
 | 
					            this.loaded = true;
 | 
				
			||||||
 | 
				
			|||||||
@ -77,10 +77,22 @@ export class CoreSharedFilesHelperProvider {
 | 
				
			|||||||
     * Go to the choose site view.
 | 
					     * Go to the choose site view.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param {string} filePath File path to send to the view.
 | 
					     * @param {string} filePath File path to send to the view.
 | 
				
			||||||
 | 
					     * @param {boolean} [isInbox] Whether the file is in the Inbox folder.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    goToChooseSite(filePath: string): void {
 | 
					    goToChooseSite(filePath: string, isInbox?: boolean): void {
 | 
				
			||||||
        const navCtrl = this.appProvider.getRootNavController();
 | 
					        const navCtrl = this.appProvider.getRootNavController();
 | 
				
			||||||
        navCtrl.push('CoreSharedFilesChooseSitePage', { filePath: filePath });
 | 
					        navCtrl.push('CoreSharedFilesChooseSitePage', { filePath: filePath, isInbox: isInbox });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Whether the user is already choosing a site to store a shared file.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return {boolean} Whether the user is already choosing a site to store a shared file.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected isChoosingSite(): boolean {
 | 
				
			||||||
 | 
					        const navCtrl = this.appProvider.getRootNavController();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return navCtrl && navCtrl.getActive().id == 'CoreSharedFilesChooseSitePage';
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -115,34 +127,62 @@ export class CoreSharedFilesHelperProvider {
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Delete a shared file.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param {any} fileEntry The file entry to delete.
 | 
				
			||||||
 | 
					     * @param {boolean} [isInbox] Whether the file is in the Inbox folder.
 | 
				
			||||||
 | 
					     * @return {Promise<any>} Promise resolved when done.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected removeSharedFile(fileEntry: any, isInbox?: boolean): Promise<any> {
 | 
				
			||||||
 | 
					        if (isInbox) {
 | 
				
			||||||
 | 
					            return this.sharedFilesProvider.deleteInboxFile(fileEntry);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            return this.fileProvider.removeFileByFileEntry(fileEntry);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Checks if there is a new file received in iOS and move it to the shared folder of current site.
 | 
					     * Checks if there is a new file received in iOS and move it to the shared folder of current site.
 | 
				
			||||||
     * If more than one site is found, the user will have to choose the site where to store it in.
 | 
					     * If more than one site is found, the user will have to choose the site where to store it in.
 | 
				
			||||||
     * If more than one file is found, treat only the first one.
 | 
					     * If more than one file is found, treat only the first one.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 | 
					     * @param {string} [path] Path to a file received when launching the app.
 | 
				
			||||||
     * @return {Promise<any>} Promise resolved when done.
 | 
					     * @return {Promise<any>} Promise resolved when done.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    searchIOSNewSharedFiles(): Promise<any> {
 | 
					    searchIOSNewSharedFiles(path?: string): Promise<any> {
 | 
				
			||||||
        return this.initDelegate.ready().then(() => {
 | 
					        return this.initDelegate.ready().then(() => {
 | 
				
			||||||
            const navCtrl = this.appProvider.getRootNavController();
 | 
					            if (this.isChoosingSite()) {
 | 
				
			||||||
            if (navCtrl && navCtrl.getActive().id == 'CoreSharedFilesChooseSite') {
 | 
					 | 
				
			||||||
                // We're already treating a shared file. Abort.
 | 
					                // We're already treating a shared file. Abort.
 | 
				
			||||||
                return Promise.reject(null);
 | 
					                return Promise.reject(null);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return this.sharedFilesProvider.checkIOSNewFiles().then((fileEntry) => {
 | 
					            let promise;
 | 
				
			||||||
 | 
					            if (path) {
 | 
				
			||||||
 | 
					                // The app was launched with the path to the file, get the file.
 | 
				
			||||||
 | 
					                promise = this.fileProvider.getExternalFile(path);
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                // No path received, search if there is any file in the Inbox folder.
 | 
				
			||||||
 | 
					                promise = this.sharedFilesProvider.checkIOSNewFiles();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return promise.then((fileEntry) => {
 | 
				
			||||||
                return this.sitesProvider.getSitesIds().then((siteIds) => {
 | 
					                return this.sitesProvider.getSitesIds().then((siteIds) => {
 | 
				
			||||||
                    if (!siteIds.length) {
 | 
					                    if (!siteIds.length) {
 | 
				
			||||||
                        // No sites stored, show error and delete the file.
 | 
					                        // No sites stored, show error and delete the file.
 | 
				
			||||||
                        this.domUtils.showErrorModal('core.sharedfiles.errorreceivefilenosites', true);
 | 
					                        this.domUtils.showErrorModal('core.sharedfiles.errorreceivefilenosites', true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        return this.sharedFilesProvider.deleteInboxFile(fileEntry);
 | 
					                        return this.removeSharedFile(fileEntry, !path);
 | 
				
			||||||
                    } else if (siteIds.length == 1) {
 | 
					                    } else if (siteIds.length == 1) {
 | 
				
			||||||
                        return this.storeSharedFileInSite(fileEntry, siteIds[0]);
 | 
					                        return this.storeSharedFileInSite(fileEntry, siteIds[0], !path);
 | 
				
			||||||
                    } else {
 | 
					                    } else if (!this.isChoosingSite()) {
 | 
				
			||||||
                        this.goToChooseSite(fileEntry.fullPath);
 | 
					                        this.goToChooseSite(fileEntry.toURL(), !path);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
 | 
					            }).catch((error) => {
 | 
				
			||||||
 | 
					                if (error) {
 | 
				
			||||||
 | 
					                    this.logger.error('Error searching iOS new shared files', error, path);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -152,16 +192,17 @@ export class CoreSharedFilesHelperProvider {
 | 
				
			|||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param {any} fileEntry Shared file entry.
 | 
					     * @param {any} fileEntry Shared file entry.
 | 
				
			||||||
     * @param {string} [siteId]  Site ID. If not defined, current site.
 | 
					     * @param {string} [siteId]  Site ID. If not defined, current site.
 | 
				
			||||||
 | 
					     * @param {boolean} [isInbox] Whether the file is in the Inbox folder.
 | 
				
			||||||
     * @return {Promise<any>} Promise resolved when done.
 | 
					     * @return {Promise<any>} Promise resolved when done.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    storeSharedFileInSite(fileEntry: any, siteId?: string): Promise<any> {
 | 
					    storeSharedFileInSite(fileEntry: any, siteId?: string, isInbox?: boolean): Promise<any> {
 | 
				
			||||||
        siteId = siteId || this.sitesProvider.getCurrentSiteId();
 | 
					        siteId = siteId || this.sitesProvider.getCurrentSiteId();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // First of all check if there's already a file with the same name in the shared files folder.
 | 
					        // First of all check if there's already a file with the same name in the shared files folder.
 | 
				
			||||||
        const sharedFilesDirPath = this.sharedFilesProvider.getSiteSharedFilesDirPath(siteId);
 | 
					        const sharedFilesDirPath = this.sharedFilesProvider.getSiteSharedFilesDirPath(siteId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return this.fileProvider.getUniqueNameInFolder(sharedFilesDirPath, fileEntry.name).then((newName) => {
 | 
					        return this.fileProvider.getUniqueNameInFolder(sharedFilesDirPath, fileEntry.name).then((newName) => {
 | 
				
			||||||
            if (newName == fileEntry.name) {
 | 
					            if (newName.toLowerCase() == fileEntry.name.toLowerCase()) {
 | 
				
			||||||
                // No file with the same name. Use the original file name.
 | 
					                // No file with the same name. Use the original file name.
 | 
				
			||||||
                return newName;
 | 
					                return newName;
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
@ -172,7 +213,7 @@ export class CoreSharedFilesHelperProvider {
 | 
				
			|||||||
            return this.sharedFilesProvider.storeFileInSite(fileEntry, name, siteId).catch((err) => {
 | 
					            return this.sharedFilesProvider.storeFileInSite(fileEntry, name, siteId).catch((err) => {
 | 
				
			||||||
                this.domUtils.showErrorModal(err || 'Error moving file.');
 | 
					                this.domUtils.showErrorModal(err || 'Error moving file.');
 | 
				
			||||||
            }).finally(() => {
 | 
					            }).finally(() => {
 | 
				
			||||||
                this.sharedFilesProvider.deleteInboxFile(fileEntry);
 | 
					                this.removeSharedFile(fileEntry, isInbox);
 | 
				
			||||||
                this.domUtils.showAlertTranslated('core.success', 'core.sharedfiles.successstorefile');
 | 
					                this.domUtils.showAlertTranslated('core.success', 'core.sharedfiles.successstorefile');
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
				
			|||||||
@ -229,7 +229,7 @@ export class CoreSharedFilesProvider {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // Create dir if it doesn't exist already.
 | 
					        // Create dir if it doesn't exist already.
 | 
				
			||||||
        return this.fileProvider.createDir(sharedFilesFolder).then(() => {
 | 
					        return this.fileProvider.createDir(sharedFilesFolder).then(() => {
 | 
				
			||||||
            return this.fileProvider.moveFile(entry.fullPath, newPath).then((newFile) => {
 | 
					            return this.fileProvider.moveExternalFile(entry.toURL(), newPath).then((newFile) => {
 | 
				
			||||||
                this.eventsProvider.trigger(CoreEventsProvider.FILE_SHARED, { siteId: siteId, name: newName });
 | 
					                this.eventsProvider.trigger(CoreEventsProvider.FILE_SHARED, { siteId: siteId, name: newName });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                return newFile;
 | 
					                return newFile;
 | 
				
			||||||
 | 
				
			|||||||
@ -18,6 +18,7 @@ import { CoreSharedFilesProvider } from './providers/sharedfiles';
 | 
				
			|||||||
import { CoreSharedFilesHelperProvider } from './providers/helper';
 | 
					import { CoreSharedFilesHelperProvider } from './providers/helper';
 | 
				
			||||||
import { CoreSharedFilesUploadHandler } from './providers/upload-handler';
 | 
					import { CoreSharedFilesUploadHandler } from './providers/upload-handler';
 | 
				
			||||||
import { CoreFileUploaderDelegate } from '@core/fileuploader/providers/delegate';
 | 
					import { CoreFileUploaderDelegate } from '@core/fileuploader/providers/delegate';
 | 
				
			||||||
 | 
					import { CoreEventsProvider } from '@providers/events';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// List of providers (without handlers).
 | 
					// List of providers (without handlers).
 | 
				
			||||||
export const CORE_SHAREDFILES_PROVIDERS: any[] = [
 | 
					export const CORE_SHAREDFILES_PROVIDERS: any[] = [
 | 
				
			||||||
@ -38,7 +39,7 @@ export const CORE_SHAREDFILES_PROVIDERS: any[] = [
 | 
				
			|||||||
})
 | 
					})
 | 
				
			||||||
export class CoreSharedFilesModule {
 | 
					export class CoreSharedFilesModule {
 | 
				
			||||||
    constructor(platform: Platform, delegate: CoreFileUploaderDelegate, handler: CoreSharedFilesUploadHandler,
 | 
					    constructor(platform: Platform, delegate: CoreFileUploaderDelegate, handler: CoreSharedFilesUploadHandler,
 | 
				
			||||||
            helper: CoreSharedFilesHelperProvider) {
 | 
					            helper: CoreSharedFilesHelperProvider, eventsProvider: CoreEventsProvider) {
 | 
				
			||||||
        // Register the handler.
 | 
					        // Register the handler.
 | 
				
			||||||
        delegate.registerHandler(handler);
 | 
					        delegate.registerHandler(handler);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -48,6 +49,13 @@ export class CoreSharedFilesModule {
 | 
				
			|||||||
            platform.resume.subscribe(() => {
 | 
					            platform.resume.subscribe(() => {
 | 
				
			||||||
                helper.searchIOSNewSharedFiles();
 | 
					                helper.searchIOSNewSharedFiles();
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            eventsProvider.on(CoreEventsProvider.APP_LAUNCHED_URL, (url) => {
 | 
				
			||||||
 | 
					                if (url && url.indexOf('file://') === 0) {
 | 
				
			||||||
 | 
					                    // We received a file in iOS, it's probably a shared file. Treat it.
 | 
				
			||||||
 | 
					                    helper.searchIOSNewSharedFiles(url);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1052,7 +1052,7 @@ export class CoreFileProvider {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            // Index the files by name.
 | 
					            // Index the files by name.
 | 
				
			||||||
            entries.forEach((entry) => {
 | 
					            entries.forEach((entry) => {
 | 
				
			||||||
                files[entry.name] = entry;
 | 
					                files[entry.name.toLowerCase()] = entry;
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Format extension.
 | 
					            // Format extension.
 | 
				
			||||||
@ -1063,7 +1063,7 @@ export class CoreFileProvider {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            newName = fileNameWithoutExtension + extension;
 | 
					            newName = fileNameWithoutExtension + extension;
 | 
				
			||||||
            if (typeof files[newName] == 'undefined') {
 | 
					            if (typeof files[newName.toLowerCase()] == 'undefined') {
 | 
				
			||||||
                // No file with the same name.
 | 
					                // No file with the same name.
 | 
				
			||||||
                return newName;
 | 
					                return newName;
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
 | 
				
			|||||||
@ -455,7 +455,7 @@ export class CoreMimetypeUtilsProvider {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if (position > -1) {
 | 
					        if (position > -1) {
 | 
				
			||||||
            // Check extension corresponds to a mimetype to know if it's valid.
 | 
					            // Check extension corresponds to a mimetype to know if it's valid.
 | 
				
			||||||
            extension = path.substr(position + 1);
 | 
					            extension = path.substr(position + 1).toLowerCase();
 | 
				
			||||||
            if (typeof this.getMimeType(extension) != 'undefined') {
 | 
					            if (typeof this.getMimeType(extension) != 'undefined') {
 | 
				
			||||||
                return path.substr(0, position); // Remove extension.
 | 
					                return path.substr(0, position); // Remove extension.
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
				
			|||||||
@ -9,6 +9,7 @@ information provided here is intended especially for developers.
 | 
				
			|||||||
- Use of completionstatus on the module object has been deprecated, use completiondata instead.
 | 
					- Use of completionstatus on the module object has been deprecated, use completiondata instead.
 | 
				
			||||||
- The function CoreSitesProvider.loadSite has changed, now it will trigger SESSION_EXPIRED event if the site is logged out. Its params and return value have changed.
 | 
					- The function CoreSitesProvider.loadSite has changed, now it will trigger SESSION_EXPIRED event if the site is logged out. Its params and return value have changed.
 | 
				
			||||||
- When using CoreDomUtils.showAlert, please use alert.didDismiss.subscribe() instead of alert.onDidDismiss().
 | 
					- When using CoreDomUtils.showAlert, please use alert.didDismiss.subscribe() instead of alert.onDidDismiss().
 | 
				
			||||||
 | 
					- The page CoreSharedFilesChooseSitePage now expects to receive the full path to the file (file.toURL()) instead of the relative path.
 | 
				
			||||||
- The following strings have been deprecated:
 | 
					- The following strings have been deprecated:
 | 
				
			||||||
    core.dfdaymonthyear. Please use core.strftimedatefullshort instead.
 | 
					    core.dfdaymonthyear. Please use core.strftimedatefullshort instead.
 | 
				
			||||||
    core.dfdayweekmonth. Please use core.strftimedayshort instead.
 | 
					    core.dfdayweekmonth. Please use core.strftimedayshort instead.
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user