obsidian-sample-plugin/main.ts

86 lines
3.3 KiB
TypeScript

import { Plugin, TFile } from 'obsidian';
export default class MusicNotePlugin extends Plugin {
private audio: HTMLAudioElement | null = null;
private isPlaying: boolean = false;
private toggleButton: HTMLElement | null = null;
private statusBarItem: HTMLElement | null = null;
async onload() {
console.log("Music Note Plugin Loaded!");
// 상태 바 아이템 생성
this.statusBarItem = this.addStatusBarItem();
this.toggleButton = this.statusBarItem.createEl("button", { text: "Play" });
// 버튼 스타일 적용 (toggleButton이 null이 아닌지 확인)
if (this.toggleButton) {
this.toggleButton.style.backgroundColor = "transparent";
this.toggleButton.style.border = "none";
this.toggleButton.style.cursor = "pointer";
this.toggleButton.style.color = "#8A8A8A"; // 당신이 찾은 색상으로 변경
this.toggleButton.style.display = "none"; // 처음엔 숨김
// 버튼 클릭 이벤트
this.toggleButton.addEventListener("click", () => {
if (!this.isPlaying) {
if (!this.audio) {
this.audio = new Audio("https://music.youtube.com/watch?v=mJYyGLzdnZE&list=RDAMVMmJYyGLzdnZE");
}
this.audio.play().catch(error => {
console.log("Audio play failed:", error);
});
this.toggleButton!.textContent = "Stop"; // !로 null 아님을 보장
this.isPlaying = true;
} else {
if (this.audio) {
this.audio.pause();
this.audio.currentTime = 0;
}
this.toggleButton!.textContent = "Play"; // !로 null 아님을 보장
this.isPlaying = false;
}
});
}
// 노트가 열릴 때마다 확인
this.registerEvent(
this.app.workspace.on("file-open", (file: TFile | null) => {
this.checkAudioContent(file);
})
);
// 처음 로드 시 현재 열려있는 파일 확인
const activeFile = this.app.workspace.getActiveFile();
if (activeFile) {
this.checkAudioContent(activeFile);
}
}
// 오디오 콘텐츠 확인 함수
private async checkAudioContent(file: TFile | null) {
if (!file || !this.toggleButton || !this.statusBarItem) return;
const content = await this.app.vault.read(file);
const hasAudio = /youtube\.com|youtu\.be|\.mp3|music\.youtube\.com/i.test(content);
if (hasAudio) {
this.toggleButton.style.display = "block"; // 보이기
} else {
this.toggleButton.style.display = "none"; // 숨기기
if (this.audio) {
this.audio.pause();
this.audio.currentTime = 0; // 재생 중이면 정지 후 처음으로
this.isPlaying = false;
this.toggleButton.textContent = "Play";
}
}
}
onunload() {
console.log("Music Note Plugin Unloaded!");
if (this.audio) {
this.audio.pause();
}
}
}