diff --git a/managers/telegram_manager.py b/managers/telegram_manager.py
index 8a533ab..d4d7c3f 100644
--- a/managers/telegram_manager.py
+++ b/managers/telegram_manager.py
@@ -117,8 +117,8 @@ class TelegramManager:
# Crear botones inline para el primer mensaje del grupo
if is_favorite:
- keyboard = [
- [
+ keyboard = [
+ [
InlineKeyboardButton("✅ En favoritos", callback_data=f"already_fav_{article.get_platform()}_{article.get_id()}"),
InlineKeyboardButton("🗑️ Quitar", callback_data=f"unfav_{article.get_platform()}_{article.get_id()}")
],
@@ -130,9 +130,9 @@ class TelegramManager:
keyboard = [
[
InlineKeyboardButton("⭐ Añadir a favoritos", callback_data=f"fav_{article.get_platform()}_{article.get_id()}_{search_name}"),
- InlineKeyboardButton("Ir al anuncio", url=f"{article.get_url()}")
- ]
+ InlineKeyboardButton("Ir al anuncio", url=f"{article.get_url()}")
]
+ ]
reply_markup = InlineKeyboardMarkup(keyboard)
# Enviar un mensaje adicional con los botones (reply al primer mensaje del grupo)
@@ -231,12 +231,12 @@ class TelegramManager:
]
]
else:
- new_keyboard = [
+ new_keyboard = [
[
InlineKeyboardButton("✅ En favoritos", callback_data=f"already_fav_{platform}_{article_id}"),
InlineKeyboardButton("🗑️ Quitar", callback_data=f"unfav_{platform}_{article_id}")
]
- ]
+ ]
await query.edit_message_reply_markup(
reply_markup=InlineKeyboardMarkup(new_keyboard)
)
@@ -326,11 +326,11 @@ class TelegramManager:
]
]
else:
- keyboard = [
+ keyboard = [
[
InlineKeyboardButton("⭐ Añadir a favoritos", callback_data=f"fav_{platform}_{article_id}_Unknown")
]
- ]
+ ]
await query.edit_message_reply_markup(
reply_markup=InlineKeyboardMarkup(keyboard)
)
diff --git a/web/frontend/src/views/Articles.vue b/web/frontend/src/views/Articles.vue
index 39d7d19..5d0e195 100644
--- a/web/frontend/src/views/Articles.vue
+++ b/web/frontend/src/views/Articles.vue
@@ -2,21 +2,21 @@
-
Artículos Notificados
-
-
-
+
Artículos Notificados
+
+
+
@@ -83,21 +83,21 @@
-
-
+
+ :class="
+ article.platform === 'wallapop'
+ ? 'bg-blue-100 text-blue-800'
+ : 'bg-green-100 text-green-800'
+ "
+ >
{{ article.platform?.toUpperCase() || 'N/A' }}
-
+
- {{ formatDate(article.notifiedAt) }}
-
-
+ {{ formatDate(article.notifiedAt) }}
+
+
{{ article.title || 'Sin título' }}
@@ -211,7 +211,7 @@ async function loadArticles(reset = true, silent = false) {
}
if (!silent) {
- loading.value = true;
+ loading.value = true;
}
try {
@@ -235,7 +235,7 @@ async function loadArticles(reset = true, silent = false) {
console.error('Error cargando artículos:', error);
} finally {
if (!silent) {
- loading.value = false;
+ loading.value = false;
}
}
}
diff --git a/web/frontend/src/views/Workers.vue b/web/frontend/src/views/Workers.vue
index 0d3acae..c4f038a 100644
--- a/web/frontend/src/views/Workers.vue
+++ b/web/frontend/src/views/Workers.vue
@@ -524,10 +524,12 @@ function closeGeneralModal() {
async function saveWorker() {
try {
- const updatedWorkers = { ...workers.value };
- if (!updatedWorkers.items) {
- updatedWorkers.items = [];
- }
+ const updatedWorkers = {
+ ...workers.value,
+ items: [...(workers.value.items || [])],
+ disabled: [...(workers.value.disabled || [])],
+ general: workers.value.general || {}
+ };
const workerData = {
name: workerForm.value.name,
@@ -567,10 +569,14 @@ async function saveWorker() {
async function saveGeneralConfig() {
try {
- const updatedWorkers = { ...workers.value };
- updatedWorkers.general = {
- ...(textToArray(generalForm.value.title_exclude_text).length > 0 && { title_exclude: textToArray(generalForm.value.title_exclude_text) }),
- ...(textToArray(generalForm.value.description_exclude_text).length > 0 && { description_exclude: textToArray(generalForm.value.description_exclude_text) }),
+ const updatedWorkers = {
+ ...workers.value,
+ items: workers.value.items || [],
+ disabled: workers.value.disabled || [],
+ general: {
+ ...(textToArray(generalForm.value.title_exclude_text).length > 0 && { title_exclude: textToArray(generalForm.value.title_exclude_text) }),
+ ...(textToArray(generalForm.value.description_exclude_text).length > 0 && { description_exclude: textToArray(generalForm.value.description_exclude_text) }),
+ }
};
await api.updateWorkers(updatedWorkers);
@@ -588,14 +594,17 @@ async function disableWorker(name) {
}
try {
- const updatedWorkers = { ...workers.value };
- if (!updatedWorkers.disabled) {
- updatedWorkers.disabled = [];
- }
+ const updatedWorkers = {
+ ...workers.value,
+ items: workers.value.items || [],
+ disabled: [...(workers.value.disabled || [])]
+ };
+
if (!updatedWorkers.disabled.includes(name)) {
updatedWorkers.disabled.push(name);
}
- await api.updateWshowGeneralModalorkers(updatedWorkers);
+
+ await api.updateWorkers(updatedWorkers);
await loadWorkers();
} catch (error) {
console.error('Error desactivando worker:', error);
@@ -605,10 +614,12 @@ async function disableWorker(name) {
async function enableWorker(name) {
try {
- const updatedWorkers = { ...workers.value };
- if (updatedWorkers.disabled) {
- updatedWorkers.disabled = updatedWorkers.disabled.filter(n => n !== name);
- }
+ const updatedWorkers = {
+ ...workers.value,
+ items: workers.value.items || [],
+ disabled: [...(workers.value.disabled || [])].filter(n => n !== name)
+ };
+
await api.updateWorkers(updatedWorkers);
await loadWorkers();
} catch (error) {
@@ -623,11 +634,13 @@ async function deleteWorker(name) {
}
try {
- const updatedWorkers = { ...workers.value };
- updatedWorkers.items = updatedWorkers.items.filter(w => w.name !== name);
- if (updatedWorkers.disabled) {
- updatedWorkers.disabled = updatedWorkers.disabled.filter(n => n !== name);
- }
+ const updatedWorkers = {
+ ...workers.value,
+ items: (workers.value.items || []).filter(w => w.name !== name),
+ disabled: (workers.value.disabled || []).filter(n => n !== name),
+ general: workers.value.general || {}
+ };
+
await api.updateWorkers(updatedWorkers);
await loadWorkers();
} catch (error) {