mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Migrated src/components/fetchhelper.js
This commit is contained in:
parent
60e670fcf7
commit
8c433afd6b
1 changed files with 22 additions and 37 deletions
|
@ -1,21 +1,19 @@
|
||||||
define([], function () {
|
/* eslint-disable indent */
|
||||||
'use strict';
|
export function getFetchPromise(request) {
|
||||||
|
|
||||||
function getFetchPromise(request) {
|
const headers = request.headers || {};
|
||||||
|
|
||||||
var headers = request.headers || {};
|
|
||||||
|
|
||||||
if (request.dataType === 'json') {
|
if (request.dataType === 'json') {
|
||||||
headers.accept = 'application/json';
|
headers.accept = 'application/json';
|
||||||
}
|
}
|
||||||
|
|
||||||
var fetchRequest = {
|
const fetchRequest = {
|
||||||
headers: headers,
|
headers: headers,
|
||||||
method: request.type,
|
method: request.type,
|
||||||
credentials: 'same-origin'
|
credentials: 'same-origin'
|
||||||
};
|
};
|
||||||
|
|
||||||
var contentType = request.contentType;
|
let contentType = request.contentType;
|
||||||
|
|
||||||
if (request.data) {
|
if (request.data) {
|
||||||
|
|
||||||
|
@ -33,12 +31,12 @@ define([], function () {
|
||||||
headers['Content-Type'] = contentType;
|
headers['Content-Type'] = contentType;
|
||||||
}
|
}
|
||||||
|
|
||||||
var url = request.url;
|
let url = request.url;
|
||||||
|
|
||||||
if (request.query) {
|
if (request.query) {
|
||||||
var paramString = paramsToString(request.query);
|
const paramString = paramsToString(request.query);
|
||||||
if (paramString) {
|
if (paramString) {
|
||||||
url += '?' + paramString;
|
url += `?${paramString}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,11 +49,11 @@ define([], function () {
|
||||||
|
|
||||||
function fetchWithTimeout(url, options, timeoutMs) {
|
function fetchWithTimeout(url, options, timeoutMs) {
|
||||||
|
|
||||||
console.debug('fetchWithTimeout: timeoutMs: ' + timeoutMs + ', url: ' + url);
|
console.debug(`fetchWithTimeout: timeoutMs: ${timeoutMs}, url: ${url}`);
|
||||||
|
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
|
|
||||||
var timeout = setTimeout(reject, timeoutMs);
|
const timeout = setTimeout(reject, timeoutMs);
|
||||||
|
|
||||||
options = options || {};
|
options = options || {};
|
||||||
options.credentials = 'same-origin';
|
options.credentials = 'same-origin';
|
||||||
|
@ -63,50 +61,41 @@ define([], function () {
|
||||||
fetch(url, options).then(function (response) {
|
fetch(url, options).then(function (response) {
|
||||||
clearTimeout(timeout);
|
clearTimeout(timeout);
|
||||||
|
|
||||||
console.debug('fetchWithTimeout: succeeded connecting to url: ' + url);
|
console.debug(`fetchWithTimeout: succeeded connecting to url: ${url}`);
|
||||||
|
|
||||||
resolve(response);
|
resolve(response);
|
||||||
}, function (error) {
|
}, function (error) {
|
||||||
|
|
||||||
clearTimeout(timeout);
|
clearTimeout(timeout);
|
||||||
|
|
||||||
console.debug('fetchWithTimeout: timed out connecting to url: ' + url);
|
console.debug(`fetchWithTimeout: timed out connecting to url: ${url}`);
|
||||||
|
|
||||||
reject();
|
reject(error);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function paramsToString(params) {
|
function paramsToString(params) {
|
||||||
|
return Object.keys(params)
|
||||||
var values = [];
|
.map(k => `${encodeURIComponent(k)}=${encodeURIComponent(params[k])}`)
|
||||||
|
.join('&');
|
||||||
for (var key in params) {
|
|
||||||
|
|
||||||
var value = params[key];
|
|
||||||
|
|
||||||
if (value !== null && value !== undefined && value !== '') {
|
|
||||||
values.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return values.join('&');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function ajax(request) {
|
export function ajax(request) {
|
||||||
if (!request) {
|
if (!request) {
|
||||||
throw new Error('Request cannot be null');
|
throw new Error('Request cannot be null');
|
||||||
}
|
}
|
||||||
|
|
||||||
request.headers = request.headers || {};
|
request.headers = request.headers || {};
|
||||||
|
|
||||||
console.debug('requesting url: ' + request.url);
|
console.debug(`requesting url: ${request.url}`);
|
||||||
|
|
||||||
return getFetchPromise(request).then(function (response) {
|
return getFetchPromise(request).then(function (response) {
|
||||||
console.debug('response status: ' + response.status + ', url: ' + request.url);
|
console.debug(`response status: ${response.status}, url: ${request.url}`);
|
||||||
if (response.status < 400) {
|
if (response.status < 400) {
|
||||||
if (request.dataType === 'json' || request.headers.accept === 'application/json') {
|
if (request.dataType === 'json' || request.headers.accept === 'application/json') {
|
||||||
return response.json();
|
return response.json();
|
||||||
} else if (request.dataType === 'text' || (response.headers.get('Content-Type') || '').toLowerCase().indexOf('text/') === 0) {
|
} else if (request.dataType === 'text' || (response.headers.get('Content-Type') || '').toLowerCase().includes('text/')) {
|
||||||
return response.text();
|
return response.text();
|
||||||
} else {
|
} else {
|
||||||
return response;
|
return response;
|
||||||
|
@ -115,12 +104,8 @@ define([], function () {
|
||||||
return Promise.reject(response);
|
return Promise.reject(response);
|
||||||
}
|
}
|
||||||
}, function (err) {
|
}, function (err) {
|
||||||
console.error('request failed to url: ' + request.url);
|
console.error(`request failed to url: ${request.url}`);
|
||||||
throw err;
|
throw err;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return {
|
/* eslint-enable indent */
|
||||||
getFetchPromise: getFetchPromise,
|
|
||||||
ajax: ajax
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue