mirror of
https://github.com/psychopy/psychojs.git
synced 2025-05-10 10:40:54 +00:00
ServerManager.downloadResources, ._downloadRegisteredResources: only process and download new resources, ignore existing resources
Old behaviour of ._downloadRegisteredResources attempts to download all registered resources, regardless of whether they have been previously downloaded. howler.js appears to ignore requests to re-download, however PreloadJS will redownload, which can cause critical errors if a resource is being used while being unnecessarily redownloaded
This commit is contained in:
parent
0f9eeb636e
commit
88827706ea
@ -315,6 +315,7 @@ export class ServerManager extends PsychObject {
|
||||
// we use an anonymous async function here since downloadResources is non-blocking (asynchronous)
|
||||
// but we want to run the asynchronous _listResources and _downloadResources in sequence
|
||||
const self = this;
|
||||
const newResources = new Map();
|
||||
let download = async () => {
|
||||
try {
|
||||
if (self._psychoJS.config.environment === ExperimentHandler.Environment.SERVER) {
|
||||
@ -327,13 +328,17 @@ export class ServerManager extends PsychObject {
|
||||
}
|
||||
else {
|
||||
// only registered the specified resources:
|
||||
for (const {name, path} of resources)
|
||||
self._resources.set(name, { path });
|
||||
for (const {name, path} of resources) {
|
||||
self._resources.set(name, {path});
|
||||
newResources.set(name, {path});
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// register the specified resources:
|
||||
for (const {name, path} of resources)
|
||||
self._resources.set(name, { path });
|
||||
for (const {name, path} of resources) {
|
||||
self._resources.set(name, {path});
|
||||
newResources.set(name, {path});
|
||||
}
|
||||
}
|
||||
|
||||
self._nbResources = self._resources.size;
|
||||
@ -343,7 +348,7 @@ export class ServerManager extends PsychObject {
|
||||
self.emit(ServerManager.Event.RESOURCE, { message: ServerManager.Event.RESOURCES_REGISTERED, count: self._nbResources });
|
||||
|
||||
// download the registered resources:
|
||||
await self._downloadRegisteredResources();
|
||||
await self._downloadRegisteredResources(newResources);
|
||||
}
|
||||
catch (error) {
|
||||
console.log('error', error);
|
||||
@ -556,7 +561,7 @@ export class ServerManager extends PsychObject {
|
||||
* @function
|
||||
* @private
|
||||
*/
|
||||
_downloadRegisteredResources()
|
||||
_downloadRegisteredResources(resources = new Map())
|
||||
{
|
||||
const response = { origin: 'ServerManager._downloadResources', context: 'when downloading the resources for experiment: ' + this._psychoJS.config.experiment.name };
|
||||
|
||||
@ -570,6 +575,9 @@ export class ServerManager extends PsychObject {
|
||||
this._resourceQueue = new createjs.LoadQueue(true); //, this._psychoJS.config.experiment.resourceDirectory);
|
||||
|
||||
const self = this;
|
||||
|
||||
const filesToDownload = resources.size ? resources : this._resources;
|
||||
|
||||
this._resourceQueue.addEventListener("filestart", event => {
|
||||
self.emit(ServerManager.Event.RESOURCE, { message: ServerManager.Event.DOWNLOADING_RESOURCE, resource: event.item.id });
|
||||
});
|
||||
@ -584,7 +592,7 @@ export class ServerManager extends PsychObject {
|
||||
// loading completed:
|
||||
this._resourceQueue.addEventListener("complete", event => {
|
||||
self._resourceQueue.close();
|
||||
if (self._nbLoadedResources === self._nbResources) {
|
||||
if (self._nbLoadedResources === filesToDownload.size) {
|
||||
self.setStatus(ServerManager.Status.READY);
|
||||
self.emit(ServerManager.Event.RESOURCE, { message: ServerManager.Event.DOWNLOAD_COMPLETED });
|
||||
}
|
||||
@ -602,7 +610,7 @@ export class ServerManager extends PsychObject {
|
||||
// (*) dispatch resources to preload.js or howler.js based on extension:
|
||||
let manifest = [];
|
||||
let soundResources = [];
|
||||
for (const [name, path_data] of this._resources)
|
||||
for (const [name, path_data] of filesToDownload)
|
||||
{
|
||||
const nameParts = name.toLowerCase().split('.');
|
||||
const extension = (nameParts.length > 1) ? nameParts.pop() : undefined;
|
||||
@ -642,7 +650,7 @@ export class ServerManager extends PsychObject {
|
||||
if (manifest.length > 0)
|
||||
this._resourceQueue.loadManifest(manifest);
|
||||
else {
|
||||
if (this._nbLoadedResources === this._nbResources) {
|
||||
if (this._nbLoadedResources === filesToDownload.size) {
|
||||
this.setStatus(ServerManager.Status.READY);
|
||||
this.emit(ServerManager.Event.RESOURCE, { message: ServerManager.Event.DOWNLOAD_COMPLETED });
|
||||
}
|
||||
@ -665,7 +673,7 @@ export class ServerManager extends PsychObject {
|
||||
// self._resources.set(resource.name, howl);
|
||||
self.emit(ServerManager.Event.RESOURCE, { message: ServerManager.Event.RESOURCE_DOWNLOADED, resource: name });
|
||||
|
||||
if (self._nbLoadedResources === self._nbResources) {
|
||||
if (self._nbLoadedResources === filesToDownload.size) {
|
||||
self.setStatus(ServerManager.Status.READY);
|
||||
self.emit(ServerManager.Event.RESOURCE, { message: ServerManager.Event.DOWNLOAD_COMPLETED });
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user