Skip to content

Commit 22f8bcd

Browse files
authored
Merge pull request #444 from smartdevicelink/bugfix/image-not-sent-nonpersistent-file
Include version check for checking file upload status
2 parents 7aac493 + 6d68d2f commit 22f8bcd

File tree

2 files changed

+54
-4
lines changed

2 files changed

+54
-4
lines changed

lib/js/src/manager/file/_FileManagerBase.js

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import { ListFiles } from './../../rpc/messages/ListFiles.js';
3434
import { DeleteFile } from './../../rpc/messages/DeleteFile.js';
3535
import { _SubManagerBase } from '../_SubManagerBase.js';
36+
import { Version } from './../../util/Version.js';
3637

3738
class _FileManagerBase extends _SubManagerBase {
3839
/**
@@ -217,18 +218,33 @@ class _FileManagerBase extends _SubManagerBase {
217218
* @returns {Boolean} - Whether file has been uploaded to core (true) or not (false)
218219
*/
219220
hasUploadedFile (sdlFile) {
221+
// this method's logic is more related to the iOS library than the Java library
222+
// https://github.com/smartdevicelink/sdl_ios/issues/827 - Older versions of Core had a bug where list files would cache incorrectly.
223+
const rpcMsgVersion = this._lifecycleManager.getSdlMsgVersion();
224+
const rpcVersion = new Version()
225+
.setMajor(rpcMsgVersion.getMajorVersion())
226+
.setMinor(rpcMsgVersion.getMinorVersion())
227+
.setPatch(rpcMsgVersion.getPatchVersion());
228+
220229
const filename = sdlFile.getName();
221230
const isPersistent = sdlFile.isPersistent();
222231
const remoteFiles = this._remoteFiles;
223232
const ephemeralFiles = this._uploadedEphemeralFileNames;
224233
const isInRemoteFiles = remoteFiles.indexOf(filename) !== -1;
225234
const isInEphemeralFiles = ephemeralFiles.indexOf(filename) !== -1;
226235

227-
if (isPersistent) {
228-
return isInRemoteFiles;
229-
} else { // if it is not persistent it must be listed in both remote and ephemeral files.
230-
return isInRemoteFiles && isInEphemeralFiles;
236+
if (new Version(4, 4, 0).isNewerThan(rpcVersion) === 1) {
237+
if (isPersistent) {
238+
return isInRemoteFiles;
239+
} else { // if it is not persistent it must be listed in both remote and ephemeral files.
240+
return isInRemoteFiles && isInEphemeralFiles;
241+
}
242+
} else if (isInRemoteFiles) {
243+
// If not connected to a system where the bug presents itself, we can trust the `remoteFileNames`
244+
return true;
231245
}
246+
247+
return false;
232248
}
233249

234250

tests/managers/file/FileManagerTests.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,40 @@ module.exports = function (appClient) {
259259
sdlManager.removeRpcListener(SDL.rpc.enums.FunctionID.ListFiles, expectSuccess);
260260
});
261261

262+
it('testNonPersistentFilesOnOlderVersions', async function () {
263+
const stub = sinon.stub(lifecycleManager, 'getSdlMsgVersion')
264+
.callsFake(() => {
265+
return new SDL.rpc.structs.SdlMsgVersion()
266+
.setMajorVersion(4)
267+
.setMinorVersion(3);
268+
});
269+
270+
fileManager._remoteFiles.splice(0, fileManager._remoteFiles.length);
271+
fileManager._uploadedEphemeralFileNames.splice(0, fileManager._uploadedEphemeralFileNames.length);
272+
fileManager._remoteFiles.push(validFile.getName());
273+
const hasUploadedResult = fileManager.hasUploadedFile(validFile);
274+
stub.restore();
275+
276+
Validator.assertTrue(!hasUploadedResult);
277+
});
278+
279+
it('testNonPersistentFilesOnNewerVersions', async function () {
280+
const stub = sinon.stub(lifecycleManager, 'getSdlMsgVersion')
281+
.callsFake(() => {
282+
return new SDL.rpc.structs.SdlMsgVersion()
283+
.setMajorVersion(5)
284+
.setMinorVersion(0);
285+
});
286+
287+
fileManager._remoteFiles.splice(0, fileManager._remoteFiles.length);
288+
fileManager._uploadedEphemeralFileNames.splice(0, fileManager._uploadedEphemeralFileNames.length);
289+
fileManager._remoteFiles.push(validFile.getName());
290+
const hasUploadedResult = fileManager.hasUploadedFile(validFile);
291+
stub.restore();
292+
293+
Validator.assertTrue(hasUploadedResult);
294+
});
295+
262296
it('testInvalidSdlFileInput', async function () {
263297
const expectSuccess = function (response) {
264298
Validator.assertTrue(response.getSuccess());

0 commit comments

Comments
 (0)