diff --git a/package.json b/package.json index 1e68012f..51bf83de 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/app/components/stream/status/action-bar/action-bar.component.ts b/src/app/components/stream/status/action-bar/action-bar.component.ts index 16a36390..274c302a 100644 --- a/src/app/components/stream/status/action-bar/action-bar.component.ts +++ b/src/app/components/stream/status/action-bar/action-bar.component.ts @@ -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; 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; + 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; 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; } diff --git a/src/app/components/stream/status/poll/poll.component.html b/src/app/components/stream/status/poll/poll.component.html index 2b91918e..6801c025 100644 --- a/src/app/components/stream/status/poll/poll.component.html +++ b/src/app/components/stream/status/poll/poll.component.html @@ -25,7 +25,7 @@ refresh -
·{{poll.votes_count}} votes· {{ poll.expires_at | timeLeft | async }}
+
·{{poll.votes_count}} votes·{{poll.voters_count}} people· {{ poll.expires_at | timeLeft | async }}
Error occured when retrieving the poll diff --git a/src/app/components/stream/status/poll/poll.component.ts b/src/app/components/stream/status/poll/poll.component.ts index 1009d666..ef227e2d 100644 --- a/src/app/components/stream/status/poll/poll.component.ts +++ b/src/app/components/stream/status/poll/poll.component.ts @@ -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; } diff --git a/src/app/services/models/mastodon.interfaces.ts b/src/app/services/models/mastodon.interfaces.ts index c1668a7a..8debd55a 100644 --- a/src/app/services/models/mastodon.interfaces.ts +++ b/src/app/services/models/mastodon.interfaces.ts @@ -223,6 +223,7 @@ export interface Poll { expired: boolean; multiple: boolean; votes_count: number; + voters_count: number; options: PollOption[]; voted: boolean; }