import app::http_request
import app::data_store
import android::aware
-import json::serialization
+import json
import model
# Delay in seconds before the next request after an error
-fun request_delay_on_error: Int do return 60
+fun request_delay_on_error: Float do return 60.0
-redef class App
- redef fun on_create
- do
- # Create the main window
- window = new TnitterWindow
- super
- end
-end
-
-# Main window
-class TnitterWindow
- super Window
+redef class Window
private var layout = new VerticalLayout(parent=self)
private var list_posts = new ListLayout(parent=layout)
# Update the screen to show the new `posts`
fun apply_update(posts: Array[Post])
do
- layout.remove list_posts
- list_posts = new ListLayout(parent=layout)
+ list_posts.clear
for post in posts do
var line = new VerticalLayout(parent=list_posts)
var author = new LabelAuthor(parent=line, text="@"+post.user)
abstract class AsyncTnitterRequest
super AsyncHttpRequest
- private var window: TnitterWindow
+ private var window: Window
- redef fun rest_server_uri do return tnitter_server_uri
+ redef fun uri_root do return tnitter_server_uri
- redef var rest_action
+ redef var uri_tail
# Should this request be delayed by `request_delay_on_error` seconds?
- var delay: Bool
-
- redef fun main
- do
- if delay then nanosleep(request_delay_on_error, 0)
- return super
- end
+ fun after_error(value: Bool) is autoinit do if value then delay = request_delay_on_error
end
# Async request to list latest posts, either immediately or by push notification
class ListPostRequest
super AsyncTnitterRequest
- redef fun on_load(posts)
+ redef fun on_load(posts, status)
do
# Deal with server-side errors
if posts isa Error then
- print_error "Server Error: '{posts.message}' from '{rest_server_uri / rest_action}'"
+ print_error "Server Error: '{posts.message}' from '{uri}'"
return
end
redef fun on_fail(error)
do
- print "Warning: Request {rest_server_uri/rest_action} failed with {error}"
+ print "Warning: Request {uri} failed with {error}"
window.request_full_list_on_error
end
end