-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Added last.fm plugin #4106
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Added last.fm plugin #4106
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remaining comments which cannot be posted as a review comment to avoid GitHub Rate Limit
eslint
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········································ with ····················
pear-desktop/src/plugins/last-fm/index.ts
Line 52 in 8aeb55c
| type: 'text', |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···································· with ··················
pear-desktop/src/plugins/last-fm/index.ts
Line 53 in 8aeb55c
| }, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ································ with ················
pear-desktop/src/plugins/last-fm/index.ts
Line 54 in 8aeb55c
| }, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ································ with ················
pear-desktop/src/plugins/last-fm/index.ts
Line 55 in 8aeb55c
| { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···································· with ··················
pear-desktop/src/plugins/last-fm/index.ts
Line 56 in 8aeb55c
| label: 'API Secret', |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···································· with ··················
pear-desktop/src/plugins/last-fm/index.ts
Line 57 in 8aeb55c
| value: config.secret, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···································· with ··················
pear-desktop/src/plugins/last-fm/index.ts
Line 58 in 8aeb55c
| inputAttrs: { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········································ with ····················
pear-desktop/src/plugins/last-fm/index.ts
Line 59 in 8aeb55c
| type: 'text', |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···································· with ··················
pear-desktop/src/plugins/last-fm/index.ts
Line 60 in 8aeb55c
| }, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ································ with ················
pear-desktop/src/plugins/last-fm/index.ts
Line 61 in 8aeb55c
| }, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···························· with ··············
pear-desktop/src/plugins/last-fm/index.ts
Line 62 in 8aeb55c
| ], |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···························· with ··············
pear-desktop/src/plugins/last-fm/index.ts
Line 63 in 8aeb55c
| resizable: true, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··············
pear-desktop/src/plugins/last-fm/index.ts
Line 64 in 8aeb55c
| height: 360, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··············
pear-desktop/src/plugins/last-fm/index.ts
Line 65 in 8aeb55c
| ...promptOptions(), |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ························ with ············
pear-desktop/src/plugins/last-fm/index.ts
Line 66 in 8aeb55c
| }, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ························ with ············
pear-desktop/src/plugins/last-fm/index.ts
Line 67 in 8aeb55c
| window, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···················· with ··········
pear-desktop/src/plugins/last-fm/index.ts
Line 68 in 8aeb55c
| ); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···················· with ··········
pear-desktop/src/plugins/last-fm/index.ts
Line 70 in 8aeb55c
| if (output) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ························ with ············
pear-desktop/src/plugins/last-fm/index.ts
Line 71 in 8aeb55c
| if (output[0]) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···························· with ··············
pear-desktop/src/plugins/last-fm/index.ts
Line 72 in 8aeb55c
| setConfig({ apiKey: output[0] }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ························ with ············
pear-desktop/src/plugins/last-fm/index.ts
Line 73 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ············
pear-desktop/src/plugins/last-fm/index.ts
Line 74 in 8aeb55c
| if (output[1]) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···························· with ··············
pear-desktop/src/plugins/last-fm/index.ts
Line 75 in 8aeb55c
| setConfig({ secret: output[1] }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ························ with ············
pear-desktop/src/plugins/last-fm/index.ts
Line 76 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···················· with ··········
pear-desktop/src/plugins/last-fm/index.ts
Line 77 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ········
pear-desktop/src/plugins/last-fm/index.ts
Line 78 in 8aeb55c
| }, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/index.ts
Line 79 in 8aeb55c
| }, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/index.ts
Line 80 in 8aeb55c
| ]; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/index.ts
Line 81 in 8aeb55c
| }, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/index.ts
Line 82 in 8aeb55c
| backend, |
🚫 [eslint] <importPlugin/order> reported by reviewdog 🐶
There should be at least one empty line between import groups
| import { BrowserWindow, net } from 'electron'; |
🚫 [eslint] <importPlugin/order> reported by reviewdog 🐶node:crypto import should occur before import of electron
| import crypto from 'node:crypto'; |
🚫 [eslint] <@typescript-eslint/consistent-type-imports> reported by reviewdog 🐶
Imports "SongInfo" are only used as type.
pear-desktop/src/plugins/last-fm/main.ts
Lines 5 to 9 in 8aeb55c
| import { | |
| registerCallback, | |
| SongInfo, | |
| SongInfoEvent, | |
| } from '@/providers/song-info'; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
| registerCallback, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
| SongInfo, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
| SongInfoEvent, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 18 in 8aeb55c
| method: string; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 19 in 8aeb55c
| api_key: string; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 20 in 8aeb55c
| sk?: string; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···· with ··
pear-desktop/src/plugins/last-fm/main.ts
Line 21 in 8aeb55c
| format: 'json'; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 22 in 8aeb55c
| api_sig?: string; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 34 in 8aeb55c
| let sig = ''; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···· with ··
pear-desktop/src/plugins/last-fm/main.ts
Line 35 in 8aeb55c
| Object.entries(params) |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 36 in 8aeb55c
| .sort(([a], [b]) => a.localeCompare(b)) |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 37 in 8aeb55c
| .forEach(([key, value]) => { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 38 in 8aeb55c
| // 'format' and 'callback' are not included in the signature |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 39 in 8aeb55c
| if (key === 'format' || key === 'callback') return; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 40 in 8aeb55c
| sig += key + String(value); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 41 in 8aeb55c
| }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 42 in 8aeb55c
| sig += secret; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 43 in 8aeb55c
| return crypto.createHash('md5').update(sig, 'utf-8').digest('hex'); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···· with ··
pear-desktop/src/plugins/last-fm/main.ts
Line 54 in 8aeb55c
| params: Record<string, unknown>, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 55 in 8aeb55c
| apiSignature: string, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 57 in 8aeb55c
| const queryParams = { ...params, api_sig: apiSignature }; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 58 in 8aeb55c
| const queryData = Object.entries(queryParams).map( |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········ with ····
pear-desktop/src/plugins/last-fm/main.ts
Line 59 in 8aeb55c
| ([key, value]) => |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 60 in 8aeb55c
| `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···· with ··
pear-desktop/src/plugins/last-fm/main.ts
Line 61 in 8aeb55c
| ); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 62 in 8aeb55c
| return '?' + queryData.join('&'); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 72 in 8aeb55c
| const formData = new URLSearchParams(); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 73 in 8aeb55c
| for (const key in params) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 74 in 8aeb55c
| if (params[key] !== undefined) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 75 in 8aeb55c
| formData.append(key, String(params[key])); |
🚫 [eslint] <@typescript-eslint/no-base-to-string> reported by reviewdog 🐶
'params[key]' may use Object's default stringification format ('[object Object]') when stringified.
pear-desktop/src/plugins/last-fm/main.ts
Line 75 in 8aeb55c
| formData.append(key, String(params[key])); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········ with ····
pear-desktop/src/plugins/last-fm/main.ts
Line 76 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···· with ··
pear-desktop/src/plugins/last-fm/main.ts
Line 77 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 78 in 8aeb55c
| return formData; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 82 in 8aeb55c
| config?: LastFmConfig; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 83 in 8aeb55c
| window?: BrowserWindow; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 84 in 8aeb55c
| scrobbleTimer?: NodeJS.Timeout; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···· with ··
pear-desktop/src/plugins/last-fm/main.ts
Line 86 in 8aeb55c
| startAuth(config: LastFmConfig): Promise<void>; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 87 in 8aeb55c
| createSession(config: LastFmConfig): Promise<void>; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···· with ··
pear-desktop/src/plugins/last-fm/main.ts
Line 88 in 8aeb55c
| scrobble(songInfo: SongInfo, config: LastFmConfig): Promise<void>; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 89 in 8aeb55c
| updateNowPlaying(songInfo: SongInfo, config: LastFmConfig): Promise<void>; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 91 in 8aeb55c
| async start({ getConfig, setConfig, window }) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 92 in 8aeb55c
| this.config = await getConfig(); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 93 in 8aeb55c
| this.window = window; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 95 in 8aeb55c
| // If enabled but no session key, start the authentication flow |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········ with ····
pear-desktop/src/plugins/last-fm/main.ts
Line 96 in 8aeb55c
| if (this.config.enabled && !this.config.sessionKey) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 97 in 8aeb55c
| await this.startAuth(this.config); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 98 in 8aeb55c
| await setConfig(this.config); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········ with ····
pear-desktop/src/plugins/last-fm/main.ts
Line 99 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 101 in 8aeb55c
| // Register a callback to listen for song changes |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 102 in 8aeb55c
| registerCallback((songInfo: SongInfo, event) => { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 103 in 8aeb55c
| // Ignore time updates, we only care about track changes or pause/play |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 104 in 8aeb55c
| if (event === SongInfoEvent.TimeChanged) return; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 106 in 8aeb55c
| // Clear any pending scrobble timer to prevent duplicate scrobbles |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 107 in 8aeb55c
| clearTimeout(this.scrobbleTimer); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 109 in 8aeb55c
| if ( |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ········
pear-desktop/src/plugins/last-fm/main.ts
Line 110 in 8aeb55c
| !songInfo.isPaused && |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ········
pear-desktop/src/plugins/last-fm/main.ts
Line 111 in 8aeb55c
| this.config?.enabled && |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ········
pear-desktop/src/plugins/last-fm/main.ts
Line 112 in 8aeb55c
| this.config.sessionKey |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 113 in 8aeb55c
| ) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ········
pear-desktop/src/plugins/last-fm/main.ts
Line 114 in 8aeb55c
| // 1. Update "Now Playing" status on Last.fm |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ········
pear-desktop/src/plugins/last-fm/main.ts
Line 115 in 8aeb55c
| this.updateNowPlaying(songInfo, this.config); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ········
pear-desktop/src/plugins/last-fm/main.ts
Line 117 in 8aeb55c
| // 2. Schedule the Scrobble |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ········
pear-desktop/src/plugins/last-fm/main.ts
Line 118 in 8aeb55c
| // Rule: Scrobble at 33% of the song duration OR 4 minutes, whichever comes first. |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ········
pear-desktop/src/plugins/last-fm/main.ts
Line 119 in 8aeb55c
| const scrobbleThreshold = Math.min( |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···················· with ··········
pear-desktop/src/plugins/last-fm/main.ts
Line 120 in 8aeb55c
| Math.ceil(songInfo.songDuration * 0.33), |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···················· with ··········
pear-desktop/src/plugins/last-fm/main.ts
Line 121 in 8aeb55c
| 4 * 60, // 4 minutes in seconds |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ········
pear-desktop/src/plugins/last-fm/main.ts
Line 122 in 8aeb55c
| ); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ········
pear-desktop/src/plugins/last-fm/main.ts
Line 124 in 8aeb55c
| const elapsed = songInfo.elapsedSeconds ?? 0; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ········
pear-desktop/src/plugins/last-fm/main.ts
Line 126 in 8aeb55c
| if (scrobbleThreshold > elapsed) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···················· with ··········
pear-desktop/src/plugins/last-fm/main.ts
Line 127 in 8aeb55c
| const timeToWait = (scrobbleThreshold - elapsed) * 1000; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··········
pear-desktop/src/plugins/last-fm/main.ts
Line 128 in 8aeb55c
| this.scrobbleTimer = setTimeout(() => { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ························ with ············
pear-desktop/src/plugins/last-fm/main.ts
Line 129 in 8aeb55c
| if (this.config) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··············
pear-desktop/src/plugins/last-fm/main.ts
Line 130 in 8aeb55c
| this.scrobble(songInfo, this.config); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ············
pear-desktop/src/plugins/last-fm/main.ts
Line 131 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···················· with ··········
pear-desktop/src/plugins/last-fm/main.ts
Line 132 in 8aeb55c
| }, timeToWait); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ········
pear-desktop/src/plugins/last-fm/main.ts
Line 133 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 134 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 135 in 8aeb55c
| }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 136 in 8aeb55c
| }, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 138 in 8aeb55c
| async onConfigChange(newConfig) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 139 in 8aeb55c
| this.config = newConfig; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 140 in 8aeb55c
| // Re-authenticate if the plugin is enabled but lacks a session key |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········ with ····
pear-desktop/src/plugins/last-fm/main.ts
Line 141 in 8aeb55c
| if (this.config.enabled && !this.config.sessionKey) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 142 in 8aeb55c
| await this.startAuth(this.config); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 143 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···· with ··
pear-desktop/src/plugins/last-fm/main.ts
Line 144 in 8aeb55c
| }, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···· with ··
pear-desktop/src/plugins/last-fm/main.ts
Line 146 in 8aeb55c
| /** |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ····· with ···
pear-desktop/src/plugins/last-fm/main.ts
Line 147 in 8aeb55c
| * Starts the Last.fm authentication process. |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 148 in 8aeb55c
| * 1. Fetches a request token. |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 149 in 8aeb55c
| * 2. Opens a browser window for the user to approve the application. |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 150 in 8aeb55c
| * 3. Creates a session after approval. |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 151 in 8aeb55c
| */ |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 152 in 8aeb55c
| async startAuth(config: LastFmConfig) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 153 in 8aeb55c
| // Step 1: Get a Request Token |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········ with ····
pear-desktop/src/plugins/last-fm/main.ts
Line 154 in 8aeb55c
| const tokenParams = { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 155 in 8aeb55c
| method: 'auth.gettoken', |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 156 in 8aeb55c
| api_key: config.apiKey, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 157 in 8aeb55c
| format: 'json', |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 158 in 8aeb55c
| }; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 159 in 8aeb55c
| const tokenSig = createApiSig(tokenParams, config.secret); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 160 in 8aeb55c
| const tokenRes = await net.fetch( |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 161 in 8aeb55c
| `${config.apiRoot}${createQueryString(tokenParams, tokenSig)}`, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 162 in 8aeb55c
| ); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 163 in 8aeb55c
| const tokenJson = (await tokenRes.json()) as { token?: string }; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 165 in 8aeb55c
| if (!tokenJson.token) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 166 in 8aeb55c
| console.error('Last.fm: Failed to get authentication token.'); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 167 in 8aeb55c
| return; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········ with ····
pear-desktop/src/plugins/last-fm/main.ts
Line 168 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 169 in 8aeb55c
| config.token = tokenJson.token; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········ with ····
pear-desktop/src/plugins/last-fm/main.ts
Line 171 in 8aeb55c
| // Step 2: Request User Approval via Browser Window |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 172 in 8aeb55c
| const authUrl = `https://www.last.fm/api/auth/?api_key=${config.apiKey}&token=${config.token}`; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 174 in 8aeb55c
| const authWindow = new BrowserWindow({ |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 175 in 8aeb55c
| width: 500, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 176 in 8aeb55c
| height: 600, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 177 in 8aeb55c
| parent: this.window, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 178 in 8aeb55c
| modal: true, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 179 in 8aeb55c
| show: false, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 180 in 8aeb55c
| autoHideMenuBar: true, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 181 in 8aeb55c
| }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 183 in 8aeb55c
| authWindow.loadURL(authUrl); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········ with ····
pear-desktop/src/plugins/last-fm/main.ts
Line 184 in 8aeb55c
| authWindow.show(); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 186 in 8aeb55c
| // Wait for the user to approve the app in the opened window |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········ with ····
pear-desktop/src/plugins/last-fm/main.ts
Line 187 in 8aeb55c
| return new Promise<void>((resolve) => { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 188 in 8aeb55c
| authWindow.webContents.on('did-navigate', async (_, newUrl) => { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ········
pear-desktop/src/plugins/last-fm/main.ts
Line 189 in 8aeb55c
| const url = new URL(newUrl); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ········
pear-desktop/src/plugins/last-fm/main.ts
Line 190 in 8aeb55c
| // Last.fm redirects to this URL after approval |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ········
pear-desktop/src/plugins/last-fm/main.ts
Line 191 in 8aeb55c
| if (url.hostname.endsWith('last.fm') && url.pathname === '/api/auth') { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··········
pear-desktop/src/plugins/last-fm/main.ts
Line 192 in 8aeb55c
| // Check if the approval was successful by looking for the confirmation element |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···················· with ··········
pear-desktop/src/plugins/last-fm/main.ts
Line 193 in 8aeb55c
| // This is a heuristic; ideally we'd use a callback URL but this is a desktop app |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ··········const·isApproveScreen·= with const·isApproveScreen·=⏎···········
pear-desktop/src/plugins/last-fm/main.ts
Line 194 in 8aeb55c
| const isApproveScreen = await authWindow.webContents.executeJavaScript( |
🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an any value.
pear-desktop/src/plugins/last-fm/main.ts
Lines 194 to 196 in 8aeb55c
| const isApproveScreen = await authWindow.webContents.executeJavaScript( | |
| "!!document.getElementsByName('confirm').length", | |
| ); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ························ with ··············
pear-desktop/src/plugins/last-fm/main.ts
Line 195 in 8aeb55c
| "!!document.getElementsByName('confirm').length", |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ········
pear-desktop/src/plugins/last-fm/main.ts
Line 196 in 8aeb55c
| ); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···················· with ··········
pear-desktop/src/plugins/last-fm/main.ts
Line 198 in 8aeb55c
| // If we are past the confirmation screen (or it didn't show), assume success |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··········
pear-desktop/src/plugins/last-fm/main.ts
Line 199 in 8aeb55c
| if (!isApproveScreen) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ························ with ············
pear-desktop/src/plugins/last-fm/main.ts
Line 200 in 8aeb55c
| authWindow.close(); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ························ with ············
pear-desktop/src/plugins/last-fm/main.ts
Line 201 in 8aeb55c
| await this.createSession(config); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ············
pear-desktop/src/plugins/last-fm/main.ts
Line 202 in 8aeb55c
| resolve(); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···················· with ··········
pear-desktop/src/plugins/last-fm/main.ts
Line 203 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ········
pear-desktop/src/plugins/last-fm/main.ts
Line 204 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 205 in 8aeb55c
| }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 207 in 8aeb55c
| // Handle window close by user (cancellation) |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 208 in 8aeb55c
| authWindow.on('closed', () => { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ········
pear-desktop/src/plugins/last-fm/main.ts
Line 209 in 8aeb55c
| resolve(); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 210 in 8aeb55c
| }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 211 in 8aeb55c
| }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···· with ··
pear-desktop/src/plugins/last-fm/main.ts
Line 212 in 8aeb55c
| }, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···· with ··
pear-desktop/src/plugins/last-fm/main.ts
Line 214 in 8aeb55c
| /** |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ····· with ···
pear-desktop/src/plugins/last-fm/main.ts
Line 215 in 8aeb55c
| * Exchanges the request token for a session key. |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 216 in 8aeb55c
| */ |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 217 in 8aeb55c
| async createSession(config: LastFmConfig) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 218 in 8aeb55c
| if (!config.token) return; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 220 in 8aeb55c
| const params = { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 221 in 8aeb55c
| api_key: config.apiKey, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 222 in 8aeb55c
| format: 'json', |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 223 in 8aeb55c
| method: 'auth.getsession', |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 224 in 8aeb55c
| token: config.token, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 225 in 8aeb55c
| }; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 226 in 8aeb55c
| const sig = createApiSig(params, config.secret); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 227 in 8aeb55c
| const res = await net.fetch( |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 228 in 8aeb55c
| `${config.apiRoot}${createQueryString(params, sig)}`, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 229 in 8aeb55c
| ); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 230 in 8aeb55c
| const json = (await res.json()) as { session?: { key: string } }; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 232 in 8aeb55c
| if (json.session) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 233 in 8aeb55c
| config.sessionKey = json.session.key; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 234 in 8aeb55c
| console.log('Last.fm: Session created successfully.'); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········ with ····
pear-desktop/src/plugins/last-fm/main.ts
Line 235 in 8aeb55c
| } else { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 236 in 8aeb55c
| console.error('Last.fm: Failed to create session.', json); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········ with ····
pear-desktop/src/plugins/last-fm/main.ts
Line 237 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 238 in 8aeb55c
| }, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 240 in 8aeb55c
| /** |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 241 in 8aeb55c
| * Updates the "Now Playing" track on Last.fm. |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 242 in 8aeb55c
| */ |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 243 in 8aeb55c
| async updateNowPlaying(songInfo: SongInfo, config: LastFmConfig) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 244 in 8aeb55c
| if (!config.sessionKey) return; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········ with ····
pear-desktop/src/plugins/last-fm/main.ts
Line 246 in 8aeb55c
| const params: LastFmApiParams = { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 247 in 8aeb55c
| method: 'track.updateNowPlaying', |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 248 in 8aeb55c
| track: songInfo.title, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 249 in 8aeb55c
| artist: songInfo.artist, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 250 in 8aeb55c
| duration: songInfo.songDuration, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 251 in 8aeb55c
| api_key: config.apiKey, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 252 in 8aeb55c
| sk: config.sessionKey, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 253 in 8aeb55c
| format: 'json', |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 254 in 8aeb55c
| }; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 256 in 8aeb55c
| if (songInfo.album) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 257 in 8aeb55c
| params.album = songInfo.album; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 258 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 260 in 8aeb55c
| const sig = createApiSig(params, config.secret); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 261 in 8aeb55c
| const formData = createFormData({ ...params, api_sig: sig }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········ with ····
pear-desktop/src/plugins/last-fm/main.ts
Line 263 in 8aeb55c
| try { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 264 in 8aeb55c
| await net.fetch(config.apiRoot, { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ········
pear-desktop/src/plugins/last-fm/main.ts
Line 265 in 8aeb55c
| method: 'POST', |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ········
pear-desktop/src/plugins/last-fm/main.ts
Line 266 in 8aeb55c
| body: formData, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 267 in 8aeb55c
| }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 268 in 8aeb55c
| } catch (error) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 269 in 8aeb55c
| console.error('Last.fm: Failed to update Now Playing.', error); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 270 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 271 in 8aeb55c
| }, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···· with ··
pear-desktop/src/plugins/last-fm/main.ts
Line 273 in 8aeb55c
| /** |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 274 in 8aeb55c
| * Scrobbles a track to Last.fm. |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 275 in 8aeb55c
| */ |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···· with ··
pear-desktop/src/plugins/last-fm/main.ts
Line 276 in 8aeb55c
| async scrobble(songInfo: SongInfo, config: LastFmConfig) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 277 in 8aeb55c
| if (!config.sessionKey) return; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 279 in 8aeb55c
| const params: LastFmApiParams = { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 280 in 8aeb55c
| method: 'track.scrobble', |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 281 in 8aeb55c
| track: songInfo.title, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 282 in 8aeb55c
| artist: songInfo.artist, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 283 in 8aeb55c
| timestamp: Math.floor(Date.now() / 1000), |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 284 in 8aeb55c
| api_key: config.apiKey, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 285 in 8aeb55c
| sk: config.sessionKey, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 286 in 8aeb55c
| format: 'json', |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········ with ····
pear-desktop/src/plugins/last-fm/main.ts
Line 287 in 8aeb55c
| }; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 289 in 8aeb55c
| if (songInfo.album) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 290 in 8aeb55c
| params.album = songInfo.album; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 291 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ········ with ····
pear-desktop/src/plugins/last-fm/main.ts
Line 293 in 8aeb55c
| const sig = createApiSig(params, config.secret); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 294 in 8aeb55c
| const formData = createFormData({ ...params, api_sig: sig }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 296 in 8aeb55c
| try { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 297 in 8aeb55c
| await net.fetch(config.apiRoot, { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ········
pear-desktop/src/plugins/last-fm/main.ts
Line 298 in 8aeb55c
| method: 'POST', |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ········
pear-desktop/src/plugins/last-fm/main.ts
Line 299 in 8aeb55c
| body: formData, |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ······
pear-desktop/src/plugins/last-fm/main.ts
Line 300 in 8aeb55c
| }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············console.log(Last.fm:·Scrobble·successful·for·${songInfo.artist}·-·${songInfo.title}); with ······console.log(⏎········Last.fm:·Scrobble·successful·for·${songInfo.artist}·-·${songInfo.title},
pear-desktop/src/plugins/last-fm/main.ts
Line 301 in 8aeb55c
| console.log(`Last.fm: Scrobble successful for ${songInfo.artist} - ${songInfo.title}`); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··);⏎
pear-desktop/src/plugins/last-fm/main.ts
Line 302 in 8aeb55c
| } catch (error) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
pear-desktop/src/plugins/last-fm/main.ts
Line 303 in 8aeb55c
| console.error('Last.fm: Failed to scrobble.', error); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
pear-desktop/src/plugins/last-fm/main.ts
Line 304 in 8aeb55c
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
pear-desktop/src/plugins/last-fm/main.ts
Line 305 in 8aeb55c
| }, |
| * Configuration interface for the Last.fm plugin. | ||
| */ | ||
| export interface LastFmConfig { | ||
| enabled: boolean; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
| enabled: boolean; | |
| enabled: boolean; |
| */ | ||
| export interface LastFmConfig { | ||
| enabled: boolean; | ||
| token?: string; // Request token for authentication |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
| token?: string; // Request token for authentication | |
| token?: string; // Request token for authentication |
| export interface LastFmConfig { | ||
| enabled: boolean; | ||
| token?: string; // Request token for authentication | ||
| sessionKey?: string; // Session key obtained after user approval |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···· with ··
| sessionKey?: string; // Session key obtained after user approval | |
| sessionKey?: string; // Session key obtained after user approval |
| enabled: boolean; | ||
| token?: string; // Request token for authentication | ||
| sessionKey?: string; // Session key obtained after user approval | ||
| apiRoot: string; // Base URL for Last.fm API |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
| apiRoot: string; // Base URL for Last.fm API | |
| apiRoot: string; // Base URL for Last.fm API |
| token?: string; // Request token for authentication | ||
| sessionKey?: string; // Session key obtained after user approval | ||
| apiRoot: string; // Base URL for Last.fm API | ||
| apiKey: string; // Application API Key |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
| apiKey: string; // Application API Key | |
| apiKey: string; // Application API Key |
| title: 'Last.fm API Settings', | ||
| label: 'Configure API Key and Secret', | ||
| type: 'multiInput', | ||
| multiInputOptions: [ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···························· with ··············
| multiInputOptions: [ | |
| multiInputOptions: [ |
| label: 'Configure API Key and Secret', | ||
| type: 'multiInput', | ||
| multiInputOptions: [ | ||
| { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ································ with ················
| { | |
| { |
| type: 'multiInput', | ||
| multiInputOptions: [ | ||
| { | ||
| label: 'API Key', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···································· with ··················
| label: 'API Key', | |
| label: 'API Key', |
| multiInputOptions: [ | ||
| { | ||
| label: 'API Key', | ||
| value: config.apiKey, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···································· with ··················
| value: config.apiKey, | |
| value: config.apiKey, |
| { | ||
| label: 'API Key', | ||
| value: config.apiKey, | ||
| inputAttrs: { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···································· with ··················
| inputAttrs: { | |
| inputAttrs: { |
(IT'S VIBECODE PLUGIN!)
i tested first version, and it seems working. ai refactored it, and i don't tested it. merge with caution, ig???
(idk why ai put api keys, bc last.fm requesting to log in if plugin started)