This repository has been archived on 2022-02-10. You can view files and clone it, but cannot push or open issues or pull requests.
rangitaki-desktop/web/api.dart

120 lines
3.0 KiB
Dart

import 'dart:async';
import 'dart:html';
import 'dart:convert';
import 'package:polymer_elements/paper_item.dart';
import 'article-view.dart';
/**
* Easily connects with the Rangitaki API and does also a part of the frontend.
*/
class RangitakiConnect {
String baseurl;
String _username;
String _password;
String _auth;
/**
* Initializer for RangitaiConnect.
* @value baseurl Root URL of your Rangitaki installation.
* @value username Username for authentication.
* @value password Password for authentication.
*/
RangitakiConnect(this.baseurl, this._username, this._password) {
_auth = BASE64.encode(UTF8.encode("$_username:$_password"));
}
/**
* Fetch all blogs from the server and list them in the #list element.
*/
Future addBlogs() async {
var data = await _getBlogs();
data = JSON.decode(data);
for (String blog in data) {
blog = blog.substring(0, blog.length - 3);
PaperItem item = new PaperItem();
item.text = blog;
item.id = blog;
querySelector("#main-list").children.add(item);
}
}
/**
* Fetch all articles of a blog from the server and list the in the #list
* element.
* @value blog Blog for which the articles shoul be fetched.
*/
Future addArticles(String blog) async {
var data = await _getArticles(blog);
data = JSON.decode(data);
for (String article in data) {
article = article.substring(0, article.length - 3);
PaperItem item = new PaperItem();
item.text = article;
item.id = article;
querySelector("#main-list").children.add(item);
}
}
Future showArticle(String blog, String post, ArticleView articleView) async {
var data = await _getArticle(blog, post);
print(data);
data = JSON.decode(data);
List tags = data['tags'];
String tag = tags.join(", ");
print("Tags: $tag");
print("ArticleView: $articleView");
articleView
..title = data['title']
..author = data['author']
..date = data['date']
..tags = tag
..text = data['text'];
}
/**
* Internal method for fetching blogs from the server.
*/
Future _getBlogs() async {
String _url = "$baseurl/rcc/api/list/";
return (await
HttpRequest.request(
_url, withCredentials: true,
requestHeaders: {'authorization' : 'Basic $_auth'}
)).responseText;
}
/**
* Internal method for fetching articles of blog from the server.
*/
Future _getArticles(String blog) async {
String _url = "$baseurl/rcc/api/list/?blog=$blog";
return (await
HttpRequest.request(
_url, withCredentials: true,
requestHeaders: {'authorization' : 'Basic $_auth'}
)).responseText;
}
Future _getArticle(blog, post) async {
print("Blog: $blog");
print("Post: $post");
String _url = "$baseurl/rcc/api/post/?blog=$blog&post=$post.md";
print("URL: $_url");
return (await
HttpRequest.request(_url, withCredentials: true,
requestHeaders: {'authorization' : 'Basic $_auth'}
)).responseText;
}
}