posting attachments now functionnal
This commit is contained in:
parent
ab38f8fc05
commit
1c7dd94452
|
@ -4,12 +4,13 @@ import { Store } from '@ngxs/store';
|
|||
import { Subscription, Observable } from 'rxjs';
|
||||
|
||||
import { MastodonService, VisibilityEnum } from '../../services/mastodon.service';
|
||||
import { Status } from '../../services/models/mastodon.interfaces';
|
||||
import { Status, Attachment } from '../../services/models/mastodon.interfaces';
|
||||
import { ToolsService } from '../../services/tools.service';
|
||||
import { NotificationService } from '../../services/notification.service';
|
||||
import { StatusWrapper } from '../../models/common.model';
|
||||
import { AccountInfo } from '../../states/accounts.state';
|
||||
import { InstancesInfoService } from '../../services/instances-info.service';
|
||||
import { MediaService } from '../../services/media.service';
|
||||
|
||||
|
||||
@Component({
|
||||
|
@ -52,7 +53,8 @@ export class CreateStatusComponent implements OnInit, OnDestroy {
|
|||
private readonly notificationService: NotificationService,
|
||||
private readonly toolsService: ToolsService,
|
||||
private readonly mastodonService: MastodonService,
|
||||
private readonly instancesInfoService: InstancesInfoService) {
|
||||
private readonly instancesInfoService: InstancesInfoService,
|
||||
private readonly mediaService: MediaService) {
|
||||
this.accounts$ = this.store.select(state => state.registeredaccounts.accounts);
|
||||
}
|
||||
|
||||
|
@ -150,6 +152,8 @@ export class CreateStatusComponent implements OnInit, OnDestroy {
|
|||
break;
|
||||
}
|
||||
|
||||
const mediaAttachments = this.mediaService.mediaSubject.value.map(x => x.attachment);
|
||||
|
||||
const acc = this.toolsService.getSelectedAccounts()[0];
|
||||
let usableStatus: Promise<Status>;
|
||||
if (this.statusReplyingToWrapper) {
|
||||
|
@ -160,7 +164,7 @@ export class CreateStatusComponent implements OnInit, OnDestroy {
|
|||
|
||||
usableStatus
|
||||
.then((status: Status) => {
|
||||
return this.sendStatus(acc, this.status, visibility, this.title, status);
|
||||
return this.sendStatus(acc, this.status, visibility, this.title, status, mediaAttachments);
|
||||
})
|
||||
.then((res: Status) => {
|
||||
this.title = '';
|
||||
|
@ -177,17 +181,23 @@ export class CreateStatusComponent implements OnInit, OnDestroy {
|
|||
return false;
|
||||
}
|
||||
|
||||
private sendStatus(account: AccountInfo, status: string, visibility: VisibilityEnum, title: string, previousStatus: Status): Promise<Status> {
|
||||
private sendStatus(account: AccountInfo, status: string, visibility: VisibilityEnum, title: string, previousStatus: Status, attachments: Attachment[]): Promise<Status> {
|
||||
let parsedStatus = this.parseStatus(status);
|
||||
let resultPromise = Promise.resolve(previousStatus);
|
||||
|
||||
for(let s of parsedStatus){
|
||||
for(let i = 0; i < parsedStatus.length; i++){
|
||||
let s = parsedStatus[i];
|
||||
resultPromise = resultPromise.then((pStatus: Status) => {
|
||||
let inReplyToId = null;
|
||||
if (pStatus) {
|
||||
inReplyToId = pStatus.id;
|
||||
}
|
||||
return this.mastodonService.postNewStatus(account, s, visibility, this.title, inReplyToId);
|
||||
|
||||
if(i === 0){
|
||||
return this.mastodonService.postNewStatus(account, s, visibility, title, inReplyToId, attachments.map(x => x.id));
|
||||
} else {
|
||||
return this.mastodonService.postNewStatus(account, s, visibility, title, inReplyToId, []);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -72,46 +72,40 @@ export class MastodonService {
|
|||
return origString.replace(regEx, "");
|
||||
};
|
||||
|
||||
postNewStatus(account: AccountInfo, status: string, visibility: VisibilityEnum, spoiler: string = null, in_reply_to_id: string = null): Promise<Status> {
|
||||
postNewStatus(account: AccountInfo, status: string, visibility: VisibilityEnum, spoiler: string = null, in_reply_to_id: string = null, mediaIds: string[]): Promise<Status> {
|
||||
const url = `https://${account.instance}${this.apiRoutes.postNewStatus}`;
|
||||
|
||||
const formData = new FormData();
|
||||
|
||||
formData.append('status', status);
|
||||
|
||||
// formData.append('media_ids', media_ids);
|
||||
// formData.append('language', '');
|
||||
const statusData = new StatusData();
|
||||
statusData.status = status;
|
||||
statusData.media_ids = mediaIds;
|
||||
|
||||
if (in_reply_to_id) {
|
||||
formData.append('in_reply_to_id', in_reply_to_id);
|
||||
statusData.in_reply_to_id = in_reply_to_id;
|
||||
}
|
||||
|
||||
if (spoiler) {
|
||||
formData.append('sensitive', 'true');
|
||||
formData.append('spoiler_text', spoiler);
|
||||
statusData.sensitive = true;
|
||||
statusData.spoiler_text = spoiler;
|
||||
}
|
||||
|
||||
switch (visibility) {
|
||||
case VisibilityEnum.Public:
|
||||
formData.append('visibility', 'public');
|
||||
statusData.visibility = 'public';
|
||||
break;
|
||||
case VisibilityEnum.Unlisted:
|
||||
formData.append('visibility', 'unlisted');
|
||||
statusData.visibility = 'unlisted';
|
||||
break;
|
||||
case VisibilityEnum.Private:
|
||||
formData.append('visibility', 'private');
|
||||
statusData.visibility = 'private';
|
||||
break;
|
||||
case VisibilityEnum.Direct:
|
||||
formData.append('visibility', 'direct');
|
||||
statusData.visibility = 'direct';
|
||||
break;
|
||||
default:
|
||||
formData.append('visibility', 'private');
|
||||
statusData.visibility = 'private';
|
||||
break;
|
||||
}
|
||||
|
||||
const headers = new HttpHeaders({ 'Authorization': `Bearer ${account.token.access_token}` });
|
||||
|
||||
return this.httpClient.post<Status>(url, formData, { headers: headers }).toPromise();
|
||||
return this.httpClient.post<Status>(url, statusData, { headers: headers }).toPromise();
|
||||
}
|
||||
|
||||
search(account: AccountInfo, query: string, resolve: boolean = false): Promise<Results> {
|
||||
|
@ -170,12 +164,15 @@ export class MastodonService {
|
|||
return this.httpClient.post<Status>(route, null, { headers: headers }).toPromise()
|
||||
}
|
||||
|
||||
|
||||
|
||||
getRelationships(account: AccountInfo, accountsToRetrieve: Account[]): Promise<Relationship[]> {
|
||||
let params = "?";
|
||||
accountsToRetrieve.forEach(x => {
|
||||
if (params.includes('id')) params += '&';
|
||||
params += `id[]=${x.id}`;
|
||||
});
|
||||
let params = `?${this.formatArray(accountsToRetrieve.map(x => x.id.toString()), 'id')}`;
|
||||
|
||||
// accountsToRetrieve.forEach(x => {
|
||||
// if (params.includes('id')) params += '&';
|
||||
// params += `id[]=${x.id}`;
|
||||
// });
|
||||
|
||||
const route = `https://${account.instance}${this.apiRoutes.getAccountRelationships}${params}`;
|
||||
const headers = new HttpHeaders({ 'Authorization': `Bearer ${account.token.access_token}` });
|
||||
|
@ -211,6 +208,15 @@ export class MastodonService {
|
|||
const headers = new HttpHeaders({ 'Authorization': `Bearer ${account.token.access_token}` });
|
||||
return this.httpClient.put<Attachment>(route, input, { headers: headers }).toPromise();
|
||||
}
|
||||
|
||||
private formatArray(data: string[], paramName: string): string {
|
||||
let result = '';
|
||||
data.forEach(x => {
|
||||
if (result.includes('paramName')) result += '&';
|
||||
result += `${paramName}[]=${x}`;
|
||||
});
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export enum VisibilityEnum {
|
||||
|
@ -219,4 +225,13 @@ export enum VisibilityEnum {
|
|||
Unlisted = 2,
|
||||
Private = 3,
|
||||
Direct = 4
|
||||
}
|
||||
|
||||
class StatusData {
|
||||
status: string;
|
||||
media_ids: string[];
|
||||
in_reply_to_id: string;
|
||||
sensitive: boolean;
|
||||
spoiler_text: string;
|
||||
visibility: string;
|
||||
}
|
Loading…
Reference in New Issue