From 4a14a8d581451ee100cd9d5f0474288f6e6091a0 Mon Sep 17 00:00:00 2001 From: FinalDoom <677609+FinalDoom@users.noreply.github.com> Date: Tue, 2 Jan 2024 10:23:42 -0700 Subject: [PATCH] Remove case-insensitivity as it breaks client-side filtering. Just treat everything as case-sensitive. Also flood could be on a different OS than the torrent application, which would also cause mismatches. --- server/services/taxonomyService.test.ts | 34 +------------------------ server/services/taxonomyService.ts | 8 +++--- server/util/fileUtil.ts | 4 +-- 3 files changed, 6 insertions(+), 40 deletions(-) diff --git a/server/services/taxonomyService.test.ts b/server/services/taxonomyService.test.ts index 1ae0acbe4..1e2d749aa 100644 --- a/server/services/taxonomyService.test.ts +++ b/server/services/taxonomyService.test.ts @@ -1,7 +1,6 @@ import {LocationTreeNode} from '@shared/types/Taxonomy'; import TaxonomyService from '../../server/services/taxonomyService'; import {UserInDatabase} from '@shared/schema/Auth'; -import os from 'os'; type LocationRecord = {[key: string]: LocationRecord | null}; const toTreeNodes = (locations: LocationRecord, separator = '/', basePath = '') => @@ -61,43 +60,12 @@ describe('taxonomyService', () => { ]) { const {locations, expected} = locationsAndExpected; - it(`builds Linux-style case-sensitive location tree correctly from ${locations}`, () => { + it(`builds case-sensitive location tree correctly from ${locations}`, () => { const taxonomyService = new TaxonomyService({} as UserInDatabase); - const mock = jest.spyOn(os, 'platform'); - mock.mockImplementation(() => 'linux'); for (const location of locations) taxonomyService.incrementLocationCountsAndSizes(location, 10); expect(taxonomyService.taxonomy.locationTree).toMatchObject(expected); - - mock.mockRestore(); - }); - } - - for (const locationsAndExpected of [ - // Multiple roots including overlapping case - { - locations: ['/mnt/file1', '/mnt/file2', '/mount/directory1/file3', '/Mount/directory2/file4'], - expected: toTreeNodes({ - '': { - mnt: {file1: null, file2: null}, - mount: {directory1: {file3: null}, directory2: {file4: null}}, - }, - })[0], - }, - ]) { - const {locations, expected} = locationsAndExpected; - - it(`builds Mac-style case-insensitive location tree correctly from ${locations}`, () => { - const taxonomyService = new TaxonomyService({} as UserInDatabase); - const mock = jest.spyOn(os, 'platform'); - mock.mockImplementation(() => 'darwin'); - - for (const location of locations) taxonomyService.incrementLocationCountsAndSizes(location, 10); - - expect(taxonomyService.taxonomy.locationTree).toMatchObject(expected); - - mock.mockRestore(); }); } }); diff --git a/server/services/taxonomyService.ts b/server/services/taxonomyService.ts index c5fc2b044..9152da97d 100644 --- a/server/services/taxonomyService.ts +++ b/server/services/taxonomyService.ts @@ -2,7 +2,6 @@ import jsonpatch, {Operation} from 'fast-json-patch'; import BaseService from './BaseService'; import torrentStatusMap from '../../shared/constants/torrentStatusMap'; -import {isInsensitiveOs} from '../util/fileUtil'; import type {Taxonomy, LocationTreeNode} from '@shared/types/Taxonomy'; import type {TorrentStatus} from '@shared/constants/torrentStatusMap'; @@ -113,7 +112,7 @@ class TaxonomyService extends BaseService { directory: TorrentProperties['directory'], sizeBytes: TorrentProperties['sizeBytes'], ) { - const separator = directory.includes('\\') ? '\\' : '/'; + const separator = directory.includes('/') ? '/' : '\\'; const countSizeAndBytesForHierarchy = (parent: LocationTreeNode, pathSplit: string[]) => { const [nodeName, ...restOfPath] = pathSplit; @@ -136,8 +135,9 @@ class TaxonomyService extends BaseService { } }; - const path = isInsensitiveOs() ? directory.toLocaleLowerCase() : directory; - const pathSplit = path.startsWith(separator) ? path.split(separator).slice(1) : path.split(separator); + const pathSplit = directory.startsWith(separator) + ? directory.split(separator).slice(1) + : directory.split(separator); countSizeAndBytesForHierarchy(this.taxonomy.locationTree, pathSplit); this.taxonomy.locationTree.containedCount += 1; diff --git a/server/util/fileUtil.ts b/server/util/fileUtil.ts index e7b010354..72ecf244c 100644 --- a/server/util/fileUtil.ts +++ b/server/util/fileUtil.ts @@ -1,6 +1,6 @@ import fs from 'fs'; import {promises as fsp} from 'fs'; -import {homedir, platform} from 'os'; +import {homedir} from 'os'; import path from 'path'; import config from '../../config'; @@ -88,5 +88,3 @@ export const sanitizePath = (input?: string): string => { return path.resolve(input.replace(/^~/, homedir()).replace(controlRe, '')); }; - -export const isInsensitiveOs = (): boolean => ['darwin', 'win32'].includes(platform());