MOBILE-3339 ionic: Remove usage of angular/http deprecated package

main
Pau Ferrer Ocaña 2020-02-07 15:57:46 +01:00
parent a4f39f08ad
commit 0c05a9fc41
7 changed files with 81 additions and 87 deletions

View File

@ -13,7 +13,6 @@
// limitations under the License.
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { CoreFileProvider } from '@providers/file';
import { CoreFilepoolProvider } from '@providers/filepool';
import { CoreLoggerProvider } from '@providers/logger';
@ -25,7 +24,7 @@ import { CoreCourseProvider } from '@core/course/providers/course';
import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper';
import { CoreSite } from '@classes/site';
import { CoreTagItem } from '@core/tag/providers/tag';
import { CoreWSExternalWarning, CoreWSExternalFile } from '@providers/ws';
import { CoreWSProvider, CoreWSExternalWarning, CoreWSExternalFile } from '@providers/ws';
/**
* Service that provides some features for books.
@ -37,10 +36,16 @@ export class AddonModBookProvider {
protected ROOT_CACHE_KEY = 'mmaModBook:';
protected logger;
constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private textUtils: CoreTextUtilsProvider,
private fileProvider: CoreFileProvider, private filepoolProvider: CoreFilepoolProvider, private http: Http,
private utils: CoreUtilsProvider, private courseProvider: CoreCourseProvider, private domUtils: CoreDomUtilsProvider,
private logHelper: CoreCourseLogHelperProvider) {
constructor(logger: CoreLoggerProvider,
protected sitesProvider: CoreSitesProvider,
protected textUtils: CoreTextUtilsProvider,
protected fileProvider: CoreFileProvider,
protected filepoolProvider: CoreFilepoolProvider,
protected wsProvider: CoreWSProvider,
protected utils: CoreUtilsProvider,
protected courseProvider: CoreCourseProvider,
protected domUtils: CoreDomUtilsProvider,
protected logHelper: CoreCourseLogHelperProvider) {
this.logger = logger.getInstance('AddonModBookProvider');
}
@ -128,19 +133,11 @@ export class AddonModBookProvider {
return this.sitesProvider.getCurrentSite().checkAndFixPluginfileURL(indexUrl);
}
return promise.then((url) => {
// Fetch the URL content.
const promise = this.http.get(url).toPromise();
return promise.then(async (url) => {
const content = await this.wsProvider.getText(url);
return promise.then((response: Response): any => {
const content = response.text();
if (typeof content !== 'string') {
return Promise.reject(null);
} else {
// Now that we have the content, we update the SRC to point back to the external resource.
return this.domUtils.restoreSourcesInHtml(content, contentsMap[chapterId].paths);
}
});
// Now that we have the content, we update the SRC to point back to the external resource.
return this.domUtils.restoreSourcesInHtml(content, contentsMap[chapterId].paths);
});
}

View File

@ -20,7 +20,7 @@ import { CoreFilepoolProvider } from '@providers/filepool';
import { AddonModPageProvider } from './page';
import { CoreFileProvider } from '@providers/file';
import { CoreSitesProvider } from '@providers/sites';
import { Http, Response } from '@angular/http';
import { CoreWSProvider } from '@providers/ws';
/**
* Service that provides some features for page.
@ -30,9 +30,13 @@ export class AddonModPageHelperProvider {
protected logger;
constructor(logger: CoreLoggerProvider, private domUtils: CoreDomUtilsProvider, private filepoolProvider: CoreFilepoolProvider,
private fileProvider: CoreFileProvider, private textUtils: CoreTextUtilsProvider, private http: Http,
private sitesProvider: CoreSitesProvider) {
constructor(logger: CoreLoggerProvider,
protected domUtils: CoreDomUtilsProvider,
protected filepoolProvider: CoreFilepoolProvider,
protected fileProvider: CoreFileProvider,
protected textUtils: CoreTextUtilsProvider,
protected wsProvider: CoreWSProvider,
protected sitesProvider: CoreSitesProvider) {
this.logger = logger.getInstance('AddonModPageHelperProvider');
}
@ -79,21 +83,12 @@ export class AddonModPageHelperProvider {
promise = this.sitesProvider.getCurrentSite().checkAndFixPluginfileURL(indexUrl);
}
return promise.then((url) => {
return promise.then(async (url) => {
const content = await this.wsProvider.getText(url);
// Fetch the URL content.
const promise = this.http.get(url).toPromise();
return promise.then((response: Response): any => {
const content = response.text();
if (typeof content !== 'string') {
return Promise.reject(null);
}
// Now that we have the content, we update the SRC to point back to the external resource.
// That will be caught by core-format-text.
return this.domUtils.restoreSourcesInHtml(content, paths);
});
// Now that we have the content, we update the SRC to point back to the external resource.
// That will be caught by core-format-text.
return this.domUtils.restoreSourcesInHtml(content, paths);
});
}

View File

@ -13,7 +13,7 @@
// limitations under the License.
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { CoreWSProvider } from '@providers/ws';
import { CoreAppProvider } from '@providers/app';
import { CoreFileProvider } from '@providers/file';
import { CoreFilepoolProvider } from '@providers/filepool';
@ -34,9 +34,13 @@ export class AddonRemoteThemesProvider {
protected logger;
protected stylesEls: {[siteId: string]: {element: HTMLStyleElement, hash: string}} = {};
constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private fileProvider: CoreFileProvider,
private filepoolProvider: CoreFilepoolProvider, private http: Http, private utils: CoreUtilsProvider,
private appProvider: CoreAppProvider) {
constructor(logger: CoreLoggerProvider,
protected sitesProvider: CoreSitesProvider,
protected fileProvider: CoreFileProvider,
protected filepoolProvider: CoreFilepoolProvider,
protected wsProvider: CoreWSProvider,
protected utils: CoreUtilsProvider,
protected appProvider: CoreAppProvider) {
this.logger = logger.getInstance('AddonRemoteThemesProvider');
}
@ -174,18 +178,13 @@ export class AddonRemoteThemesProvider {
return;
}
return promise.then((url) => {
return promise.then(async (url) => {
this.logger.debug('Loading styles from: ', url);
// Get the CSS content using HTTP because we will treat the styles before saving them in the file.
return this.http.get(url).toPromise();
}).then((response): any => {
const text = response && response.text();
if (typeof text == 'string') {
return {fileUrl: fileUrl, styles: this.get35Styles(text)};
} else {
return Promise.reject(null);
}
const text = await this.wsProvider.getText(url);
return {fileUrl: fileUrl, styles: this.get35Styles(text)};
});
});
}
@ -263,23 +262,18 @@ export class AddonRemoteThemesProvider {
return Promise.resolve();
}
return this.http.get(url).toPromise().then((response) => {
let text = response && response.text();
if (typeof text == 'string') {
text = this.get35Styles(text);
return this.wsProvider.getText(url).then((text) => {
text = this.get35Styles(text);
const styleEl = document.createElement('style');
styleEl.setAttribute('id', 'mobilecssurl-tmpsite');
styleEl.innerHTML = text;
const styleEl = document.createElement('style');
styleEl.setAttribute('id', 'mobilecssurl-tmpsite');
styleEl.innerHTML = text;
document.head.appendChild(styleEl);
this.stylesEls.tmpsite = {
element: styleEl,
hash: ''
};
} else {
return Promise.reject(null);
}
document.head.appendChild(styleEl);
this.stylesEls.tmpsite = {
element: styleEl,
hash: ''
};
});
}

View File

@ -17,7 +17,6 @@ import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { NgModule, COMPILER_OPTIONS } from '@angular/core';
import { IonicApp, IonicModule, Platform, Content, ScrollEvent, Config, Refresher } from 'ionic-angular';
import { assert } from 'ionic-angular/util/util';
import { HttpModule } from '@angular/http';
import { HttpClient, HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { JitCompilerFactory } from '@angular/platform-browser-dynamic';
import { LocationStrategy } from '@angular/common';
@ -202,7 +201,6 @@ export const WP_PROVIDER: any = null;
BrowserModule,
BrowserAnimationsModule,
HttpClientModule, // HttpClient is used to make JSON requests. It fails for HEAD requests because there is no content.
HttpModule,
IonicModule.forRoot(MoodleMobileApp, {
pageTransition: 'core-page-transition'
}),

View File

@ -46,7 +46,6 @@ import { CoreSitePluginsProvider } from '@core/siteplugins/providers/siteplugins
// Import other libraries and providers.
import { DomSanitizer } from '@angular/platform-browser';
import { FormBuilder, Validators } from '@angular/forms';
import { Http } from '@angular/http';
import { HttpClient } from '@angular/common/http';
import { CoreConfigConstants } from '../../../configconstants';
import { CoreConstants } from '@core/constants';
@ -136,7 +135,7 @@ export class CoreCompileProvider {
// Other Ionic/Angular providers that don't depend on where they are injected.
protected OTHER_PROVIDERS = [
TranslateService, Http, HttpClient, Platform, DomSanitizer, ActionSheetController, AlertController, LoadingController,
TranslateService, HttpClient, Platform, DomSanitizer, ActionSheetController, AlertController, LoadingController,
ModalController, PopoverController, ToastController, FormBuilder
];

View File

@ -13,7 +13,6 @@
// limitations under the License.
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { TranslateService } from '@ngx-translate/core';
import { CoreAppProvider } from '@providers/app';
import { CoreEventsProvider } from '@providers/events';
@ -33,6 +32,7 @@ import { CoreCourseProvider } from '@core/course/providers/course';
import { CoreCoursesProvider } from '@core/courses/providers/courses';
import { CoreFilterHelperProvider } from '@core/filter/providers/helper';
import { CorePluginFileDelegate } from '@providers/plugin-file-delegate';
import { CoreWSProvider } from '@providers/ws';
// Delegates
import { CoreMainMenuDelegate } from '@core/mainmenu/providers/delegate';
@ -93,7 +93,7 @@ export class CoreSitePluginsHelperProvider {
private moduleDelegate: CoreCourseModuleDelegate,
private userDelegate: CoreUserDelegate,
private langProvider: CoreLangProvider,
private http: Http,
private wsProvider: CoreWSProvider,
private sitePluginsProvider: CoreSitePluginsProvider,
private prefetchDelegate: CoreCourseModulePrefetchDelegate,
private compileProvider: CoreCompileProvider,
@ -208,15 +208,7 @@ export class CoreSitePluginsHelperProvider {
undefined, undefined, undefined, handlerSchema.styles.version).then((url) => {
// File is downloaded, get the contents.
return this.http.get(url).toPromise();
}).then((response): any => {
const text = response && response.text();
if (typeof text == 'string') {
return text;
} else {
return Promise.reject(null);
}
return this.wsProvider.getText(url);
});
});
}

View File

@ -13,8 +13,7 @@
// limitations under the License.
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { HttpClient } from '@angular/common/http';
import { HttpClient, HttpResponse } from '@angular/common/http';
import { TranslateService } from '@ngx-translate/core';
import { FileTransfer, FileUploadOptions } from '@ionic-native/file-transfer';
import { CoreAppProvider } from './app';
@ -92,10 +91,14 @@ export class CoreWSProvider {
protected retryCalls = [];
protected retryTimeout = 0;
constructor(private http: HttpClient, private translate: TranslateService, private appProvider: CoreAppProvider,
private textUtils: CoreTextUtilsProvider, logger: CoreLoggerProvider,
private fileProvider: CoreFileProvider, private fileTransfer: FileTransfer, private commonHttp: Http,
private mimeUtils: CoreMimetypeUtilsProvider) {
constructor(protected http: HttpClient,
protected translate: TranslateService,
protected appProvider: CoreAppProvider,
protected textUtils: CoreTextUtilsProvider,
protected fileProvider: CoreFileProvider,
protected fileTransfer: FileTransfer,
protected mimeUtils: CoreMimetypeUtilsProvider,
logger: CoreLoggerProvider) {
this.logger = logger.getInstance('CoreWSProvider');
}
@ -499,11 +502,11 @@ export class CoreWSProvider {
* @param url URL to perform the request.
* @return Promise resolved with the response.
*/
performHead(url: string): Promise<any> {
performHead(url: string): Promise<HttpResponse<any>> {
let promise = this.getPromiseHttp('head', url);
if (!promise) {
promise = this.commonHttp.head(url).timeout(this.getRequestTimeout()).toPromise();
promise = this.http.head(url, {observe: 'response'}).timeout(this.getRequestTimeout()).toPromise();
promise = this.setPromiseHttp(promise, 'head', url);
}
@ -828,6 +831,22 @@ export class CoreWSProvider {
return Promise.reject(this.translate.instant('core.errorinvalidresponse'));
});
}
/**
* Perform an HTTP request requesting for a text response.
*
* @param url Url to get.
* @return Resolved with the text when done.
*/
async getText(url: string): Promise<string> {
// Fetch the URL content.
const content = await this.http.get(url, { responseType: 'text' }).toPromise();
if (typeof content !== 'string') {
return Promise.reject(null);
}
return content;
}
}
/**