2019-03-07 06:31:06 +01:00
|
|
|
import { Injectable } from '@angular/core';
|
|
|
|
|
2019-10-02 06:14:40 +02:00
|
|
|
import { VisibilityEnum } from './mastodon.service';
|
|
|
|
import { MastodonWrapperService } from './mastodon-wrapper.service';
|
2019-03-11 05:31:56 +01:00
|
|
|
import { Instance, Account } from './models/mastodon.interfaces';
|
|
|
|
import { AccountInfo } from '../states/accounts.state';
|
2019-03-07 06:31:06 +01:00
|
|
|
|
|
|
|
@Injectable({
|
|
|
|
providedIn: 'root'
|
|
|
|
})
|
|
|
|
export class InstancesInfoService {
|
2019-03-11 05:31:56 +01:00
|
|
|
private defaultMaxChars = 500;
|
|
|
|
private cachedMaxInstanceChar: { [id: string]: Promise<number>; } = {};
|
|
|
|
private cachedDefaultPrivacy: { [id: string]: Promise<VisibilityEnum>; } = {};
|
2019-03-07 06:31:06 +01:00
|
|
|
|
2019-10-02 06:14:40 +02:00
|
|
|
constructor(private mastodonService: MastodonWrapperService) { }
|
2019-03-07 06:31:06 +01:00
|
|
|
|
2019-03-11 05:31:56 +01:00
|
|
|
getMaxStatusChars(instance: string): Promise<number> {
|
|
|
|
if (!this.cachedMaxInstanceChar[instance]) {
|
2019-03-07 06:31:06 +01:00
|
|
|
this.cachedMaxInstanceChar[instance] = this.mastodonService.getInstance(instance)
|
2019-03-11 05:31:56 +01:00
|
|
|
.then((instance: Instance) => {
|
|
|
|
if (instance.max_toot_chars) {
|
2019-03-07 06:31:06 +01:00
|
|
|
return instance.max_toot_chars;
|
|
|
|
} else {
|
|
|
|
return this.defaultMaxChars;
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.catch(() => {
|
|
|
|
return this.defaultMaxChars;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
return this.cachedMaxInstanceChar[instance];
|
|
|
|
}
|
2019-03-11 05:31:56 +01:00
|
|
|
|
|
|
|
getDefaultPrivacy(account: AccountInfo): Promise<VisibilityEnum> {
|
|
|
|
const instance = account.instance;
|
|
|
|
if (!this.cachedDefaultPrivacy[instance]) {
|
|
|
|
this.cachedDefaultPrivacy[instance] = this.mastodonService.retrieveAccountDetails(account)
|
|
|
|
.then((accountDetails: Account) => {
|
|
|
|
switch (accountDetails.source.privacy) {
|
|
|
|
case 'public':
|
|
|
|
return VisibilityEnum.Public;
|
|
|
|
case 'unlisted':
|
|
|
|
return VisibilityEnum.Unlisted;
|
|
|
|
case 'private':
|
|
|
|
return VisibilityEnum.Private;
|
|
|
|
case 'direct':
|
|
|
|
return VisibilityEnum.Direct;
|
|
|
|
default:
|
|
|
|
return VisibilityEnum.Public;
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.catch(() => {
|
|
|
|
return VisibilityEnum.Public;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
return this.cachedDefaultPrivacy[instance];
|
|
|
|
}
|
2019-03-07 06:31:06 +01:00
|
|
|
}
|