Instruktioner för prog2-projektet Google Drive Sync (läsår 19/20). I detta dokument återfinns instruktioner och tips för hur du implementerar olika klasser som kommer ingå i applikationen. Informationen kommer uppdateras löpande under projektets gång.
Ett designmönster (design pattern) är ett standardrecept som kan användas för att lösa olika programmeringsproblem. Vi kommer att bygga vår applikation enligt designmönstret MVC, vilket innebär att vi delar in programmets funktionalitet/klasser i tre övergripande kategorier:
- Model - klasser som hanterar all data som applikationen behöver hantera (även konfiguration)
- View - klass eller klasser som hanterar användargränssnitt, GUI
- Controller - i regel en klass som fungerar som ett gränssnitt mellan model och view
Läs på mer om MVC här: https://www.guru99.com/mvc-tutorial.html
FileObserver har som uppgift att bevaka en vald mapp (och dess underliggande mappar) efter förändringar i filsystemet. Klassen initieras med argumentet target_directory
som är absolut sökväg till bevakad mapp. Ändringar i filer verifieras via filens modified time (File::mtime
). @file_inventory
är en förteckning över bevakade filer. Den innehåller nyckel-värde-par där nyckeln är absolut sökväg till filen och värdet är filens mtime. Klassen tillhandahåller tre olika listor (datatyp Array) @changed_files
, @new_files
, @deleted_files
som håller ändrade, nya, respektive borttagna filer. Dessa tre listor är tillgängliga via tre olika getter-metoder. Metoden FileObserver#update_file_inventory
anropas för att uppdatera @file_inventory
och dom tre listorna där ändringar kan spåras.
Persistens betyder varaktighet eller beständighet. Klassen FileObserverPersistence har som uppgift att "komma ihåg" tillståndet för ett FileObserver-objekt när applikationen avslutas (eller kanske kraschar). Det är också via denna klass som vi kan återkalla det senast sparade tillståndet för ett FileObserver-objekt när applikationen startar. Klassen har två klassmetoder (dvs metoder som kan anropas utan att klassen först måste instansieras): FileObserverPersistence::save
och FileObserverPersistence::load
.