Compare commits

...

4 Commits

Author SHA1 Message Date
Gustavo Henrique Santos Souza de Miranda c5edb835b6 Add the feature to delete all the entries from a travel diary 2025-07-23 08:45:50 -03:00
Gustavo Henrique Santos Souza de Miranda ed89669431 Fix a circular import and passed the proper travel diary id 2025-07-23 08:44:32 -03:00
Gustavo Henrique Santos Souza de Miranda 8efda52d15 Add the delete all entries method the travel diary service 2025-07-23 08:42:00 -03:00
Gustavo Henrique Santos Souza de Miranda 4d6c92b4d0 Add the feature to delete the whole diary 2025-07-23 07:56:42 -03:00
4 changed files with 50 additions and 4 deletions

View File

@ -3,6 +3,7 @@ import re
import shutil import shutil
from pathlib import Path from pathlib import Path
from pilgrim.models.entry import Entry
from pilgrim.utils import DirectoryManager from pilgrim.utils import DirectoryManager
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
@ -147,3 +148,14 @@ class TravelDiaryService:
self.session.rollback() self.session.rollback()
raise ValueError(f"Could not delete diary: {str(e)}") raise ValueError(f"Could not delete diary: {str(e)}")
return None return None
def delete_all_entries(self,travel_diary: TravelDiary):
diary = self.read_by_id(travel_diary.id)
if diary is not None:
diary.entries = []
self.session.commit()
return True
return False

View File

@ -3,6 +3,7 @@ from textual.widgets import Button
from textual import on from textual import on
from pilgrim.ui.screens.modals.delete_yes_confirmation_modal import DeleteYesConfirmationModal from pilgrim.ui.screens.modals.delete_yes_confirmation_modal import DeleteYesConfirmationModal
@ -10,11 +11,23 @@ class DeleteAllEntriesModal(DeleteYesConfirmationModal):
def __init__(self,diary_id:int): def __init__(self,diary_id:int):
super().__init__(diary_id) super().__init__(diary_id)
self.head_text.update("Are you sure you want to delete all entries from this diary?") self.head_text.update("Are you sure you want to delete all entries from this diary?")
self.delete_button.add_class("DeleteDiaryModal-DeleteButton")
@on(Button.Pressed, "#DeleteDiaryModal-DeleteButton") @on(Button.Pressed, ".DeleteDiaryModal-DeleteButton")
def on_delete_button_pressed(self, event): def on_delete_button_pressed(self, event):
self.result = True
self.dismiss()
from pilgrim.ui.screens.diary_list_screen import DiaryListScreen
self.result = True
self._delete_entries()
self.dismiss()
self.app.push_screen(DiaryListScreen())
def _delete_entries(self):
diary = self.app.service_manager.get_travel_diary_service().read_by_id(self.diary_id)
if self.app.service_manager.get_travel_diary_service().delete_all_entries(diary):
self.notify("All entries deleted successfully")
else:
self.notify("Failed to delete all entries")

View File

@ -5,6 +5,8 @@ from textual.binding import Binding
from textual import on from textual import on
class DeleteDiaryModal(Screen): class DeleteDiaryModal(Screen):
BINDINGS = [ BINDINGS = [
@ -44,11 +46,19 @@ class DeleteDiaryModal(Screen):
else: else:
self.delete_button.disabled = True self.delete_button.disabled = True
@on(Button.Pressed,"#DeleteDiaryModal-DeleteButton") @on(Button.Pressed,"#DeleteDiaryModal-DeleteButton")
def on_delete_button_pressed(self, event): def on_delete_button_pressed(self, event):
self.result = True self.result = True
self._delete_diary()
self.dismiss() self.dismiss()
from pilgrim.ui.screens.diary_list_screen import DiaryListScreen
self.app.push_screen(DiaryListScreen())
@on(Button.Pressed,"#DeleteDiaryModal-CancelButton") @on(Button.Pressed,"#DeleteDiaryModal-CancelButton")
def on_cancel_button_pressed(self, event): def on_cancel_button_pressed(self, event):
@ -57,3 +67,11 @@ class DeleteDiaryModal(Screen):
def action_cancel(self): def action_cancel(self):
self.dismiss() self.dismiss()
def _delete_diary(self):
diary = self.app.service_manager.get_travel_diary_service().read_by_id(self.diary_id)
self.app.service_manager.get_travel_diary_service().delete(diary)
if self.app.config_manager.get_auto_open_diary() == self.diary_name:
self.app.config_manager.set_auto_open_diary(None)
self.app.config_manager.save_config()

View File

@ -5,6 +5,8 @@ from textual.binding import Binding
from textual import on from textual import on
class DeleteYesConfirmationModal(Screen): class DeleteYesConfirmationModal(Screen):
BINDINGS = [ BINDINGS = [
Binding("escape", "cancel", "Cancel"), Binding("escape", "cancel", "Cancel"),
@ -45,8 +47,9 @@ class DeleteYesConfirmationModal(Screen):
self.action_cancel() self.action_cancel()
def action_cancel(self): def action_cancel(self):
from pilgrim.ui.screens.diary_settings_screen import SettingsScreen
self.dismiss() self.dismiss()
self.app.push_screen(SettingsScreen(diary=travel_diary[0])) self.app.push_screen(SettingsScreen(self.diary_id))
def compose(self): def compose(self):
yield Header() yield Header()