Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Диплом-DESKTOP-T5SUMLS.docx
Скачиваний:
10
Добавлен:
07.02.2016
Размер:
1.16 Mб
Скачать
    1. Інструкція для користувача

Перед використанням додатку необхідно зареєструватися на сайті http://www.theoldreader.com. При першому запуску додатку буде запропоновано ввести ваш логін та пароль, як показано на рис. 1.

Рис. 3.3. Вікно вводу логіна та пароля

Після авторизації додаток оновить усі, існуючі в профілі, користувача підписки, та надалі буде автоматично слідкувати за їх оновленням, а у разі появи нових записів повідомить про це користувача за допомогою центру повідомлень Windows 10 та позначкою на плитці додатку.

Рис. 3.4. Робоче вікно програми

Рис. 3.5. Робоче вікно програми на мобільному пристрої

Також у користувача є можливість відмітити всі нові записи прочитаними, та оновити всі підписки вручну як видно на рис. 2.

Панель зліва дозволяє перемикатися між теками користувача (всі записи, обрані, улюблені). Натиснувши на кнопку з трьома горизонтальними лініями зверху, панель розшириться та покаже підписи до всіх кнопок що на ній знаходяться, див. рис. 3.

Рис. 3.6. Робоче вікно програми з розгорнутою панеллю

Рис. 3.7. Робоче вікно програми з розгорнутою панеллю на мобільному пристрої

Натиснувши на новину вона відкриється в головному вікні з повним її змістом і автоматично буде помічена як прочитана, також з’являться кнопки для додавання цієї новини в улюблені або в обрані записи за допомогою кнопок на верхній панелі, як показано на рис. 4.

Рис. 3.8. Робоче вікно з контентом новини

Рис. 3.9. Робоче вікно з контентом новини на мобільному пристрої

    1. Вихідний код програмного продукту

Клас для роботи з API сервера:

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Net;

using System.Net.Http;

using System.Net.Http.Headers;

using System.Text;

using System.Threading.Tasks;

using Windows.UI.Popups;

namespace TheOldReader_WinX

