diff --git a/__tests__/camera.test.ts b/__tests__/camera.test.ts index e4950b68..5edda712 100644 --- a/__tests__/camera.test.ts +++ b/__tests__/camera.test.ts @@ -5,9 +5,10 @@ const APPLE_01 : Camera = { make: 'Apple', model: 'iPhone 11' }; const APPLE_02 : Camera = { make: 'Apple', model: 'iPhone 15 Pro Max' }; const FUJIFILM : Camera = { make: 'Fujifilm', model: 'X-T5' }; const CANON : Camera = { make: 'Canon', model: 'Canon EOS 800D' }; -const NIKON : Camera = { - make: 'Nikon Corporation', - model: 'Nikon D7000', +const NIKON : Camera = { make: 'Nikon Corporation', model: 'Nikon D7000' }; +const RICOH : Camera = { + make: 'RICOH IMAGING COMPANY, LTD.', + model: 'RICOH GR III', }; describe('Camera', () => { @@ -19,6 +20,7 @@ describe('Camera', () => { expect(formatCameraText(FUJIFILM)).toBe('Fujifilm X-T5'); expect(formatCameraText(CANON)).toBe('Canon EOS 800D'); expect(formatCameraText(NIKON)).toBe('Nikon D7000'); + expect(formatCameraText(RICOH)).toBe('RICOH GR III'); }); it('labels models correctly', () => { expect(formatCameraText(APPLE, 'never')).toBe('iPhone 11 Pro'); diff --git a/src/camera/index.ts b/src/camera/index.ts index 08dadb67..60bd7e0c 100644 --- a/src/camera/index.ts +++ b/src/camera/index.ts @@ -56,14 +56,17 @@ export const cameraFromPhoto = ( : fallback ?? CAMERA_PLACEHOLDER; export const formatCameraText = ( - { make: makeRaw, model: modelRaw }: Camera, + { make, model: modelRaw }: Camera, includeMake: 'always' | 'never' | 'if-not-apple' = 'if-not-apple', removeIPhoneOnLongModels?: boolean, ) => { - // Remove 'Corporation' from makes like 'Nikon Corporation' - const make = makeRaw.replace(/ Corporation/i, ''); - // Remove potential duplicate make from model - let model = modelRaw.replace(`${make} `, ''); + // Capture simple make without modifiers like 'Corporation' or 'Company' + const makeSimple = make.match(/^(\S+)/)?.[1]; + const doesModelStartWithMake = ( + makeSimple && + modelRaw.toLocaleLowerCase().startsWith(makeSimple.toLocaleLowerCase()) + ); + let model = modelRaw; if ( removeIPhoneOnLongModels && model.includes('iPhone') && @@ -72,8 +75,9 @@ export const formatCameraText = ( model = model.replace(/iPhone\s*/i, ''); } return ( - includeMake === 'never' || - includeMake === 'if-not-apple' && make === 'Apple' + includeMake === 'never' || + doesModelStartWithMake || + (includeMake === 'if-not-apple' && make === 'Apple') ) ? model : `${make} ${model}`; };