Fix GDM callback mapping: correctly target module within plugin package

This commit is contained in:
2026-01-11 18:47:41 +09:00
parent c38a7ae39b
commit 9c4f36de6b
3 changed files with 140 additions and 3 deletions

View File

@@ -1,6 +1,6 @@
title: "GDM"
package_name: gommi_downloader_manager
version: '0.2.28'
version: '0.2.29'
description: FlaskFarm 범용 다운로더 큐 - YouTube, 애니24, 링크애니, Anilife 지원
developer: projectdx
home: https://gitea.yommi.duckdns.org/projectdx/gommi_downloader_manager

View File

@@ -890,7 +890,19 @@ class DownloadTask:
else:
modules = []
# 모듈명 추출 (예: anime_downloader_linkkf -> linkkf)
target_module_name = None
if len(parts) > 1:
target_module_name = parts[-1]
for module_name, module_instance in modules:
# 모듈 인스턴스의 name 또는 변수명 확인
instance_name = getattr(module_instance, 'name', module_name)
# 대상 모듈명이 지정되어 있으면 일치하는 경우에만 호출
if target_module_name and instance_name != target_module_name:
continue
if hasattr(module_instance, 'plugin_callback'):
callback_data = {
'callback_id': self.callback_id,
@@ -901,8 +913,10 @@ class DownloadTask:
}
module_instance.plugin_callback(callback_data)
callback_invoked = True
P.logger.info(f"Callback invoked on module {module_name}")
break
P.logger.info(f"Callback invoked on module {instance_name}")
# 대상 모듈을 명확히 찾았으면 종료
if target_module_name:
break
if not callback_invoked:
P.logger.debug(f"No plugin_callback method found in {self.caller_plugin}")

View File

@@ -740,6 +740,65 @@
opacity: 0.25;
cursor: not-allowed;
}
/* ===== CUSTOM CROSSHAIR CURSOR ===== */
.custom-cursor-outer {
position: fixed;
width: 36px;
height: 36px;
background: rgba(168, 85, 247, 0.25);
border: none;
pointer-events: none;
z-index: 99999;
transform: translate(-50%, -50%);
transition: width 0.15s ease, height 0.15s ease, background 0.15s ease, transform 0.15s ease, filter 0.15s ease;
/* 5-point star clip-path */
clip-path: polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%);
/* Strong outline via multiple drop-shadows */
filter:
drop-shadow(0 0 0 rgba(168, 85, 247, 1))
drop-shadow(1px 0 0 rgba(168, 85, 247, 1))
drop-shadow(-1px 0 0 rgba(168, 85, 247, 1))
drop-shadow(0 1px 0 rgba(168, 85, 247, 1))
drop-shadow(0 -1px 0 rgba(168, 85, 247, 1));
}
.custom-cursor-dot {
position: fixed;
width: 6px;
height: 6px;
background: rgba(168, 85, 247, 1);
border-radius: 50%;
pointer-events: none;
z-index: 99999;
transform: translate(-50%, -50%);
transition: transform 0.08s ease;
}
/* Cursor hover state on interactive elements */
.custom-cursor-outer.hovering {
width: 38px;
height: 38px;
background: rgba(192, 132, 252, 0.5);
transform: translate(-50%, -50%) rotate(36deg);
}
.custom-cursor-dot.hovering {
transform: translate(-50%, -50%) scale(1.3);
}
/* Hide default cursor when custom cursor is active */
#gommi_download_manager_queue_list,
#gommi_download_manager_queue_list * {
cursor: none !important;
}
/* Exception: keep pointer on buttons for accessibility hint */
#gommi_download_manager_queue_list button:hover,
#gommi_download_manager_queue_list .dl-btn:hover,
#gommi_download_manager_queue_list .btn-premium:hover {
cursor: none !important;
}
</style>
<div id="gommi_download_manager_queue_list" class="mt-4">
@@ -767,6 +826,70 @@
</div>
</div>
<!-- Custom Cursor Elements -->
<div class="custom-cursor-outer" id="cursor-ring"></div>
<div class="custom-cursor-dot" id="cursor-dot"></div>
<script>
// ===== CUSTOM CURSOR WITH INERTIA EFFECT (Optimized) =====
(function() {
const ring = document.getElementById('cursor-ring');
const dot = document.getElementById('cursor-dot');
if (!ring || !dot) return;
let mouseX = 0, mouseY = 0;
let ringX = 0, ringY = 0;
let dotX = 0, dotY = 0;
// Interactive elements selector
const interactiveSelector = 'a, button, .btn, .dl-btn, .btn-premium, .dl-card, input, select';
// Track mouse position
document.addEventListener('mousemove', (e) => {
mouseX = e.clientX;
mouseY = e.clientY;
});
// Lerp animation with smooth follow
function animate() {
// Ring follows with inertia
ringX += (mouseX - ringX) * 0.12;
ringY += (mouseY - ringY) * 0.12;
ring.style.left = ringX + 'px';
ring.style.top = ringY + 'px';
// Dot follows quickly
dotX += (mouseX - dotX) * 0.25;
dotY += (mouseY - dotY) * 0.25;
dot.style.left = dotX + 'px';
dot.style.top = dotY + 'px';
requestAnimationFrame(animate);
}
animate();
// Event delegation for hover effects (document-wide)
document.addEventListener('mouseover', (e) => {
if (e.target.matches(interactiveSelector) || e.target.closest(interactiveSelector)) {
ring.classList.add('hovering');
dot.classList.add('hovering');
}
});
document.addEventListener('mouseout', (e) => {
if (e.target.matches(interactiveSelector) || e.target.closest(interactiveSelector)) {
ring.classList.remove('hovering');
dot.classList.remove('hovering');
}
});
// Show cursor on page
ring.style.opacity = '1';
dot.style.opacity = '1';
})();
</script>
<script>
// PACKAGE_NAME and MODULE_NAME are already defined globally by framework