diff --git a/src/KodiApi/Dto/response-item.dto.ts b/src/KodiApi/Dto/response-item.dto.ts index 23d54f5..3c4b2bb 100644 --- a/src/KodiApi/Dto/response-item.dto.ts +++ b/src/KodiApi/Dto/response-item.dto.ts @@ -14,6 +14,7 @@ export default class ResponseItem { thumb: string; contextMenus: Array; date: string; + searchFor: string; constructor() { this.setToPlayable(); @@ -44,13 +45,17 @@ export default class ResponseItem { return this; } - setActionSearch() { + setActionSearch(searchFor: string | null = null) { this.action = 'search'; delete this.isPlayable; delete this.IsPlayable; delete this.mediatype; this.isFolder = false; + if (searchFor) { + this.searchFor = searchFor; + } + return this; } diff --git a/src/KodiApi/LRT/lrt.controller.ts b/src/KodiApi/LRT/lrt.controller.ts index 7a34bdd..eaa7047 100644 --- a/src/KodiApi/LRT/lrt.controller.ts +++ b/src/KodiApi/LRT/lrt.controller.ts @@ -2,10 +2,14 @@ import { Controller, Get, Param, Query, Req } from '@nestjs/common'; import { Request } from 'express'; import { LrtService } from './lrt.service'; import ApiResponse from '../Dto/api-response.dto'; +import { RecentSearchesService } from '../RecentSearches/recent-searches.service'; @Controller('api/lrt') export class LrtController { - constructor(private readonly lrtService: LrtService) {} + constructor( + private readonly lrtService: LrtService, + private readonly recentSearchesService: RecentSearchesService, + ) {} @Get() getLrtMenu(): ApiResponse { @@ -14,9 +18,15 @@ export class LrtController { @Get('search') getSearch(@Query('search') search: string): Promise { + this.recentSearchesService.addRecentSearch('lrt', search).then(); return this.lrtService.searchCategories(search); } + @Get('recent') + getRecent(): Promise { + return this.lrtService.getRecentSearches(); + } + @Get('cat/:id') async getCategory(@Param('id') id: string): Promise { return this.lrtService.getCategory(id); diff --git a/src/KodiApi/LRT/lrt.module.ts b/src/KodiApi/LRT/lrt.module.ts index d191ad9..9280313 100644 --- a/src/KodiApi/LRT/lrt.module.ts +++ b/src/KodiApi/LRT/lrt.module.ts @@ -3,10 +3,11 @@ import { LrtController } from './lrt.controller'; import { LrtService } from './lrt.service'; import { KodiApiResponseFactory } from '../kodi-api-response.factory'; import { LrtApiClientModule } from './LrtApiClient/lrt-api-client.module'; +import { RecentSearchesService } from '../RecentSearches/recent-searches.service'; @Module({ imports: [LrtApiClientModule], controllers: [LrtController], - providers: [KodiApiResponseFactory, LrtService], + providers: [KodiApiResponseFactory, LrtService, RecentSearchesService], }) export class LrtModule {} diff --git a/src/KodiApi/LRT/lrt.service.ts b/src/KodiApi/LRT/lrt.service.ts index fce28cb..c9af023 100644 --- a/src/KodiApi/LRT/lrt.service.ts +++ b/src/KodiApi/LRT/lrt.service.ts @@ -2,12 +2,14 @@ import { Injectable } from '@nestjs/common'; import ApiResponse from '../Dto/api-response.dto'; import { KodiApiResponseFactory } from '../kodi-api-response.factory'; import { LrtApiClient } from './LrtApiClient/lrt-api.client'; +import { RecentSearchesService } from '../RecentSearches/recent-searches.service'; @Injectable() export class LrtService { constructor( private readonly kodiApiResponseFactory: KodiApiResponseFactory, private readonly lrtApiClient: LrtApiClient, + private readonly recentSearchesService: RecentSearchesService ) {} getMainMenu(): ApiResponse { @@ -19,7 +21,9 @@ export class LrtService { } private createMainMenu(apiResponse: ApiResponse): void { + //todo - refactor to 5 most recent searches + viskas? const items = { + 'lrt/recent': 'neseniai ieskoti', 'lrt/tema/vaikams': 'vaikams', 'lrt/tema/sportas': 'sportas', 'lrt/tema/kultura': 'kultura', @@ -82,4 +86,8 @@ export class LrtService { return apiResponse; } + + async getRecentSearches(): Promise { + return this.recentSearchesService.getRecentSearches('lrt', 'lrt/search'); + } } diff --git a/src/KodiApi/RecentSearches/recent-searches.module.ts b/src/KodiApi/RecentSearches/recent-searches.module.ts new file mode 100644 index 0000000..c1bfa6c --- /dev/null +++ b/src/KodiApi/RecentSearches/recent-searches.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { KodiApiResponseFactory } from '../kodi-api-response.factory'; +import { RecentSearchesService } from './recent-searches.service'; + +@Module({ + imports: [], + controllers: [], + providers: [RecentSearchesService, KodiApiResponseFactory], + exports: [RecentSearchesService], +}) +export class RecentSearchesModule {} diff --git a/src/KodiApi/RecentSearches/recent-searches.service.ts b/src/KodiApi/RecentSearches/recent-searches.service.ts new file mode 100644 index 0000000..6bd0e56 --- /dev/null +++ b/src/KodiApi/RecentSearches/recent-searches.service.ts @@ -0,0 +1,49 @@ +import { Injectable } from '@nestjs/common'; +import ApiResponse from '../Dto/api-response.dto'; +import { configService, ConfigService } from '../../config/config.service'; +import { KodiApiResponseFactory } from '../kodi-api-response.factory'; +import { join } from 'path'; +import { readFile, writeFile } from 'fs/promises'; + +@Injectable() +export class RecentSearchesService { + private readonly configService: ConfigService; + constructor( + private readonly kodiApiResponseFactory: KodiApiResponseFactory, + ) { + this.configService = configService; + } + async getRecentSearches(module: string, path: string): Promise { + const data = await this.getRecentSearchesData(module); + const response = this.kodiApiResponseFactory.createApiResponse(); + for (const recentSearch of data) { + response + .createItem() + .setLabel(recentSearch) + .setActionSearch(recentSearch) + .setPath(path); + } + + return response; + } + + async addRecentSearch(module: string, term: string): Promise { + const data = await this.getRecentSearchesData(module); + const index = data.indexOf(term); + if (index > -1) { + data.splice(index, 1); + } + data.push(term); + const rawData = JSON.stringify(data); + const filePath = join(this.configService.getRecentSearchesFolder(), module); + + await writeFile(filePath, rawData); + } + + private async getRecentSearchesData(module: string): Promise> { + const filePath = join(this.configService.getRecentSearchesFolder(), module); + const rawData = '' + (await readFile(filePath).catch(() => '[]')); + + return JSON.parse(rawData); + } +} diff --git a/src/TryOutModule/try.cotroller.ts b/src/TryOutModule/try.cotroller.ts index 53815bd..5911a16 100644 --- a/src/TryOutModule/try.cotroller.ts +++ b/src/TryOutModule/try.cotroller.ts @@ -1,14 +1,11 @@ import { Controller, Get } from '@nestjs/common'; import { EntityManager } from 'typeorm'; -import { configService } from '../config/config.service'; @Controller('try') export class TryController { constructor(private orm: EntityManager) {} @Get('') async main() { - //return await this.orm.query('select * from aliases'); - //return { hello: 'world' }; - return configService.getStaticFolder(); + return await this.orm.query('select * from aliases'); } } diff --git a/src/TryOutModule/try.module.ts b/src/TryOutModule/try.module.ts index ed4946a..dbd0c72 100644 --- a/src/TryOutModule/try.module.ts +++ b/src/TryOutModule/try.module.ts @@ -1,14 +1,12 @@ import { Module } from '@nestjs/common'; -import { TypeOrmModule } from '@nestjs/typeorm'; import { TryController } from './try.cotroller'; -import { configService } from '../config/config.service'; /** * Playground module for playing around */ @Module({ - imports: [TypeOrmModule.forRoot(configService.getTypeOrmConfig())], + imports: [], controllers: [TryController], providers: [], }) diff --git a/src/config/config.service.ts b/src/config/config.service.ts index a5131bb..301a498 100644 --- a/src/config/config.service.ts +++ b/src/config/config.service.ts @@ -5,7 +5,7 @@ import { join } from 'path'; env.config(); -class ConfigService { +export class ConfigService { public getEnv(key: string): any { return process.env[key]; } @@ -32,6 +32,10 @@ class ConfigService { return join(this.getRootPath(), this.getEnv('STATIC_SERVE_FOLDER')); } + public getRecentSearchesFolder(): string { + return join(this.getRootPath(), this.getEnv('STATIC_SERVE_FOLDER')); + } + private getRootPath(): string { return join(__dirname, '../..'); }