Skip to content

Commit

Permalink
feat(caa upload): add Musik-Sammler provider
Browse files Browse the repository at this point in the history
  • Loading branch information
ROpdebee committed Nov 7, 2021
1 parent 8c20182 commit 8eb249c
Show file tree
Hide file tree
Showing 6 changed files with 278 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ The following table describes the types of links supported by MB: Upload to CAA
| Discogs | Partial || Images are limited to 600x600, see [qsniyg/maxurl#689](https://github.com/qsniyg/maxurl/issues/689) |
| Melon | ✔️ | ✔️ |
| MusicBrainz | ✔️ | ✔️ | To copy images from one release to another. |
| Musik-Sammler | ✔️ ||
| Qobuz | ✔️ | ✔️ | Goodies are grabbed whenever possible. Back covers might not be supported at this time, if you have a release with a back cover, please let me know. |
| QUB Musique | ✔️ | ✔️ | Dispatched to Qobuz provider. |
| Soundcloud | ✔️ | ✔️ | Grabs custom track images. |
Expand Down
2 changes: 2 additions & 0 deletions src/mb_enhanced_cover_art_uploads/providers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { DeezerProvider } from './deezer';
import { DiscogsProvider } from './discogs';
import { MelonProvider } from './melon';
import { MusicBrainzProvider } from './musicbrainz';
import { MusikSammlerProvider } from './musik_sammler';
import { QobuzProvider } from './qobuz';
import { QubMusiqueProvider } from './qub_musique';
import { SoundcloudProvider } from './soundcloud';
Expand All @@ -37,6 +38,7 @@ addProvider(new DeezerProvider());
addProvider(new DiscogsProvider());
addProvider(new MelonProvider());
addProvider(new MusicBrainzProvider());
addProvider(new MusikSammlerProvider());
addProvider(new QobuzProvider());
addProvider(new QubMusiqueProvider());
addProvider(new SevenDigitalProvider());
Expand Down
24 changes: 24 additions & 0 deletions src/mb_enhanced_cover_art_uploads/providers/musik_sammler.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { assertNonNull } from '@lib/util/assert';
import { parseDOM, qsa } from '@lib/util/dom';

import type { CoverArt } from './base';
import { CoverArtProvider } from './base';

export class MusikSammlerProvider extends CoverArtProvider {
supportedDomains = ['musik-sammler.de'];
name = 'Musik-Sammler';
favicon = 'https://www.musik-sammler.de/favicon.ico';
urlRegex = /release\/(?:.*-)?(\d+)(?:\/|$)/;

async findImages(url: URL): Promise<CoverArt[]> {
const page = parseDOM(await this.fetchPage(url), url.href);
const coverElements = qsa('#imageGallery > li', page);
return coverElements.map((coverLi) => {
const coverSrc = coverLi.getAttribute('data-src');
assertNonNull(coverSrc, 'Musik-Sammler image without source?');
return {
url: new URL(coverSrc, 'https://www.musik-sammler.de/'),
};
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import { MusikSammlerProvider } from '@src/mb_enhanced_cover_art_uploads/providers/musik_sammler';

import { itBehavesLike } from '@test-utils/shared_behaviour';

import { urlMatchingSpec } from './url_matching_spec';
import { findImagesSpec } from './find_images_spec';

describe('musik-sammler provider', () => {
const provider = new MusikSammlerProvider();

describe('url matching', () => {
const supportedUrls = [{
desc: 'release URLs',
url: 'https://www.musik-sammler.de/release/vanilla-fudge-vanilla-fudge-cd-1539691/',
id: '1539691',
}, {
desc: 'short release URLs',
url: 'https://www.musik-sammler.de/release/1539691/',
id: '1539691',
}];

const unsupportedUrls = [{
desc: 'album URLs',
url: 'https://www.musik-sammler.de/album/vanilla-fudge-vanilla-fudge-995842/',
}, {
desc: 'artist URLs',
url: 'https://www.musik-sammler.de/artist/vanilla-fudge/',
}];

// eslint-disable-next-line jest/require-hook
itBehavesLike(urlMatchingSpec, { provider, supportedUrls, unsupportedUrls });
});

describe('extracting images', () => {
const extractionCases = [{
desc: 'release',
url: 'https://www.musik-sammler.de/release/vanilla-fudge-vanilla-fudge-cd-1539691/',
numImages: 3,
expectedImages: [{
index: 0,
urlPart: '1539691_1635313476.jpg',
}, {
index: 1,
urlPart: '1539691_1_1635313476.jpg',
}, {
index: 2,
urlPart: '1539691_2_1635313476.jpg',
}],
}];

const extractionFailedCases = [{
desc: 'non-existent release',
url: 'https://www.musik-sammler.de/release/vanilla-fudge-vanilla-fudge-cd-1539/',
}];

// eslint-disable-next-line jest/require-hook
itBehavesLike(findImagesSpec, { provider, extractionCases, extractionFailedCases });
});
});

Large diffs are not rendered by default.

Large diffs are not rendered by default.

0 comments on commit 8eb249c

Please sign in to comment.