Migrate all pinning checks and actions into PinningUtils
(#12964)
This commit is contained in:
parent
26399237f6
commit
5bfbca9eb0
8 changed files with 146 additions and 67 deletions
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
import { MatrixEvent, EventType, M_POLL_START, MatrixClient, EventTimeline } from "matrix-js-sdk/src/matrix";
|
||||
import { MatrixEvent, EventType, M_POLL_START, MatrixClient, EventTimeline, Room } from "matrix-js-sdk/src/matrix";
|
||||
|
||||
import { isContentActionable } from "./EventUtils";
|
||||
import SettingsStore from "../settings/SettingsStore";
|
||||
|
@ -71,23 +71,53 @@ export default class PinningUtils {
|
|||
}
|
||||
|
||||
/**
|
||||
* Determines if the given event may be pinned or unpinned by the current user.
|
||||
* This checks if the user has the necessary permissions to pin or unpin the event, and if the event is pinnable.
|
||||
* Determines if the given event may be pinned or unpinned by the current user
|
||||
* It doesn't check if the event is pinnable or unpinnable.
|
||||
* @param matrixClient
|
||||
* @param mxEvent
|
||||
* @private
|
||||
*/
|
||||
public static canPinOrUnpin(matrixClient: MatrixClient, mxEvent: MatrixEvent): boolean {
|
||||
private static canPinOrUnpin(matrixClient: MatrixClient, mxEvent: MatrixEvent): boolean {
|
||||
if (!SettingsStore.getValue("feature_pinning")) return false;
|
||||
if (!isContentActionable(mxEvent)) return false;
|
||||
|
||||
const room = matrixClient.getRoom(mxEvent.getRoomId());
|
||||
if (!room) return false;
|
||||
|
||||
return PinningUtils.userHasPinOrUnpinPermission(matrixClient, room);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if the given event may be pinned by the current user.
|
||||
* This checks if the user has the necessary permissions to pin or unpin the event, and if the event is pinnable.
|
||||
* @param matrixClient
|
||||
* @param mxEvent
|
||||
*/
|
||||
public static canPin(matrixClient: MatrixClient, mxEvent: MatrixEvent): boolean {
|
||||
return PinningUtils.canPinOrUnpin(matrixClient, mxEvent) && PinningUtils.isPinnable(mxEvent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if the given event may be unpinned by the current user.
|
||||
* This checks if the user has the necessary permissions to pin or unpin the event, and if the event is unpinnable.
|
||||
* @param matrixClient
|
||||
* @param mxEvent
|
||||
*/
|
||||
public static canUnpin(matrixClient: MatrixClient, mxEvent: MatrixEvent): boolean {
|
||||
return PinningUtils.canPinOrUnpin(matrixClient, mxEvent) && PinningUtils.isUnpinnable(mxEvent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if the current user has permission to pin or unpin events in the given room.
|
||||
* @param matrixClient
|
||||
* @param room
|
||||
*/
|
||||
public static userHasPinOrUnpinPermission(matrixClient: MatrixClient, room: Room): boolean {
|
||||
return Boolean(
|
||||
room
|
||||
.getLiveTimeline()
|
||||
.getState(EventTimeline.FORWARDS)
|
||||
?.mayClientSendStateEvent(EventType.RoomPinnedEvents, matrixClient) && PinningUtils.isPinnable(mxEvent),
|
||||
?.mayClientSendStateEvent(EventType.RoomPinnedEvents, matrixClient),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -128,4 +158,13 @@ export default class PinningUtils {
|
|||
roomAccountDataPromise,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unpin all events in the given room.
|
||||
* @param matrixClient
|
||||
* @param roomId
|
||||
*/
|
||||
public static async unpinAllEvents(matrixClient: MatrixClient, roomId: string): Promise<void> {
|
||||
await matrixClient.sendStateEvent(roomId, EventType.RoomPinnedEvents, { pinned: [] }, "");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue