Fix GDM callback mapping: correctly target module within plugin package
This commit is contained in:
@@ -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
|
||||
|
||||
16
mod_queue.py
16
mod_queue.py
@@ -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,7 +913,9 @@ class DownloadTask:
|
||||
}
|
||||
module_instance.plugin_callback(callback_data)
|
||||
callback_invoked = True
|
||||
P.logger.info(f"Callback invoked on module {module_name}")
|
||||
P.logger.info(f"Callback invoked on module {instance_name}")
|
||||
# 대상 모듈을 명확히 찾았으면 종료
|
||||
if target_module_name:
|
||||
break
|
||||
|
||||
if not callback_invoked:
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user