Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 90 additions & 0 deletions main/common/settings/default-settings.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions main/common/settings/default-settings.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

66 changes: 66 additions & 0 deletions main/common/settings/settings-store.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions main/common/settings/settings-store.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,8 @@ import { VolumeIconComponent } from './ui/components/volume-icon/volume-icon.com
import { EditTracksDialogComponent } from './ui/components/dialogs/edit-tracks-dialog/edit-tracks-dialog.component';
import { InfoDialogComponent } from './ui/components/dialogs/info-dialog/info-dialog.component';
import { IterableMenuComponent } from './ui/components/common/iterable-menu.component';
import { SrtLyricsGetter } from './services/lyrics/srt-lyrics-getter';
import { GripesSettingsComponent } from './ui/components/settings/gripes-settings/gripes-settings.component';

export function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {
return new TranslateHttpLoader(http, './assets/i18n/', '.json');
Expand Down Expand Up @@ -551,6 +553,7 @@ export function settingsInitializerFactory(settings: SettingsBase) {
GuidFactory,
EmbeddedLyricsGetter,
LrcLyricsGetter,
SrtLyricsGetter,
OnlineLyricsGetter,
IntegrationTestRunner,
AudioVisualizer,
Expand Down
1 change: 1 addition & 0 deletions src/app/common/api/lyrics/lyrics-source-type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ export enum LyricsSourceType {
embedded = 2,
lrc = 3,
online = 4,
srt = 5,
}
3 changes: 3 additions & 0 deletions src/app/common/settings/settings.base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,9 @@ export abstract class SettingsBase {
public abstract fullPlayerPositionSizeMaximized: string;
public abstract coverPlayerPosition: string;
public abstract useGaplessPlayback: boolean;
public abstract showRichLyrics: boolean;
public abstract richLyricsLineCount: number;
public abstract richLyricsFontSize: number;
public abstract jumpToPlayingSong: boolean;
public abstract showSquareImages: boolean;
public abstract useCompactYearView: boolean;
Expand Down
27 changes: 27 additions & 0 deletions src/app/common/settings/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -817,6 +817,33 @@ export class Settings implements SettingsBase {
this.set('useGaplessPlayback', v);
}

// showRichLyrics
public get showRichLyrics(): boolean {
return this.get<boolean>('showRichLyrics');
}

public set showRichLyrics(v: boolean) {
this.set('showRichLyrics', v);
}

// richLyricsLineCount
public get richLyricsLineCount(): number {
return this.get<number>('richLyricsLineCount');
}

public set richLyricsLineCount(v: number) {
this.set('richLyricsLineCount', v)
}

// richLyricsFontSize
public get richLyricsFontSize(): number {
return this.get<number>('richLyricsFontSize');
}

public set richLyricsFontSize(v: number) {
this.set('richLyricsFontSize', v);
}

// jumpToPlayingSong
public get jumpToPlayingSong(): boolean {
return this.get<boolean>('jumpToPlayingSong');
Expand Down
2 changes: 1 addition & 1 deletion src/app/services/lyrics/embedded-lyrics-getter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ export class EmbeddedLyricsGetter implements ILyricsGetter {
return LyricsModel.empty(track);
}

return new LyricsModel(track, '', LyricsSourceType.embedded, fileMetadata.lyrics);
return LyricsModel.createSimple(track, '', LyricsSourceType.embedded, fileMetadata.lyrics);
}
}
18 changes: 14 additions & 4 deletions src/app/services/lyrics/lrc-lyrics-getter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,22 @@ export class LrcLyricsGetter implements ILyricsGetter {

const lines: string[] = await this.fileAccess.readLinesAsync(lrcFilePath);
let lyricsText: string = '';
const lyricLines: string[] = [];
const timeStamps: number[] = [];

for (let i = 0; i < lines.length; i++) {
const lineParts: string[] = lines[i].split(']');
const lineWithoutTimestamp: string = lineParts.length > 1 ? lineParts[1] : lineParts[0];
const lineParts = lines[i].replace('[', '').split(']');
const lineWithoutTimestamp: string = lineParts[1];
const timeStamp: string = lineParts[0];

if (!StringUtils.isNullOrWhiteSpace(lineWithoutTimestamp) && !lineWithoutTimestamp.startsWith('[')) {
const timeList = timeStamp.split(':');

const startTime = (Number(timeList[0]) * 60) + (Number(timeList[1].replace('.', '')) / 100);

lyricLines.push(lineWithoutTimestamp);
timeStamps.push(startTime);

if (!StringUtils.isNullOrWhiteSpace(lineWithoutTimestamp)) {
lyricsText += `${lineWithoutTimestamp}`;

if (i < lines.length - 1) {
Expand All @@ -37,7 +47,7 @@ export class LrcLyricsGetter implements ILyricsGetter {
return LyricsModel.empty(track);
}

return new LyricsModel(track, '', LyricsSourceType.lrc, lyricsText);
return LyricsModel.createWithoutEnds(track, '', LyricsSourceType.lrc, lyricsText, lyricLines, timeStamps);
}

private getLrcFilePath(track: TrackModel): string {
Expand Down
8 changes: 4 additions & 4 deletions src/app/services/lyrics/lyrics-model.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ describe('LyricsModel', () => {
it('should create', () => {
// Arrange, Act
const trackMock: TrackModel = MockCreator.createTrackModel('path', 'trackTitle', 'artists');
const instance = new LyricsModel(trackMock, 'sourceName', LyricsSourceType.embedded, 'text');
const instance = LyricsModel.createSimple(trackMock, 'sourceName', LyricsSourceType.embedded, 'text');

// Assert
expect(instance).toBeDefined();
Expand All @@ -17,7 +17,7 @@ describe('LyricsModel', () => {
it('should set sourceName', () => {
// Arrange, Act
const trackMock: TrackModel = MockCreator.createTrackModel('path', 'trackTitle', 'artists');
const instance = new LyricsModel(trackMock, 'sourceName', LyricsSourceType.embedded, 'text');
const instance = LyricsModel.createSimple(trackMock, 'sourceName', LyricsSourceType.embedded, 'text');

// Assert
expect(instance.sourceName).toEqual('sourceName');
Expand All @@ -26,7 +26,7 @@ describe('LyricsModel', () => {
it('should set sourceType', () => {
// Arrange, Act
const trackMock: TrackModel = MockCreator.createTrackModel('path', 'trackTitle', 'artists');
const instance = new LyricsModel(trackMock, 'sourceName', LyricsSourceType.embedded, 'text');
const instance = LyricsModel.createSimple(trackMock, 'sourceName', LyricsSourceType.embedded, 'text');

// Assert
expect(instance.sourceType).toEqual(LyricsSourceType.embedded);
Expand All @@ -35,7 +35,7 @@ describe('LyricsModel', () => {
it('should set text', () => {
// Arrange, Act
const trackMock: TrackModel = MockCreator.createTrackModel('path', 'trackTitle', 'artists');
const instance = new LyricsModel(trackMock, 'sourceName', LyricsSourceType.embedded, 'text');
const instance = LyricsModel.createSimple(trackMock, 'sourceName', LyricsSourceType.embedded, 'text');

// Assert
expect(instance.text).toEqual('text');
Expand Down
13 changes: 12 additions & 1 deletion src/app/services/lyrics/lyrics-model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,20 @@ export class LyricsModel {
public sourceName: string,
public sourceType: LyricsSourceType,
public text: string,
public lyricList: string[] | undefined,
public timeStamps: number[] | undefined,
public timeStampEnds: number[] | undefined
) {}

public static createWithoutEnds(track: TrackModel | undefined, sourceName: string, sourceType: LyricsSourceType, text: string, lyricList: string[], timeStamps: number[]): LyricsModel {
return new LyricsModel(track, sourceName, sourceType, text, lyricList, timeStamps, undefined);
}

public static createSimple(track: TrackModel | undefined, sourceName: string, sourceType: LyricsSourceType, text: string): LyricsModel {
return new LyricsModel(track, sourceName, sourceType, text, undefined, undefined, undefined);
}

public static empty(track: TrackModel | undefined): LyricsModel {
return new LyricsModel(track, '', LyricsSourceType.none, '');
return new LyricsModel(track, '', LyricsSourceType.none, '', undefined, undefined, undefined);
}
}
3 changes: 3 additions & 0 deletions src/app/services/lyrics/lyrics.service.base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,7 @@ import { LyricsModel } from './lyrics-model';

export abstract class LyricsServiceBase implements ILyricsGetter {
public abstract getLyricsAsync(track: TrackModel): Promise<LyricsModel>;
public abstract showRichLyrics: boolean;
public abstract richLyricsLineCount: number;
public abstract richLyricsFontSize: number;
}
Loading