From 76fa2a3fd1fd2d06375cc16e565d27dc66a1b051 Mon Sep 17 00:00:00 2001 From: SrGooglo Date: Wed, 2 Aug 2023 20:40:56 +0000 Subject: [PATCH] implement new music & sync models --- packages/comty.js/package.json | 3 +- packages/comty.js/src/models/feed/index.js | 2 +- packages/comty.js/src/models/music/index.js | 56 +++++++++++++++++-- packages/comty.js/src/models/sync/index.js | 12 ++++ .../src/models/sync/services/tidal.js | 10 ++++ 5 files changed, 75 insertions(+), 8 deletions(-) diff --git a/packages/comty.js/package.json b/packages/comty.js/package.json index e79a30ee..88f35385 100644 --- a/packages/comty.js/package.json +++ b/packages/comty.js/package.json @@ -16,9 +16,10 @@ "js-cookie": "^3.0.5", "jsonwebtoken": "^9.0.0", "jwt-decode": "^3.1.2", + "luxon": "^3.3.0", "socket.io-client": "^4.6.1" }, "devDependencies": { "corenode": "^0.28.26" } -} \ No newline at end of file +} diff --git a/packages/comty.js/src/models/feed/index.js b/packages/comty.js/src/models/feed/index.js index 630e52ed..79651277 100755 --- a/packages/comty.js/src/models/feed/index.js +++ b/packages/comty.js/src/models/feed/index.js @@ -28,7 +28,7 @@ export default class FeedModel { return data } - static getTimelineFeed = async ({ trim, limit } = {}) => { + static getTimelineFeed = async ({ trim, limit = 10 } = {}) => { const { data } = await request({ method: "GET", url: `/feed/timeline`, diff --git a/packages/comty.js/src/models/music/index.js b/packages/comty.js/src/models/music/index.js index 61e73d5d..4c022b26 100644 --- a/packages/comty.js/src/models/music/index.js +++ b/packages/comty.js/src/models/music/index.js @@ -1,18 +1,62 @@ import request from "../../handlers/request" +import pmap from "p-map" +import SyncModel from "../sync" export default class MusicModel { static get api_instance() { return globalThis.__comty_shared_state.instances["music"] } - static getFavorites = async () => { - const { data } = await request({ - instance: MusicModel.api_instance, - method: "GET", - url: `/tracks/liked`, + static getFavorites = async ({ + useTidal = false + }) => { + let result = [] + + const requesters = [ + async () => { + let { data } = await request({ + instance: MusicModel.api_instance, + method: "GET", + url: `/tracks/liked`, + }) + + return data + }, + ] + + if (useTidal) { + requesters.push( + async () => { + const tidalResult = await SyncModel.tidalCore.getMyFavoriteTracks() + + return tidalResult + } + ) + } + + result = await pmap( + requesters, + async (requester) => { + const data = await requester() + + return data + }, + { + concurrency: 3 + } + ) + + result = result.reduce((acc, cur) => { + return [...acc, ...cur] + }, []) + + result = result.sort((a, b) => { + return b.liked_at - a.liked_at }) - return data + console.log(result) + + return result } static search = async (keywords, { diff --git a/packages/comty.js/src/models/sync/index.js b/packages/comty.js/src/models/sync/index.js index 8ee70c43..0d335763 100755 --- a/packages/comty.js/src/models/sync/index.js +++ b/packages/comty.js/src/models/sync/index.js @@ -1,6 +1,8 @@ import spotifyService from "./services/spotify" import tidalService from "./services/tidal" +import request from "../../handlers/request" + const namespacesServices = { spotify: spotifyService, tidal: tidalService @@ -44,4 +46,14 @@ export default class SyncModel { return await service.isActive() } + + static async getLinkedServices() { + const response = await request({ + instance: globalThis.__comty_shared_state.instances["sync"], + method: "GET", + url: "/active_services", + }) + + return response.data + } } \ No newline at end of file diff --git a/packages/comty.js/src/models/sync/services/tidal.js b/packages/comty.js/src/models/sync/services/tidal.js index 39a3a46d..d91cbd02 100644 --- a/packages/comty.js/src/models/sync/services/tidal.js +++ b/packages/comty.js/src/models/sync/services/tidal.js @@ -80,4 +80,14 @@ export default class TidalService { return data } + + static async getMyFavoriteTracks() { + const { data } = await request({ + instance: TidalService.api_instance, + method: "GET", + url: `/services/tidal/favorites/tracks`, + }) + + return data + } } \ No newline at end of file