init
This commit is contained in:
93
packages/ags/bk/services/screenrecord.js
Normal file
93
packages/ags/bk/services/screenrecord.js
Normal file
@@ -0,0 +1,93 @@
|
||||
import GLib from "gi://GLib"
|
||||
import icons from "../lib/icons.js"
|
||||
import { dependencies, sh, bash } from "../lib/utils.js"
|
||||
|
||||
const now = () => GLib.DateTime.new_now_local().format("%Y-%m-%d_%H-%M-%S")
|
||||
|
||||
class Recorder extends Service {
|
||||
static {
|
||||
Service.register(this, {}, {
|
||||
"timer": ["int"],
|
||||
"recording": ["boolean"],
|
||||
})
|
||||
}
|
||||
|
||||
#recordings = Utils.HOME + "/Videos/Screencasting"
|
||||
#screenshots = Utils.HOME + "/Pictures/Screenshots"
|
||||
#file = ""
|
||||
#interval = 0
|
||||
|
||||
recording = false
|
||||
timer = 0
|
||||
|
||||
async start() {
|
||||
if (!dependencies("slurp", "wf-recorder"))
|
||||
return
|
||||
|
||||
if (this.recording)
|
||||
return
|
||||
|
||||
Utils.ensureDirectory(this.#recordings)
|
||||
this.#file = `${this.#recordings}/${now()}.mp4`
|
||||
sh(`wf-recorder -g ${await sh("slurp")} -f ${this.#file} --pixel-format yuv420p`)
|
||||
|
||||
this.recording = true
|
||||
this.changed("recording")
|
||||
|
||||
this.timer = 0
|
||||
this.#interval = Utils.interval(1000, () => {
|
||||
this.changed("timer")
|
||||
this.timer++
|
||||
})
|
||||
}
|
||||
|
||||
async stop() {
|
||||
if (!this.recording)
|
||||
return
|
||||
|
||||
await bash("killall -INT wf-recorder")
|
||||
this.recording = false
|
||||
this.changed("recording")
|
||||
GLib.source_remove(this.#interval)
|
||||
|
||||
Utils.notify({
|
||||
iconName: icons.fallback.video,
|
||||
summary: "Screenrecord",
|
||||
body: this.#file,
|
||||
actions: {
|
||||
"Show in Files": () => sh(`xdg-open ${this.#recordings}`),
|
||||
"View": () => sh(`xdg-open ${this.#file}`),
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
async screenshot(full = false) {
|
||||
if (!dependencies("slurp", "wayshot"))
|
||||
return
|
||||
|
||||
const file = `${this.#screenshots}/${now()}.png`
|
||||
Utils.ensureDirectory(this.#screenshots)
|
||||
|
||||
const wayshot = `wayshot -f ${file} ${full ? "" : `-s "${await sh("slurp")}"`}`
|
||||
await sh(wayshot)
|
||||
bash(`wl-copy < ${file}`)
|
||||
|
||||
Utils.notify({
|
||||
image: file,
|
||||
summary: "Screenshot",
|
||||
body: this.#file,
|
||||
actions: {
|
||||
"Show in Files": () => sh(`xdg-open ${this.#screenshots}`),
|
||||
"View": () => sh(`xdg-open ${file}`),
|
||||
"Edit": () => {
|
||||
if (!dependencies("swappy"))
|
||||
sh(`swappy, -f ${file}`)
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const recorder = new Recorder
|
||||
globalThis["recorder"] = recorder
|
||||
export default recorder
|
||||
Reference in New Issue
Block a user