added enable/disable for Routines for current Bkup run. show/hide sources/destinations by enabled status

master
itwrx 1 year ago
parent 22abe65ab0
commit e7e156868e
  1. 5
      ez_bkup.nim
  2. 11
      models/routine.nim
  3. 13
      shared.nim
  4. 7
      views/routine_editor.nim
  5. 31
      views/routine_list.nim

@ -8,7 +8,7 @@ import "models/routine", "shared"
import views/[edit_routine_dialog, routine_list, app_menu_button] import views/[edit_routine_dialog, routine_list, app_menu_button]
const APP_NAME = "EZ-Bkup" const APP_NAME = "EZ-Bkup"
let databasePath = appPath & "/ez-bkup.sqlite" #let databasePath = appPath & "/ez-bkup.sqlite"
viewable App: viewable App:
## The main application ## The main application
@ -43,7 +43,8 @@ method view(app: AppState): Widget {.locks: "unknown".} =
# Button to create a new routine # Button to create a new routine
Button: Button:
style = [ButtonSuggested] style = [ButtonSuggested]
text = "+ Routine" text = "+ Routine"
tooltip = "Create a new Bkup Routine"
proc clicked() = proc clicked() =
## Opens the EditRoutineDialog for creating a new routine ## Opens the EditRoutineDialog for creating a new routine
let (res, state) = app.open: gui: let (res, state) = app.open: gui:

@ -184,4 +184,13 @@ proc clear*(model: RoutineModel) =
model.db.exec("DELETE FROM Routine") model.db.exec("DELETE FROM Routine")
# Update RoutineModel.routines # Update RoutineModel.routines
model.routines.clear() model.routines.clear()
#preload the selected seq with routines that have selByDef == true.
proc selectedPreload*(): seq[RoutineId] =
var selected: seq[RoutineId]
let model = newRoutineModel(databasePath)
for routine in model.routineSeq():
if routine.selByDef == true:
selected.add(routine.id)
return selected

@ -4,19 +4,10 @@ EZ-Bkup is released under the General Public License 3.0.
See COPYING or <https://www.gnu.org/licenses/> for details.]# See COPYING or <https://www.gnu.org/licenses/> for details.]#
import logging, times, os, distros import logging, times, os, distros
#import "models/routine" import "models/routine"
#store the RoutineIds of ea. Routine selected for the current Bkup run.
#[type SelectedRoutine* = object
id*: RoutineId
name*: string
sources*: seq[string]
destinations*: seq[string]
type CurrentRun* = object
status*: string]#
let appPath* = getHomeDir() & ".ez-bkup" let appPath* = getHomeDir() & ".ez-bkup"
let databasePath* = appPath & "/ez-bkup.sqlite"
if not dirExists(appPath): if not dirExists(appPath):
createDir(appPath) createDir(appPath)

@ -41,11 +41,8 @@ method view(editor: RoutineEditorState): Widget {.locks: "unknown".} =
orient = OrientX orient = OrientX
spacing = 6 spacing = 6
Label {.expand: false.}: Label {.expand: false.}:
#later, this may be "selected by default?", instead. text = "<span weight=\"bold\" color=\"#FFF469\">Enabled by default?</span>"
#"selected" checkboxes wiould be added to the list view. tooltip = "Should this Routine be enabled for inclusion in any Bkup run by default?"
#to allow the user to select which routines are used for a given run.
text = "<span weight=\"bold\" color=\"#FFF469\">Enabled?</span>"
tooltip = "Should this Routine be enabled for inclusion in the Bkup run?"
xAlign = 0 xAlign = 0
useMarkup = true useMarkup = true
Switch {.expand: false.}: Switch {.expand: false.}:

@ -11,6 +11,14 @@ import "../models/routine", "../shared"
viewable RoutineList: viewable RoutineList:
routineModel: RoutineModel routineModel: RoutineModel
runStatus: string runStatus: string
selected: seq[RoutineId]
# hey, hook.
hooks:
# yes, you, the build hook.
build:
# i love you. :)
state.selected = selectedPreload()
proc changed(state: bool) proc changed(state: bool)
@ -33,8 +41,7 @@ proc rsyncThread(list: RoutineListState) {.thread.} =
var routineRunCount: int var routineRunCount: int
routineRunCount = 0 routineRunCount = 0
for routine in list.routineModel.routineSeq(): for routine in list.routineModel.routineSeq():
#using this as "selected" for now. if routine.id in list.selected:
if routine.selByDef == true:
#skip routines that don't have at least one source and one destination. #skip routines that don't have at least one source and one destination.
if routine.sources.len != 0 and routine.destinations.len != 0: if routine.sources.len != 0 and routine.destinations.len != 0:
list.runStatus = "<span color=\"#FFE97B\" size=\"large\">Horses, please to be holding...</span>" list.runStatus = "<span color=\"#FFE97B\" size=\"large\">Horses, please to be holding...</span>"
@ -77,7 +84,7 @@ method view(list: RoutineListState): Widget {.locks: "unknown".} =
orient = OrientY orient = OrientY
if list.routineModel.routineSeq().len() > 0: if list.routineModel.routineSeq().len() > 0:
ListBox: ListBox:
for it, routine in list.routineModel.routineSeq(): for it, routine in list.routineModel.routineSeq():
Box: Box:
orient = OrientY orient = OrientY
margin = 6 margin = 6
@ -85,7 +92,20 @@ method view(list: RoutineListState): Widget {.locks: "unknown".} =
Box: Box:
orient = OrientX orient = OrientX
margin = 6 margin = 6
spacing = 6 spacing = 6
Switch {.expand: false, vAlign: AlignCenter.}:
state = routine.selByDef
tooltip = "Enable/Disable this Routine for the current Bkup run."
proc changed(state: bool) =
if state == true:
list.selected.add(routine.id)
else:
let index = list.selected.find(routine.id)
if index != -1:
list.selected.delete(index)
if not list.changed.isNil:
list.changed.callback(true)
Label: Label:
text = "<span size=\"large\">" & routine.name & "</span>" text = "<span size=\"large\">" & routine.name & "</span>"
xAlign = 0 xAlign = 0
@ -110,7 +130,7 @@ method view(list: RoutineListState): Widget {.locks: "unknown".} =
tooltip = "Delete this Routine. Warning: will not ask you to confirm." tooltip = "Delete this Routine. Warning: will not ask you to confirm."
proc clicked() = proc clicked() =
list.routineModel.delete(routine.id) list.routineModel.delete(routine.id)
if routine.selByDef: if routine.id in list.selected:
Box: Box:
orient = OrientY orient = OrientY
margin = 6 margin = 6
@ -192,7 +212,6 @@ method view(list: RoutineListState): Widget {.locks: "unknown".} =
xAlign = 0 xAlign = 0
useMarkup = true useMarkup = true
proc clicked() = proc clicked() =
#list.runStatus = "<span color=\"#FFE97B\" size=\"large\">Running Bkup...</span>"
createThread(thread, rsyncThread, list) createThread(thread, rsyncThread, list)
else: else:
Box {.expand: false.}: Box {.expand: false.}:

Loading…
Cancel
Save