commit
ba5fead320
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "sengi",
|
||||
"version": "1.1.0",
|
||||
"version": "1.1.1",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"main": "main-electron.js",
|
||||
"description": "A multi-account desktop client for Mastodon and Pleroma",
|
||||
|
|
|
@ -102,13 +102,13 @@ export class ActionBarComponent implements OnInit, OnDestroy {
|
|||
this.statusStateSub = this.statusStateService.stateNotification.subscribe((state: StatusState) => {
|
||||
if (state && state.statusId === this.displayedStatus.url) {
|
||||
|
||||
if (state.isFavorited) {
|
||||
if (state.isFavorited !== null) {
|
||||
this.favoriteStatePerAccountId[state.accountId] = state.isFavorited;
|
||||
}
|
||||
if (state.isRebloged) {
|
||||
if (state.isRebloged !== null) {
|
||||
this.bootedStatePerAccountId[state.accountId] = state.isRebloged;
|
||||
}
|
||||
if (state.isBookmarked) {
|
||||
if (state.isBookmarked !== null) {
|
||||
this.bookmarkStatePerAccountId[state.accountId] = state.isBookmarked;
|
||||
}
|
||||
|
||||
|
@ -138,7 +138,7 @@ export class ActionBarComponent implements OnInit, OnDestroy {
|
|||
private checkStatus(accounts: AccountInfo[]): void {
|
||||
const status = this.statusWrapper.status;
|
||||
const provider = this.statusWrapper.provider;
|
||||
this.selectedAccounts = accounts.filter(x => x.isSelected);
|
||||
this.selectedAccounts = accounts.filter(x => x.isSelected);
|
||||
|
||||
if (!this.statusWrapper.isRemote) {
|
||||
this.isProviderSelected = this.selectedAccounts.filter(x => x.id === provider.id).length > 0;
|
||||
|
@ -184,13 +184,18 @@ export class ActionBarComponent implements OnInit, OnDestroy {
|
|||
return false;
|
||||
}
|
||||
|
||||
private boostPromise: Promise<any>;
|
||||
boost(): boolean {
|
||||
if (this.boostIsLoading) return;
|
||||
if (!this.boostPromise) {
|
||||
this.boostPromise = Promise.resolve(true);
|
||||
}
|
||||
|
||||
this.boostIsLoading = true;
|
||||
const account = this.toolsService.getSelectedAccounts()[0];
|
||||
const usableStatus = this.toolsService.getStatusUsableByAccount(account, this.statusWrapper);
|
||||
usableStatus
|
||||
const account = this.toolsService.getSelectedAccounts()[0];
|
||||
this.boostPromise = this.boostPromise
|
||||
.then(() => {
|
||||
this.boostIsLoading = true;
|
||||
return this.toolsService.getStatusUsableByAccount(account, this.statusWrapper);
|
||||
})
|
||||
.then((status: Status) => {
|
||||
if (this.isBoosted && status.reblogged) {
|
||||
return this.mastodonService.unreblog(account, status);
|
||||
|
@ -219,18 +224,24 @@ export class ActionBarComponent implements OnInit, OnDestroy {
|
|||
.then(() => {
|
||||
this.statusStateService.statusReblogStatusChanged(this.displayedStatus.url, account.id, this.bootedStatePerAccountId[account.id]);
|
||||
this.boostIsLoading = false;
|
||||
this.boostPromise = null;
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
favorite(): boolean {
|
||||
if (this.favoriteIsLoading) return;
|
||||
|
||||
this.favoriteIsLoading = true;
|
||||
private favoritePromise: Promise<any>;
|
||||
favorite(): boolean {
|
||||
if (!this.favoritePromise) {
|
||||
this.favoritePromise = Promise.resolve(true);
|
||||
}
|
||||
|
||||
const account = this.toolsService.getSelectedAccounts()[0];
|
||||
const usableStatus = this.toolsService.getStatusUsableByAccount(account, this.statusWrapper);
|
||||
usableStatus
|
||||
this.favoritePromise = this.favoritePromise
|
||||
.then(() => {
|
||||
this.favoriteIsLoading = true;
|
||||
return this.toolsService.getStatusUsableByAccount(account, this.statusWrapper);
|
||||
})
|
||||
.then((status: Status) => {
|
||||
if (this.isFavorited && status.favourited) {
|
||||
return this.mastodonService.unfavorite(account, status);
|
||||
|
@ -254,19 +265,24 @@ export class ActionBarComponent implements OnInit, OnDestroy {
|
|||
.then(() => {
|
||||
this.statusStateService.statusFavoriteStatusChanged(this.displayedStatus.url, account.id, this.favoriteStatePerAccountId[account.id]);
|
||||
this.favoriteIsLoading = false;
|
||||
this.favoritePromise = null;
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private bookmarkPromise: Promise<any>;
|
||||
bookmark(): boolean {
|
||||
if (this.bookmarkingIsLoading) return;
|
||||
|
||||
this.bookmarkingIsLoading = true;
|
||||
if (!this.bookmarkPromise) {
|
||||
this.bookmarkPromise = Promise.resolve(true);
|
||||
}
|
||||
|
||||
const account = this.toolsService.getSelectedAccounts()[0];
|
||||
const usableStatus = this.toolsService.getStatusUsableByAccount(account, this.statusWrapper);
|
||||
usableStatus
|
||||
this.bookmarkPromise = this.bookmarkPromise
|
||||
.then(() => {
|
||||
this.bookmarkingIsLoading = true;
|
||||
return this.toolsService.getStatusUsableByAccount(account, this.statusWrapper);
|
||||
})
|
||||
.then((status: Status) => {
|
||||
if (this.isBookmarked && status.bookmarked) {
|
||||
return this.mastodonService.unbookmark(account, status);
|
||||
|
@ -290,15 +306,9 @@ export class ActionBarComponent implements OnInit, OnDestroy {
|
|||
.then(() => {
|
||||
this.statusStateService.statusBookmarkStatusChanged(this.displayedStatus.url, account.id, this.bookmarkStatePerAccountId[account.id]);
|
||||
this.bookmarkingIsLoading = false;
|
||||
this.bookmarkPromise = null;
|
||||
});
|
||||
|
||||
|
||||
|
||||
// setTimeout(() => {
|
||||
// this.isBookmarked = !this.isBookmarked;
|
||||
// this.bookmarkingIsLoading = false;
|
||||
// }, 2000);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<button href *ngIf="!poll.voted && !poll.expired && !pollLocked" class="btn btn-sm btn-custom-primary poll__btn-vote"
|
||||
title="don't boo, vote!" (click)="vote()">Vote</button>
|
||||
<a href class="poll__refresh" *ngIf="(poll.voted || poll.expired) && !pollLocked" title="refresh poll" (click)="refresh()">refresh</a>
|
||||
<div class="poll__statistics"><span *ngIf="(poll.voted || poll.expired) && !pollLocked" class="poll__separator">·</span>{{poll.votes_count}} votes<span *ngIf="!poll.expired" class="poll__separator" title="{{ poll.expires_at | timeLeft | async }}">· {{ poll.expires_at | timeLeft | async }}</span></div>
|
||||
<div class="poll__statistics"><span *ngIf="(poll.voted || poll.expired) && !pollLocked" class="poll__separator">·</span>{{poll.votes_count}} votes<span *ngIf="poll.voters_count > 0" class="poll__separator">·</span><span *ngIf="poll.voters_count > 0">{{poll.voters_count}} people</span><span *ngIf="!poll.expired" class="poll__separator" title="{{ poll.expires_at | timeLeft | async }}">· {{ poll.expires_at | timeLeft | async }}</span></div>
|
||||
</div>
|
||||
<div class="poll__error" *ngIf="errorOccuredWhenRetrievingPoll">
|
||||
Error occured when retrieving the poll
|
||||
|
|
|
@ -48,7 +48,7 @@ export class PollComponent implements OnInit {
|
|||
const maxVotes = Math.max(...this.poll.options.map(x => x.votes_count));
|
||||
let i = 0;
|
||||
for (let opt of this.poll.options) {
|
||||
let optWrapper = new PollOptionWrapper(i, opt, this.poll.votes_count, opt.votes_count === maxVotes);
|
||||
let optWrapper = new PollOptionWrapper(i, opt, this.poll.votes_count, this.poll.voters_count, opt.votes_count === maxVotes);
|
||||
this.options.push(optWrapper);
|
||||
i++;
|
||||
}
|
||||
|
@ -183,14 +183,19 @@ export class PollComponent implements OnInit {
|
|||
}
|
||||
|
||||
class PollOptionWrapper implements PollOption {
|
||||
constructor(index: number, option: PollOption, totalVotes: number, isMax: boolean) {
|
||||
constructor(index: number, option: PollOption, totalVotes: number, totalVoters: number, isMax: boolean) {
|
||||
let votesDivider = totalVotes;
|
||||
if(totalVoters && totalVoters > 0){
|
||||
votesDivider = totalVoters;
|
||||
}
|
||||
|
||||
this.id = index;
|
||||
this.title = option.title;
|
||||
this.votes_count = option.votes_count;
|
||||
if (totalVotes === 0) {
|
||||
this.percentage = '0';
|
||||
} else {
|
||||
this.percentage = ((this.votes_count / totalVotes) * 100).toFixed(0);
|
||||
this.percentage = ((this.votes_count / votesDivider) * 100).toFixed(0);
|
||||
}
|
||||
this.isMax = isMax;
|
||||
}
|
||||
|
|
|
@ -223,6 +223,7 @@ export interface Poll {
|
|||
expired: boolean;
|
||||
multiple: boolean;
|
||||
votes_count: number;
|
||||
voters_count: number;
|
||||
options: PollOption[];
|
||||
voted: boolean;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue