86 lines
3.3 KiB
TypeScript
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();
|
|
}
|
|
}
|
|
} |