';
+const url = "https://www.google.com/search?q=";
+
+export default async function fetchLyrics(artists:string, title: string) {
+ let lyrics;
+ try {
+ lyrics = (await axios.get
(`${url}${encodeURIComponent(title + " " + artists)}+lyrics`, {responseType: "text"})).data;
+ [, lyrics] = lyrics.split(delim1);
+ [lyrics] = lyrics.split(delim2);
+ } catch (m) {
+ try {
+ lyrics = (await axios.get(`${url}${encodeURIComponent(title + " " + artists)}+song+lyrics`)).data;
+ [, lyrics] = lyrics.split(delim1);
+ [lyrics] = lyrics.split(delim2);
+ } catch (n) {
+ try {
+ lyrics = (await axios.get(`${url}${encodeURIComponent(title + " " + artists)}+song`)).data;
+ [, lyrics] = lyrics.split(delim1);
+ [lyrics] = lyrics.split(delim2);
+ } catch (o) {
+ try {
+ lyrics = (await axios.get(`${url}${encodeURIComponent(title + " " + artists)}`)).data;
+ [, lyrics] = lyrics.split(delim1);
+ [lyrics] = lyrics.split(delim2);
+ } catch (p) {
+ lyrics = 'Not Found';
+ }
+ }
+ }
+ }
+ const rets = lyrics.split('\n');
+ let final = '';
+ for (const ret of rets) {
+ final = `${final}${htmlToText.htmlToText(ret)}\n`;
+ }
+ return final.trim();
+}
\ No newline at end of file
diff --git a/src/helpers/getYoutubeTrack.ts b/src/helpers/getYoutubeTrack.ts
index 2bb84605..5490630f 100644
--- a/src/helpers/getYoutubeTrack.ts
+++ b/src/helpers/getYoutubeTrack.ts
@@ -26,7 +26,7 @@ export async function getYoutubeTrack(track: SpotifyApi.TrackObjectFull): Promis
try {
const artistsName = track.artists.map((ar) => ar.name);
const queryString = `${artistsName[0]} - ${track.name}${artistsName.length > 1 ? ` feat. ${artistsName.slice(1).join(" ")}` : ``}`;
- console.log('Youtube Query String:', queryString);
+ console.log("Youtube Query String:", queryString);
const result = await scrapYt.search(queryString, { limit: 7, type: "video" });
const tracksWithRelevance = result
.map((video) => {
@@ -40,7 +40,9 @@ export async function getYoutubeTrack(track: SpotifyApi.TrackObjectFull): Promis
.sort((a, b) => (a.matchPercentage > b.matchPercentage ? -1 : 1));
const sameChannelTracks = tracksWithRelevance.filter((tr) => tr.sameChannel);
- const finalTrack = { ...track, youtube_uri: (sameChannelTracks.length > 0 ? sameChannelTracks : tracksWithRelevance)[0].url };
+ const rarestTrack = result.map((res) => ({ url: `http://www.youtube.com/watch?v=${res.id}`, id: res.id }));
+
+ const finalTrack = { ...track, youtube_uri: (sameChannelTracks.length > 0 ? sameChannelTracks : tracksWithRelevance.length > 0 ? tracksWithRelevance : rarestTrack)[0].url };
return finalTrack;
} catch (error) {
console.error("Failed to resolve track's youtube url: ", error);
diff --git a/src/icons.ts b/src/icons.ts
index 3cfeed73..07e0b095 100644
--- a/src/icons.ts
+++ b/src/icons.ts
@@ -9,6 +9,9 @@ import _random from "../assets/random-solid.svg"
import _stop from "../assets/stop-solid.svg"
import _search from "../assets/search-solid.svg";
import _loadingSpinner from "../assets/loading-spinner.gif";
+import _settingsCog from "../assets/setting-cog.svg"
+import _times from "../assets/times-solid.svg"
+import _musicNode from "../assets/music-solid.svg"
export const play = _play;
export const pause = _pause;
@@ -20,4 +23,7 @@ export const heart = _heart;
export const random = _random;
export const stop = _stop;
export const search = _search;
-export const loadingSpinner = _loadingSpinner;
\ No newline at end of file
+export const loadingSpinner = _loadingSpinner;
+export const settingsCog = _settingsCog;
+export const times = _times;
+export const musicNode = _musicNode;
\ No newline at end of file
diff --git a/src/index.tsx b/src/index.tsx
index b4b11a60..10882746 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -2,11 +2,17 @@ import { Renderer } from "@nodegui/react-nodegui";
import React from "react";
import App from "./app";
-process.title = "My NodeGui App";
-Renderer.render();
+process.title = "Spotube";
+Renderer.render(, {
+ onInit(reconciler) {
+ if (process.env.NODE_ENV === "development") {
+ require("@nodegui/devtools").connectReactDevtools(reconciler);
+ }
+ },
+});
// This is for hot reloading (this will be stripped off in production by webpack)
if (module.hot) {
- module.hot.accept(["./app"], function() {
+ module.hot.accept(["./app"], function () {
Renderer.forceUpdate();
});
}
diff --git a/src/routes.tsx b/src/routes.tsx
index 7c83fc4a..fd8a517d 100644
--- a/src/routes.tsx
+++ b/src/routes.tsx
@@ -11,6 +11,7 @@ import Library from "./components/Library";
import Search from "./components/Search";
import SearchResultPlaylistCollection from "./components/SearchResultPlaylistCollection";
import SearchResultSongsCollection from "./components/SearchResultSongsCollection";
+import Settings from "./components/Settings";
function Routes() {
const { isLoggedIn } = useContext(authContext);
@@ -50,6 +51,9 @@ function Routes() {
+
+
+
>
);
}