✨ ags(control-center/tiles): finally add screen recording tile!!
This commit is contained in:
@@ -13,6 +13,7 @@ export const TileBluetooth = Tile({
|
|||||||
onToggledOn: () => AstalBluetooth.get_default().adapter.set_powered(true),
|
onToggledOn: () => AstalBluetooth.get_default().adapter.set_powered(true),
|
||||||
onToggledOff: () => AstalBluetooth.get_default().adapter.set_powered(false),
|
onToggledOff: () => AstalBluetooth.get_default().adapter.set_powered(false),
|
||||||
onClickMore: () => togglePage(BluetoothPage),
|
onClickMore: () => togglePage(BluetoothPage),
|
||||||
|
enableOnClickMore: true,
|
||||||
icon: Variable.derive([
|
icon: Variable.derive([
|
||||||
bind(AstalBluetooth.get_default().adapter, "powered"),
|
bind(AstalBluetooth.get_default().adapter, "powered"),
|
||||||
bind(AstalBluetooth.get_default(), "isConnected")
|
bind(AstalBluetooth.get_default(), "isConnected")
|
||||||
|
|||||||
@@ -1,18 +1,32 @@
|
|||||||
import { Tile, TileProps } from "./Tile";
|
import { Tile, TileProps } from "./Tile";
|
||||||
import { Recording } from "../../../scripts/recording";
|
import { Recording } from "../../../scripts/recording";
|
||||||
import { bind } from "astal";
|
import { bind, Variable } from "astal";
|
||||||
import { tr } from "../../../i18n/intl";
|
import { tr } from "../../../i18n/intl";
|
||||||
|
import { getDateTime } from "../../../scripts/time";
|
||||||
|
|
||||||
export const TileRecording = Tile({
|
export const TileRecording = Tile({
|
||||||
title: tr("control_center.tiles.recording.title") || "Screen Recording",
|
title: tr("control_center.tiles.recording.title") || "Screen Recording",
|
||||||
description: bind(Recording.getDefault(), "recording").as(
|
description: Variable.derive([
|
||||||
(isRecording: boolean) => isRecording ?
|
bind(Recording.getDefault(), "recording"),
|
||||||
"Recording {time}"
|
getDateTime()
|
||||||
: tr("control_center.tiles.recording.disabled_desc") || "Start recording"
|
], (recording, dateTime) => {
|
||||||
),
|
if(!recording || !Recording.getDefault().startedAt)
|
||||||
|
return tr("control_center.tiles.recording.disabled_desc") || "Start recording";
|
||||||
|
|
||||||
|
const startedAtSeconds = dateTime.to_unix() - Recording.getDefault().startedAt!.to_unix();
|
||||||
|
if(startedAtSeconds <= 0) return "00:00";
|
||||||
|
|
||||||
|
const hours = Math.floor(startedAtSeconds / 120);
|
||||||
|
const minutes = Math.floor(startedAtSeconds / 60);
|
||||||
|
const seconds = Math.floor(startedAtSeconds % 60);
|
||||||
|
|
||||||
|
return `${ hours > 0 ? `${hours < 10 ? `0${hours}` : hours }:` : ""
|
||||||
|
}${ minutes < 10 ? `0${minutes}` : minutes
|
||||||
|
}:${ seconds < 10 ? `0${seconds}` : seconds }`;
|
||||||
|
})(),
|
||||||
icon: "",
|
icon: "",
|
||||||
onToggledOff: () => Recording.getDefault().stopRecording(),
|
onToggledOff: () => Recording.getDefault().stopRecording(),
|
||||||
onToggledOn: () => Recording.getDefault().startRecording(),
|
onToggledOn: () => Recording.getDefault().startRecording(),
|
||||||
iconSize: 16,
|
|
||||||
toggleState: bind(Recording.getDefault(), "recording"),
|
toggleState: bind(Recording.getDefault(), "recording"),
|
||||||
|
iconSize: 16
|
||||||
} as TileProps);
|
} as TileProps);
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ export type TileProps = {
|
|||||||
title: string | Binding<string | undefined>;
|
title: string | Binding<string | undefined>;
|
||||||
description?: string | Binding<string | undefined>;
|
description?: string | Binding<string | undefined>;
|
||||||
toggleState?: boolean | Binding<boolean | undefined>;
|
toggleState?: boolean | Binding<boolean | undefined>;
|
||||||
|
enableOnClickMore: boolean | Binding<boolean | undefined>;
|
||||||
onToggledOn: () => void;
|
onToggledOn: () => void;
|
||||||
onToggledOff: () => void;
|
onToggledOff: () => void;
|
||||||
onClickMore?: () => void;
|
onClickMore?: () => void;
|
||||||
@@ -97,7 +98,13 @@ export function Tile(props: TileProps): (() => Widget.EventBox) {
|
|||||||
icon: "go-next-symbolic",
|
icon: "go-next-symbolic",
|
||||||
css: "icon { font-size: 16px; }"
|
css: "icon { font-size: 16px; }"
|
||||||
}),
|
}),
|
||||||
onClick: () => props.onClickMore && props?.onClickMore(),
|
onClick: () => {
|
||||||
|
((props.enableOnClickMore instanceof Binding) ?
|
||||||
|
props.enableOnClickMore.get()
|
||||||
|
: props.enableOnClickMore) && props?.onToggledOn();
|
||||||
|
|
||||||
|
props.onClickMore && props?.onClickMore()
|
||||||
|
},
|
||||||
widthRequest: 32
|
widthRequest: 32
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user