MVC Architecture Demo App
import QtQuick 2.0
import Felgo 4.0
Item {
property alias dispatcher: logicConnection.target
readonly property bool isBusy: api.busy
readonly property bool userLoggedIn: _.userLoggedIn
readonly property alias todos: _.todos
readonly property alias todoDetails: _.todoDetails
signal todoStored(var todo)
signal fetchTodosFailed(var error)
signal fetchTodoDetailsFailed(int id, var error)
signal storeTodoFailed(var todo, var error)
Connections {
id: logicConnection
function onFetchTodos() {
var cached = cache.getValue("todos")
if(cached)
_.todos = cached
api.getTodos(
function(data) {
cache.setValue("todos",data)
_.todos = data
},
function(error) {
if(!cached)
fetchTodosFailed(error)
})
}
function onFetchTodoDetails(id) {
var cached = cache.getValue("todo_"+id)
if(cached) {
_.todoDetails[id] = cached
todoDetailsChanged()
}
api.getTodoById(id,
function(data) {
cache.setValue("todo_"+id, data)
_.todoDetails[id] = data
todoDetailsChanged()
},
function(error) {
if(!cached) {
fetchTodoDetailsFailed(id, error)
}
})
}
function onStoreTodo(todo) {
api.addTodo(todo,
function(data) {
data.id = _.todos.length + 1
cache.setValue("todo_"+data.id, data)
_.todos.unshift(data)
cache.setValue("todos", _.todos)
todosChanged()
todoStored(data)
},
function(error) {
storeTodoFailed(todo, error)
})
}
function onClearCache() {
cache.clearAll()
}
function onLogin(username, password) {
_.userLoggedIn = true
}
function onLogout() {
_.userLoggedIn = false
}
}
RestAPI {
id: api
maxRequestTimeout: 3000
}
Storage {
id: cache
}
Item {
id: _
property var todos: []
property var todoDetails: ({})
property bool userLoggedIn: false