{

class TheOldReader

{

private const String APIEndPoint = "https://theoldreader.com/reader/api/0/";

private string _token;

public string token

{

get { return _token; }

set { _token = "GoogleLogin auth=" + value; }

}

public async Task<bool> LogIn(string user, string pwd)

{

var output = await Post("https://theoldreader.com/reader/api/0/accounts/ClientLogin",

String.Format("client=TheOldReaderWX&accountType=HOSTED_OR_GOOGLE&service=reader&Email={0}&Passwd={1}", user, pwd));

try

{

token = output.Substring(output.IndexOf("Auth=")).Replace("Auth=", "");

return true;

}

catch

{

return false;

}

}

private async Task<string> Post(String URI, String _PostData)

{

var client = new HttpClient();

client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization: ", token);

HttpResponseMessage wcfResponse = await client.PostAsync(new Uri(URI), new StringContent(_PostData, Encoding.UTF8, "application/x-www-form-urlencoded"));

return await wcfResponse.Content.ReadAsStringAsync();

}

private async Task<string> Get(String URI)

{

var client = new HttpClient();

client.BaseAddress = new Uri(URI);

client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization: ", token);

return await client.GetStringAsync(URI);

}

#region Params

public async Task<string> getTagList()

{

String API = "tag/list?output=json";

String URI = APIEndPoint + API;

return await Get(URI);

}

public async Task<string> getSubscriptionList()

{

String API = "subscription/list?output=json";

String URI = APIEndPoint + API;

return await Get(URI);

}

public async Task<string> getUnreadCount()

{

String API = "unread-count?output=json";

String URI = APIEndPoint + API;

return await Get(URI);

}

public async Task<string> getUserInfo()

{

String API = "user-info?output=json";

String URI = APIEndPoint + API;

return await Get(URI);

}

public async Task<string> getMoreItemsForSubscription(String SubName, int ItemCount, String Continuation)

{

String URI = String.Format("{0}stream/contents?output=json&n={2}&c={3}&s={1}", APIEndPoint, SubName, ItemCount, Continuation);

return await Get(URI);

}

public async Task<string> getItemsForSubscription(String SubName, int ItemCount)

{

String URI = String.Format("{0}stream/contents?output=json&n={2}&s={1}", APIEndPoint, SubName, ItemCount);

return await Get(URI);

}

public async Task<string> getUnreadItemsForSubscription(String SubName, int ItemCount)

{

String URI = String.Format("{0}stream/contents?output=json&xt=user/-/state/com.google/read&n={2}&s={1}", APIEndPoint, SubName, ItemCount);

return await Get(URI);

}

//Получить все непрочитанные записи

public async Task<string> getAllUnreadItems(int ItemCount)

{

String URI = String.Format("{0}stream/contents?output=json&xt=user/-/state/com.google/read&n={2}&s={1}", APIEndPoint, "user/-/state/com.google/reading-list", ItemCount);

return await Get(URI);

}

//Получить все избранные записи

public async Task<string> getStarredItems()

{

String URI = String.Format("{0}stream/contents?output=json&xt=user/-/state/com.google/read&n={2}&s={1}", APIEndPoint, "user/-/state/com.google/starred", 1000);

return await Get(URI);

}

//Получить все понравившиеся записи

public async Task<string> getLikedItems()

{

String URI = String.Format("{0}stream/contents?output=json&xt=user/-/state/com.google/read&n={2}&s={1}", APIEndPoint, "user/-/state/com.google/like", 1000);

return await Get(URI);

}

//Отметить запись прочитанной

public async Task<string> markFeedItemRead(string ItemId, bool bRead)

{

String PostData = String.Format("{0}=user/-/state/com.google/read&i={1}", bRead ? "a" : "r", ItemId);

return await Post(APIEndPoint + "edit-tag", PostData);

}

//Отметить все прочитанными

public async Task<string> markAllItemsAsRead(string FeedId)

{

String PostData = String.Format("s={0}", FeedId);

return await Post(APIEndPoint + "mark-all-as-read", PostData);

}

//Отметить несколько записей прочитанными

public async Task<string> markFeedItemsRead(List<string> ItemIds, bool Read)

{

return await changeTagOfItems("user/-/state/com.google/read", ItemIds, Read);

}

//Отметить звездочкой

public async Task<string> starItem(string FeedId, bool Starred)

{

String szPostData = String.Format("{0}={2}&i={1}", Starred ? "a" : "r", FeedId, "user/-/state/com.google/starred");

return await Post(APIEndPoint + "edit-tag", szPostData);

}

//Отметить звездочкой несколько записей

public async Task<string> starItems(List<string> FeedIds, bool Starred)

{

return await changeTagOfItems("user/-/state/com.google/starred", FeedIds, Starred);

}

//Изменить тег нескольких записей

private async Task<string> changeTagOfItems(string TagName, List<string> FeedIds, bool Add)

{

if (FeedIds != null && FeedIds.Count > 0)

{

StringBuilder sb = new StringBuilder();

sb.AppendFormat("{0}={1}", Add ? "a" : "r", TagName);

foreach (String curItemId in FeedIds)

sb.AppendFormat("&i={0}", curItemId);

String PostData = sb.ToString();

return await Post(APIEndPoint + "edit-tag", PostData);

}

return "";

}

//Переметить подписку в папку

public async Task<string> moveSubscriptionToFolder(string feedId, string folderId)

{

String PostData = "";

if (!String.IsNullOrEmpty(folderId) && folderId != "user/-/state/com.google/reading-list")

PostData = String.Format("ac=edit&s={0}&a={1}", feedId, folderId);

else

PostData = String.Format("ac=edit&s={0}&r={1}", feedId, folderId);

return await Post(APIEndPoint + "subscription/edit", PostData);

}

//Подписаться

public async Task<string> addSubscription(string FeedUrl)

{

String PostData = "";

return await Post(APIEndPoint + "subscription/quickadd?quickadd=" + FeedUrl, PostData);

}

//Отписаться

public async Task<string> unsubscribe(string feedId)

{

String PostData = String.Format("ac=unsubscribe&s={0}", feedId);

return await Post(APIEndPoint + "subscription/edit", PostData);

}

#endregion

}

}