From dbb5d8e71b5b8e799257094d4832bf13da113634 Mon Sep 17 00:00:00 2001 From: Nicolas Constant Date: Thu, 3 Aug 2023 03:27:21 -0400 Subject: [PATCH 01/35] added language service --- .../settings/settings.component.html | 5 ++ src/app/services/language.service.spec.ts | 12 +++++ src/app/services/language.service.ts | 47 +++++++++++++++++++ src/app/services/settings.service.ts | 5 ++ src/app/states/settings.state.ts | 9 +++- 5 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 src/app/services/language.service.spec.ts create mode 100644 src/app/services/language.service.ts diff --git a/src/app/components/floating-column/settings/settings.component.html b/src/app/components/floating-column/settings/settings.component.html index 45f8ecf7..28129ac7 100644 --- a/src/app/components/floating-column/settings/settings.component.html +++ b/src/app/components/floating-column/settings/settings.component.html @@ -50,6 +50,11 @@
+ +

Languages

+
+ +

Twitter Bridge

diff --git a/src/app/services/language.service.spec.ts b/src/app/services/language.service.spec.ts new file mode 100644 index 00000000..ee77cfbb --- /dev/null +++ b/src/app/services/language.service.spec.ts @@ -0,0 +1,12 @@ +import { TestBed } from '@angular/core/testing'; + +import { LanguageService } from './language.service'; + +xdescribe('LanguageService', () => { + beforeEach(() => TestBed.configureTestingModule({})); + + it('should be created', () => { + const service: LanguageService = TestBed.get(LanguageService); + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/language.service.ts b/src/app/services/language.service.ts new file mode 100644 index 00000000..d64b3ac0 --- /dev/null +++ b/src/app/services/language.service.ts @@ -0,0 +1,47 @@ +import { Injectable } from '@angular/core'; +import { ILanguage } from '../states/settings.state'; +import { SettingsService } from './settings.service'; + +@Injectable({ + providedIn: 'root' +}) +export class LanguageService { + constructor(private settingsService: SettingsService) { + } + + getConfiguredLanguages(): ILanguage[] { + return this.settingsService.getSettings().configuredLanguages; + } + + addLanguage(lang: ILanguage){ + var settings = this.settingsService.getSettings(); + settings.configuredLanguages.push(lang); + this.settingsService.saveSettings(settings); + } + + removeLanguage(lang: ILanguage){ + var settings = this.settingsService.getSettings(); + settings.configuredLanguages = settings.configuredLanguages.filter(x => x.iso639 !== lang.iso639); + this.settingsService.saveSettings(settings); + } + + searchLanguage(input: string): ILanguage[] { + const avLangs = this.getAllAvaialbleLaguages(); + const found = avLangs.filter(x => x.iso639 === input || x.name.toLowerCase().includes(input.toLowerCase())); + return found; + } + + private getAllAvaialbleLaguages(): Language[] { + //TODO: Add more languages + return [ + new Language("en", "English"), + new Language("fr", "French"), + new Language("de", "German") + ]; + } +} + +export class Language { + constructor(public iso639: string, public name: string){ + } +} diff --git a/src/app/services/settings.service.ts b/src/app/services/settings.service.ts index b0727fa5..67e98681 100644 --- a/src/app/services/settings.service.ts +++ b/src/app/services/settings.service.ts @@ -33,6 +33,11 @@ export class SettingsService { this.saveSettings(settings); } + if(!settings.configuredLanguages){ + settings.configuredLanguages = []; + this.saveSettings(settings); + } + return settings; } diff --git a/src/app/states/settings.state.ts b/src/app/states/settings.state.ts index 8fbb7afd..5bac7ca5 100644 --- a/src/app/states/settings.state.ts +++ b/src/app/states/settings.state.ts @@ -80,7 +80,14 @@ export class GlobalSettings { columnSwitchingWinAlt = false; - accountSettings: AccountSettings[] = []; + accountSettings: AccountSettings[] = []; + + configuredLanguages: ILanguage[] = []; +} + +export interface ILanguage { + iso639: string; + name: string; } export interface SettingsStateModel { From 98e7d54c3320b805c96bc9b171682d2e33baf0e6 Mon Sep 17 00:00:00 2001 From: Nicolas Constant Date: Thu, 3 Aug 2023 18:45:55 -0400 Subject: [PATCH 02/35] starting lang ui settings --- .../settings/settings.component.html | 10 +++++++- .../settings/settings.component.ts | 25 ++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/app/components/floating-column/settings/settings.component.html b/src/app/components/floating-column/settings/settings.component.html index 28129ac7..f4ef215a 100644 --- a/src/app/components/floating-column/settings/settings.component.html +++ b/src/app/components/floating-column/settings/settings.component.html @@ -52,8 +52,16 @@

Languages

+
+ {{ l.iso639 }} + +
- + +
+
+ {{ l.iso639 }} +

Twitter Bridge

diff --git a/src/app/components/floating-column/settings/settings.component.ts b/src/app/components/floating-column/settings/settings.component.ts index 7c364388..df88483c 100644 --- a/src/app/components/floating-column/settings/settings.component.ts +++ b/src/app/components/floating-column/settings/settings.component.ts @@ -6,10 +6,11 @@ import { environment } from '../../../../environments/environment'; import { ToolsService, InstanceType } from '../../../services/tools.service'; import { UserNotificationService, NotificationSoundDefinition } from '../../../services/user-notification.service'; import { ServiceWorkerService } from '../../../services/service-worker.service'; -import { ContentWarningPolicy, ContentWarningPolicyEnum, TimeLineModeEnum, TimeLineHeaderEnum } from '../../../states/settings.state'; +import { ContentWarningPolicy, ContentWarningPolicyEnum, TimeLineModeEnum, TimeLineHeaderEnum, ILanguage } from '../../../states/settings.state'; import { NotificationService } from '../../../services/notification.service'; import { NavigationService } from '../../../services/navigation.service'; import { SettingsService } from '../../../services/settings.service'; +import { LanguageService } from '../../../services/language.service'; @Component({ selector: 'app-settings', @@ -77,6 +78,7 @@ export class SettingsComponent implements OnInit { } constructor( + private readonly languageService: LanguageService, private readonly settingsService: SettingsService, private readonly navigationService: NavigationService, private formBuilder: FormBuilder, @@ -129,6 +131,27 @@ export class SettingsComponent implements OnInit { this.twitterBridgeEnabled = settings.twitterBridgeEnabled; this.twitterBridgeInstance = settings.twitterBridgeInstance; + + this.configuredLangs = this.languageService.getConfiguredLanguages(); + } + + configuredLangs: ILanguage[] = []; + searchedLangs: ILanguage[] = []; + onSearchLang(input: string) { + console.warn(input); + this.searchedLangs = this.languageService.searchLanguage(input); + } + + onAddLang(lang: ILanguage): boolean { + this.configuredLangs.push(lang); + this.languageService.addLanguage(lang); + return false; + } + + onRemoveLang(lang: ILanguage): boolean { + this.configuredLangs = this.configuredLangs.filter(x => x.iso639 !== lang.iso639); + this.languageService.removeLanguage(lang); + return false; } onShortcutChange(id: ColumnShortcut) { From 503cb6c9d42aeaa3af8de122580436bbf1dc4587 Mon Sep 17 00:00:00 2001 From: Nicolas Constant Date: Thu, 3 Aug 2023 22:44:14 -0400 Subject: [PATCH 03/35] fix language saving --- .../floating-column/settings/settings.component.html | 2 +- .../floating-column/settings/settings.component.ts | 9 +++++++++ src/app/services/language.service.ts | 3 ++- src/app/states/settings.state.ts | 1 + 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/app/components/floating-column/settings/settings.component.html b/src/app/components/floating-column/settings/settings.component.html index f4ef215a..869973b4 100644 --- a/src/app/components/floating-column/settings/settings.component.html +++ b/src/app/components/floating-column/settings/settings.component.html @@ -57,7 +57,7 @@
- +
{{ l.iso639 }} diff --git a/src/app/components/floating-column/settings/settings.component.ts b/src/app/components/floating-column/settings/settings.component.ts index df88483c..d275e395 100644 --- a/src/app/components/floating-column/settings/settings.component.ts +++ b/src/app/components/floating-column/settings/settings.component.ts @@ -137,14 +137,23 @@ export class SettingsComponent implements OnInit { configuredLangs: ILanguage[] = []; searchedLangs: ILanguage[] = []; + + searchLang: string; + onSearchLang(input: string) { console.warn(input); this.searchedLangs = this.languageService.searchLanguage(input); } onAddLang(lang: ILanguage): boolean { + if(this.configuredLangs.find(x => x.iso639 === lang.iso639)) return false; + this.configuredLangs.push(lang); this.languageService.addLanguage(lang); + + this.searchLang = ''; + this.searchedLangs.length = 0; + return false; } diff --git a/src/app/services/language.service.ts b/src/app/services/language.service.ts index d64b3ac0..a7b818fc 100644 --- a/src/app/services/language.service.ts +++ b/src/app/services/language.service.ts @@ -10,7 +10,8 @@ export class LanguageService { } getConfiguredLanguages(): ILanguage[] { - return this.settingsService.getSettings().configuredLanguages; + const langs = this.settingsService.getSettings().configuredLanguages; + return langs; } addLanguage(lang: ILanguage){ diff --git a/src/app/states/settings.state.ts b/src/app/states/settings.state.ts index 5bac7ca5..2c0cc76a 100644 --- a/src/app/states/settings.state.ts +++ b/src/app/states/settings.state.ts @@ -178,6 +178,7 @@ export class SettingsState { newSettings.autoFollowOnListEnabled = oldSettings.autoFollowOnListEnabled; newSettings.twitterBridgeEnabled = oldSettings.twitterBridgeEnabled; newSettings.twitterBridgeInstance = oldSettings.twitterBridgeInstance; + newSettings.configuredLanguages = oldSettings.configuredLanguages; return newSettings; } From 18d6b8d96c0607b40c0a6ac289425279401b0f5b Mon Sep 17 00:00:00 2001 From: Nicolas Constant Date: Fri, 4 Aug 2023 00:48:38 -0400 Subject: [PATCH 04/35] added lang change --- .../create-status.component.html | 4 +++ .../create-status.component.scss | 26 +++++++++++++++++++ .../settings/settings.component.html | 6 ++--- .../settings/settings.component.ts | 2 +- src/app/services/language.service.ts | 11 +++++++- 5 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/app/components/create-status/create-status.component.html b/src/app/components/create-status/create-status.component.html index e6a5b1a2..a3b412ba 100644 --- a/src/app/components/create-status/create-status.component.html +++ b/src/app/components/create-status/create-status.component.html @@ -7,6 +7,10 @@ + + EN + + diff --git a/src/app/components/floating-column/search/search.component.html b/src/app/components/floating-column/search/search.component.html index f182072c..7b884115 100644 --- a/src/app/components/floating-column/search/search.component.html +++ b/src/app/components/floating-column/search/search.component.html @@ -5,7 +5,7 @@
+ name="searchHandle" placeholder="Search" autocomplete="off" (keydown.escape)="search.blur()"/>
From ec0bed460651e842dce8e1b5e80d5d6c4c2af009 Mon Sep 17 00:00:00 2001 From: Nicolas Constant Date: Sun, 6 Aug 2023 17:39:28 -0400 Subject: [PATCH 31/35] wording: expand CW instead of hide, fix #459 --- .../components/floating-column/settings/settings.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/components/floating-column/settings/settings.component.html b/src/app/components/floating-column/settings/settings.component.html index 0a151aa9..b6ffe302 100644 --- a/src/app/components/floating-column/settings/settings.component.html +++ b/src/app/components/floating-column/settings/settings.component.html @@ -100,7 +100,7 @@ - +
but add CW on content containing:
From 92a3ac6ae39c003aaa8292f897bd72013362cadf Mon Sep 17 00:00:00 2001 From: Nicolas Constant Date: Mon, 7 Aug 2023 01:18:08 -0400 Subject: [PATCH 32/35] road to 1.5.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4edbdb21..8705cc8d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sengi", - "version": "1.4.0", + "version": "1.5.0", "license": "AGPL-3.0-or-later", "main": "main-electron.js", "description": "A multi-account desktop client for Mastodon and Pleroma", From 4a2b408c1b821c8709124205f49297d11bb85525 Mon Sep 17 00:00:00 2001 From: Nicolas Constant Date: Mon, 7 Aug 2023 19:47:54 -0400 Subject: [PATCH 33/35] added some translation cleanup --- .../databinded-text.component.ts | 4 ++ .../stream/status/status.component.html | 2 +- .../stream/status/status.component.ts | 41 ++++++++++++++----- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/app/components/stream/status/databinded-text/databinded-text.component.ts b/src/app/components/stream/status/databinded-text/databinded-text.component.ts index 1740bf32..f5de70de 100644 --- a/src/app/components/stream/status/databinded-text/databinded-text.component.ts +++ b/src/app/components/stream/status/databinded-text/databinded-text.component.ts @@ -205,6 +205,10 @@ export class DatabindedTextComponent implements OnInit { } ngAfterViewInit() { + this.processEventBindings(); + } + + processEventBindings(){ for (const hashtag of this.hashtags) { let classname = this.getClassNameForHastag(hashtag); let els = this.contentElement.nativeElement.querySelectorAll(`.${classname}`); diff --git a/src/app/components/stream/status/status.component.html b/src/app/components/stream/status/status.component.html index 9db3c0e2..7257da73 100644 --- a/src/app/components/stream/status/status.component.html +++ b/src/app/components/stream/status/status.component.html @@ -109,7 +109,7 @@ sensitive content - diff --git a/src/app/components/stream/status/status.component.ts b/src/app/components/stream/status/status.component.ts index 8b08b397..6782037f 100644 --- a/src/app/components/stream/status/status.component.ts +++ b/src/app/components/stream/status/status.component.ts @@ -9,7 +9,7 @@ import { StatusWrapper } from '../../../models/common.model'; import { EmojiConverter, EmojiTypeEnum } from '../../../tools/emoji.tools'; import { ContentWarningPolicyEnum } from '../../../states/settings.state'; import { StatusesStateService, StatusState } from "../../../services/statuses-state.service"; - +import { DatabindedTextComponent } from "./databinded-text/databinded-text.component"; @Component({ selector: "app-status", @@ -107,27 +107,27 @@ export class StatusComponent implements OnInit { ngOnInit() { this.statusesStateServiceSub = this.statusesStateService.stateNotification.subscribe(notification => { - if(this._statusWrapper.status.url === notification.statusId && notification.isEdited) { + if (this._statusWrapper.status.url === notification.statusId && notification.isEdited) { this.statusWrapper = notification.editedStatus; } }); } - ngOnDestroy(){ - if(this.statusesStateServiceSub) this.statusesStateServiceSub.unsubscribe(); + ngOnDestroy() { + if (this.statusesStateServiceSub) this.statusesStateServiceSub.unsubscribe(); } - + private ensureMentionAreDisplayed(data: string): string { const mentions = this.displayedStatus.mentions; - if(!mentions || mentions.length === 0) return data; - + if (!mentions || mentions.length === 0) return data; + let textMentions = ''; for (const m of mentions) { - if(!data.includes(m.url)){ + if (!data.includes(m.url)) { textMentions += `@${m.username} ` } } - if(textMentions !== ''){ + if (textMentions !== '') { data = textMentions + data; } return data; @@ -157,9 +157,30 @@ export class StatusComponent implements OnInit { changeCw(cwIsActive: boolean) { this.isContentWarned = cwIsActive; } + + + @ViewChild('databindedtext') public databindedText: DatabindedTextComponent; onTranslation(translation: Translation) { - this.statusContent = translation.content; + let statusContent = translation.content; + + // clean up a bit some issues (not reliable) + while (statusContent.includes('@')) { + statusContent = statusContent.replace('@', '@'); + } + while (statusContent.includes('h