diff --git a/core/migrations/0012_default_active_m3u_accounts.py b/core/migrations/0012_default_active_m3u_accounts.py
new file mode 100644
index 00000000..11888772
--- /dev/null
+++ b/core/migrations/0012_default_active_m3u_accounts.py
@@ -0,0 +1,22 @@
+# Generated by Django 5.1.6 on 2025-03-01 14:01
+
+from django.db import migrations
+from django.utils.text import slugify
+
+def preload_core_settings(apps, schema_editor):
+ CoreSettings = apps.get_model("core", "CoreSettings")
+ CoreSettings.objects.create(
+ key=slugify("Auto-Import Mapped Files"),
+ name="Auto-Import Mapped Files",
+ value=True,
+ )
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('core', '0011_fix_stream_profiles_and_user_agents'),
+ ]
+
+ operations = [
+ migrations.RunPython(preload_core_settings),
+ ]
diff --git a/core/models.py b/core/models.py
index a4fa92d4..a8571b5c 100644
--- a/core/models.py
+++ b/core/models.py
@@ -144,6 +144,7 @@ DEFAULT_USER_AGENT_KEY= slugify("Default User-Agent")
DEFAULT_STREAM_PROFILE_KEY = slugify("Default Stream Profile")
STREAM_HASH_KEY = slugify("M3U Hash Key")
PREFERRED_REGION_KEY = slugify("Preferred Region")
+AUTO_IMPORT_MAPPED_FILES = slugify("Auto-Import Mapped Files")
class CoreSettings(models.Model):
key = models.CharField(
@@ -173,9 +174,18 @@ class CoreSettings(models.Model):
def get_m3u_hash_key(cls):
return cls.objects.get(key=STREAM_HASH_KEY).value
+ @classmethod
def get_preferred_region(cls):
"""Retrieve the preferred region setting (or return None if not found)."""
try:
return cls.objects.get(key=PREFERRED_REGION_KEY).value
except cls.DoesNotExist:
return None
+
+ @classmethod
+ def get_auto_import_mapped_files(cls):
+ """Retrieve the preferred region setting (or return None if not found)."""
+ try:
+ return cls.objects.get(key=AUTO_IMPORT_MAPPED_FILES).value
+ except cls.DoesNotExist:
+ return None
diff --git a/core/tasks.py b/core/tasks.py
index 5dd6a746..f6069e69 100644
--- a/core/tasks.py
+++ b/core/tasks.py
@@ -14,6 +14,7 @@ from apps.m3u.models import M3UAccount
from apps.epg.models import EPGSource
from apps.m3u.tasks import refresh_single_m3u_account
from apps.epg.tasks import refresh_epg_data
+from .models import CoreSettings
logger = logging.getLogger(__name__)
@@ -67,6 +68,7 @@ def scan_and_process_files():
m3u_account, _ = M3UAccount.objects.get_or_create(file_path=filepath, defaults={
"name": filename,
+ "is_active": CoreSettings.get_auto_import_mapped_files(),
})
redis_client.set(redis_key, mtime, ex=REDIS_TTL)
@@ -117,11 +119,17 @@ def scan_and_process_files():
epg_source, _ = EPGSource.objects.get_or_create(file_path=filepath, defaults={
"name": filename,
"source_type": "xmltv",
+ "is_active": CoreSettings.get_auto_import_mapped_files(),
})
+ redis_client.set(redis_key, mtime, ex=REDIS_TTL)
+ redis_client.set(redis_key, mtime, ex=REDIS_TTL)
+
+ if not epg_source.is_active:
+ logger.info("EPG source is inactive, skipping.")
+ continue
+
refresh_epg_data.delay(epg_source.id) # Trigger Celery task
- redis_client.set(redis_key, mtime, ex=REDIS_TTL)
- redis_client.set(redis_key, mtime, ex=REDIS_TTL)
channel_layer = get_channel_layer()
async_to_sync(channel_layer.group_send)(
diff --git a/frontend/src/pages/Settings.jsx b/frontend/src/pages/Settings.jsx
index 81a85c78..19bec97e 100644
--- a/frontend/src/pages/Settings.jsx
+++ b/frontend/src/pages/Settings.jsx
@@ -12,6 +12,8 @@ import {
Paper,
Select,
Stack,
+ Switch,
+ Text,
Title,
} from '@mantine/core';
import { isNotEmpty, useForm } from '@mantine/form';
@@ -280,6 +282,7 @@ const SettingsPage = () => {
'default-user-agent': '',
'default-stream-profile': '',
'preferred-region': '',
+ 'auto-import-mapped-files': true,
},
validate: {
@@ -294,6 +297,15 @@ const SettingsPage = () => {
form.setValues(
Object.entries(settings).reduce((acc, [key, value]) => {
// Modify each value based on its own properties
+ switch (value.value) {
+ case 'true':
+ value.value = true;
+ break;
+ case 'false':
+ value.value = false;
+ break;
+ }
+
acc[key] = value.value;
return acc;
}, {})
@@ -307,7 +319,7 @@ const SettingsPage = () => {
for (const settingKey in values) {
// If the user changed the setting’s value from what’s in the DB:
if (String(values[settingKey]) !== String(settings[settingKey].value)) {
- changedSettings[settingKey] = values[settingKey];
+ changedSettings[settingKey] = `${values[settingKey]}`;
}
}
@@ -373,13 +385,29 @@ const SettingsPage = () => {
}))}
/>
+
+
+ Auto-Import Mapped Files
+
+
+
+