Skip to content

Commit

Permalink
Remove case-insensitivity as it breaks client-side filtering.
Browse files Browse the repository at this point in the history
Just treat everything as case-sensitive.
Also flood could be on a different OS than the torrent application, which would also cause mismatches.
  • Loading branch information
FinalDoom committed Jan 2, 2024
1 parent 0900280 commit 4a14a8d
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 40 deletions.
34 changes: 1 addition & 33 deletions server/services/taxonomyService.test.ts
Original file line number Diff line number Diff line change
@@ -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 = '') =>
Expand Down Expand Up @@ -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();
});
}
});
Expand Down
8 changes: 4 additions & 4 deletions server/services/taxonomyService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -113,7 +112,7 @@ class TaxonomyService extends BaseService<TaxonomyServiceEvents> {
directory: TorrentProperties['directory'],
sizeBytes: TorrentProperties['sizeBytes'],
) {
const separator = directory.includes('\\') ? '\\' : '/';
const separator = directory.includes('/') ? '/' : '\\';

const countSizeAndBytesForHierarchy = (parent: LocationTreeNode, pathSplit: string[]) => {
const [nodeName, ...restOfPath] = pathSplit;
Expand All @@ -136,8 +135,9 @@ class TaxonomyService extends BaseService<TaxonomyServiceEvents> {
}
};

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;
Expand Down
4 changes: 1 addition & 3 deletions server/util/fileUtil.ts
Original file line number Diff line number Diff line change
@@ -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';
Expand Down Expand Up @@ -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());

0 comments on commit 4a14a8d

Please sign in to comment.