2018-10-31 05:02:03 +01:00
|
|
|
import { Injectable } from '@angular/core';
|
|
|
|
import { Store } from '@ngxs/store';
|
|
|
|
|
|
|
|
import { AccountInfo } from '../states/accounts.state';
|
2018-11-03 02:35:33 +01:00
|
|
|
import { MastodonService } from './mastodon.service';
|
2019-02-12 04:28:15 +01:00
|
|
|
import { Account, Results, Status } from "./models/mastodon.interfaces";
|
2019-03-06 04:46:50 +01:00
|
|
|
import { StatusWrapper } from '../models/common.model';
|
2019-04-01 00:30:38 +02:00
|
|
|
import { AccountSettings, SaveAccountSettings } from '../states/settings.state';
|
2018-10-31 05:02:03 +01:00
|
|
|
|
|
|
|
@Injectable({
|
|
|
|
providedIn: 'root'
|
|
|
|
})
|
|
|
|
export class ToolsService {
|
2019-04-01 00:30:38 +02:00
|
|
|
|
2018-11-03 02:35:33 +01:00
|
|
|
constructor(
|
|
|
|
private readonly mastodonService: MastodonService,
|
|
|
|
private readonly store: Store) { }
|
2018-10-31 05:02:03 +01:00
|
|
|
|
|
|
|
|
|
|
|
getSelectedAccounts(): AccountInfo[] {
|
|
|
|
var regAccounts = <AccountInfo[]>this.store.snapshot().registeredaccounts.accounts;
|
|
|
|
return regAccounts.filter(x => x.isSelected);
|
|
|
|
}
|
2019-04-01 00:30:38 +02:00
|
|
|
|
|
|
|
getAccountSettings(account: AccountInfo): AccountSettings {
|
|
|
|
var accountsSettings = <AccountSettings[]>this.store.snapshot().globalsettings.settings.accountSettings;
|
|
|
|
let accountSettings = accountsSettings.find(x => x.accountId === account.id);
|
|
|
|
if(!accountSettings){
|
|
|
|
accountSettings = new AccountSettings();
|
|
|
|
accountSettings.accountId = account.id;
|
|
|
|
this.saveAccountSettings(accountSettings);
|
|
|
|
}
|
|
|
|
return accountSettings;
|
|
|
|
}
|
|
|
|
|
|
|
|
saveAccountSettings(accountSettings: AccountSettings){
|
|
|
|
this.store.dispatch([
|
|
|
|
new SaveAccountSettings(accountSettings)
|
|
|
|
])
|
|
|
|
}
|
2018-10-31 05:02:03 +01:00
|
|
|
|
2018-11-03 02:35:33 +01:00
|
|
|
findAccount(account: AccountInfo, accountName: string): Promise<Account> {
|
|
|
|
return this.mastodonService.search(account, accountName, true)
|
|
|
|
.then((result: Results) => {
|
2018-11-03 19:39:32 +01:00
|
|
|
if(accountName[0] === '@') accountName = accountName.substr(1);
|
|
|
|
|
2019-04-03 06:08:50 +02:00
|
|
|
const foundAccount = result.accounts.find(
|
2018-11-03 02:35:33 +01:00
|
|
|
x => x.acct.toLowerCase() === accountName.toLowerCase()
|
2019-04-03 06:08:50 +02:00
|
|
|
|| x.acct.toLowerCase().split('@')[0] === accountName.toLowerCase().split('@')[0]
|
|
|
|
);
|
2018-11-03 02:35:33 +01:00
|
|
|
return foundAccount;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-02-12 04:28:15 +01:00
|
|
|
getStatusUsableByAccount(account: AccountInfo, originalStatus: StatusWrapper): Promise<Status>{
|
|
|
|
const isProvider = originalStatus.provider.id === account.id;
|
|
|
|
|
|
|
|
let statusPromise: Promise<Status> = Promise.resolve(originalStatus.status);
|
|
|
|
|
|
|
|
if (!isProvider) {
|
|
|
|
statusPromise = statusPromise.then((foreignStatus: Status) => {
|
|
|
|
const statusUrl = foreignStatus.url;
|
2019-03-29 00:52:55 +01:00
|
|
|
return this.mastodonService.search(account, statusUrl, true)
|
2019-02-12 04:28:15 +01:00
|
|
|
.then((results: Results) => {
|
|
|
|
return results.statuses[0];
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
return statusPromise;
|
|
|
|
}
|
2019-04-01 00:30:38 +02:00
|
|
|
|
2019-02-19 04:44:21 +01:00
|
|
|
}
|
2019-02-12 04:28:15 +01:00
|
|
|
|
2019-02-19 04:44:21 +01:00
|
|
|
export class OpenThreadEvent {
|
|
|
|
constructor(
|
|
|
|
public status: Status,
|
|
|
|
public sourceAccount: AccountInfo
|
|
|
|
) {
|
|
|
|
}
|
2018-10-31 05:02:03 +01:00
|
|
|
}
|