Compare commits
167 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0209d1a5b1 | |||
| aade66eef8 | |||
| 81394b9171 | |||
| c3a9f921eb | |||
| 9890a9c8b4 | |||
| bfc63bc55d | |||
| 5d1f05f91d | |||
| eb89784117 | |||
| ab3b532e30 | |||
| 960fd56d6c | |||
| 0dff3dc3de | |||
| a0fce1a5fb | |||
| 4260a3f10d | |||
| 284b7d16c1 | |||
| 6bd23cb4fe | |||
| 000c821661 | |||
| 281034a16d | |||
| 8248f90b5b | |||
| 7edc82d726 | |||
| 00b44e917e | |||
| e6e242f7c1 | |||
| 1c2c85ad05 | |||
| ed087ffdf5 | |||
| e3b571d98b | |||
| 2db1dadc38 | |||
| f9e68da5ef | |||
| 18202a16de | |||
| 5e04409310 | |||
| aa51acc5de | |||
| 48e75d21c0 | |||
| bc2b17cc20 | |||
| d227cc535f | |||
| 49436e0aaa | |||
| c52bffcd95 | |||
| a1a56668a0 | |||
| 4998db08a6 | |||
| ded764c9cd | |||
| 80f8a2231e | |||
| b3a794436a | |||
| 9c597db11c | |||
| b16339db98 | |||
| 459d034aa2 | |||
| b8d211e151 | |||
| c31b771cdb | |||
| fc7d2a7eaf | |||
| 77af7cf20e | |||
| b284cfc7cc | |||
| 51aa7c9fdf | |||
| 451190daee | |||
| 9af20d05dc | |||
| f62820e069 | |||
| 816e06269f | |||
| e0f96a092c | |||
| 0301bbaf10 | |||
| 5266f220e9 | |||
| c83971b4cc | |||
| 1567709ace | |||
| 342f16fb8e | |||
| 423be2df5f | |||
| 1605740107 | |||
| b7b92d87ed | |||
| 01c36a047a | |||
| 140e645e86 | |||
| 97919cdd18 | |||
| 761d670c65 | |||
| 1ca93bf07f | |||
| 556e8004f3 | |||
| 7cad855f9c | |||
| 366908a070 | |||
| d141c7b255 | |||
| 8531d20162 | |||
| 4f42ed719a | |||
| b46cc56362 | |||
| 500bd1c65d | |||
| a207ca7ca4 | |||
| 07c9f06f75 | |||
| a1ff132ba9 | |||
| 82896d6fb4 | |||
| 36683c7402 | |||
| 4e5a8ab096 | |||
| 47baa0fd97 | |||
| ec25258de9 | |||
| 6999185c96 | |||
| 7669d8880e | |||
| 38b6a62686 | |||
| 0f7f626d15 | |||
| 81f099d419 | |||
| ec006b298d | |||
| 4fa0ee29fe | |||
| c21abd5f21 | |||
| facba2894d | |||
| 585c203f9a | |||
| 07357b9327 | |||
| 75e6a23905 | |||
| 44c4bc11db | |||
| d3d8937c60 | |||
| b2113eb065 | |||
| 13664c4201 | |||
| 13c98e2d59 | |||
| 7b14044c53 | |||
| 0be1efb2df | |||
| 13e029a98a | |||
| c6cf19ba4d | |||
| 50c15ad6ce | |||
| 670fecb1e0 | |||
| 85c4ca2c65 | |||
| 0183a727ce | |||
| 25bb5028a5 | |||
| 3201160d66 | |||
| 996755ef50 | |||
| 6e6cef138a | |||
| bcb833ad0d | |||
| e33ec074fe | |||
| a2e68af4dc | |||
| ab5361c370 | |||
| 4718faf76a | |||
| f6e7594233 | |||
| c39f8ec7f0 | |||
| c1981bbb24 | |||
| 425faf7a90 | |||
| a1fae6b3ce | |||
| 84981a5de3 | |||
| 5480cebe49 | |||
| 3fca5a059b | |||
| 5854c0c04f | |||
| e2ca21b3be | |||
| 178920008b | |||
| 67c48839d9 | |||
| e2bf62e506 | |||
| 31c69fb12b | |||
| 42693a967e | |||
| 29f57085aa | |||
| 5ba027bafc | |||
| 33e6e9b02d | |||
| 44376c0852 | |||
| a643e5c556 | |||
| b2ce585966 | |||
| 6f6d054044 | |||
| ff4fae1d35 | |||
| f5c8d45013 | |||
| ad40a25b0b | |||
| eb3ac1f152 | |||
| 3bff4d823f | |||
| 0427399746 | |||
| ee989fc019 | |||
| 2a9c30a69b | |||
| 95d7a5d993 | |||
| bf5d8a50ce | |||
| 10e9575303 | |||
| feff91ffd8 | |||
| 50d896c670 | |||
| f0ffeb5a68 | |||
| 6b3819b87b | |||
| 8df2836563 | |||
| d856e75e76 | |||
| 82c9ecd6b5 | |||
| 7147d8022e | |||
| b1888ac20e | |||
| cb8d1d9d43 | |||
| 2b932d4c07 | |||
| bc30ea613a | |||
| b1b145204e | |||
| 01be59b347 | |||
| af3e2b400b | |||
| 396cf69a40 | |||
| 088f6a4e0e | |||
| 25a25472b3 |
@@ -0,0 +1,23 @@
|
|||||||
|
# Auto detect text files and perform LF normalization
|
||||||
|
* text
|
||||||
|
|
||||||
|
# Don't check these into the repo as LF to work around TeamCity bug
|
||||||
|
*.xml -text
|
||||||
|
*.targets -text
|
||||||
|
|
||||||
|
# Custom for Visual Studio
|
||||||
|
*.cs diff=csharp
|
||||||
|
*.sln merge=union
|
||||||
|
*.csproj merge=union
|
||||||
|
*.vbproj merge=union
|
||||||
|
*.fsproj merge=union
|
||||||
|
*.dbproj merge=union
|
||||||
|
|
||||||
|
# Denote all files that are truly binary and should not be modified.
|
||||||
|
*.dll binary
|
||||||
|
*.exe binary
|
||||||
|
*.png binary
|
||||||
|
*.ico binary
|
||||||
|
*.snk binary
|
||||||
|
*.pdb binary
|
||||||
|
*.svg binary
|
||||||
@@ -142,6 +142,9 @@ UpgradeLog*.htm
|
|||||||
App_Data/*.mdf
|
App_Data/*.mdf
|
||||||
App_Data/*.ldf
|
App_Data/*.ldf
|
||||||
|
|
||||||
|
.vs
|
||||||
|
.nuget
|
||||||
|
|
||||||
# =========================
|
# =========================
|
||||||
# Windows detritus
|
# Windows detritus
|
||||||
# =========================
|
# =========================
|
||||||
|
|||||||
@@ -1,3 +1,80 @@
|
|||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
### 4.2.0 (2015-12-05)
|
||||||
|
|
||||||
|
- Update packages
|
||||||
|
- Remove decompression from HttpClient so it works with UWP
|
||||||
|
|
||||||
|
### 4.1.6 (2014-08-28)
|
||||||
|
|
||||||
|
- Fix DateTime conversion issue (from local to UTC)
|
||||||
|
|
||||||
|
>>>>>>> simple
|
||||||
|
### 4.1.5 (2014-07-27)
|
||||||
|
|
||||||
|
- Fix StackOverflow bug in PocketItem equality overload (fixes #28)
|
||||||
|
|
||||||
|
### 4.1.4 (2014-07-18)
|
||||||
|
|
||||||
|
- Implement WebAuthenticationBroker-view toggle
|
||||||
|
|
||||||
|
### 4.1.3 (2014-06-25)
|
||||||
|
|
||||||
|
- Only dispose response if available
|
||||||
|
|
||||||
|
### 4.1.2 (2014-06-18)
|
||||||
|
|
||||||
|
- Add force param to login+registration
|
||||||
|
|
||||||
|
### 4.1.1 (2014-06-17)
|
||||||
|
|
||||||
|
- Fix batch adding bug
|
||||||
|
|
||||||
|
|
||||||
|
### 4.1.0 (2014-06-16)
|
||||||
|
|
||||||
|
- Include access to the Article View API
|
||||||
|
|
||||||
|
### 4.0.0 (2014-04-03)
|
||||||
|
|
||||||
|
- Support for Universal apps (dropped SL and WP7 support)
|
||||||
|
|
||||||
|
### 3.2.0 (2014-03-13)
|
||||||
|
|
||||||
|
- add raw JSON to each PocketItem (PR #22)
|
||||||
|
|
||||||
|
### 3.1.1 (2014-02-23)
|
||||||
|
|
||||||
|
- fix SendActions when sending _add_ requests (fixes #20)
|
||||||
|
- try to normalize URIs retrieved in video array
|
||||||
|
|
||||||
|
### 3.1.0 (2014-02-07)
|
||||||
|
|
||||||
|
- Use FullTitle if no other title props are available
|
||||||
|
- Default mobile authentication screen with toggle for desktop (fixes #17)
|
||||||
|
- Use new registration endpoint
|
||||||
|
|
||||||
|
### 3.0.2 (2013-12-27)
|
||||||
|
|
||||||
|
- assign given_url to `Uri` when item couldn't be resolved by Pocket
|
||||||
|
|
||||||
|
### 3.0.1 (2013-12-15)
|
||||||
|
|
||||||
|
- added `PreRequest` to interface
|
||||||
|
|
||||||
|
### 3.0.0 (2013-12-15)
|
||||||
|
|
||||||
|
- `cancellationToken` support for all methods
|
||||||
|
- Toggle inclusion of title in PocketArticle.Content
|
||||||
|
- Make setters for inline objects in PocketItem (images, videos, ...)
|
||||||
|
- IPocketClient interface
|
||||||
|
- PreRequest callback allows injection of `Action<string>` before every request
|
||||||
|
- `lastHeaders` and `lastRequestData` in PocketClient for better debugging
|
||||||
|
- Submit multiple actions in one request with `SendActions`
|
||||||
|
- New `IsVideo`, `IsImage` and `ResolvedId` as new properties in PocketItem
|
||||||
|
- Split PocketReader into own NuGet package
|
||||||
|
- A lot of bugfixes
|
||||||
|
|
||||||
### 2.2.2 (2013-11-01)
|
### 2.2.2 (2013-11-01)
|
||||||
|
|
||||||
- Password validation in RegisterAccount
|
- Password validation in RegisterAccount
|
||||||
@@ -9,13 +86,13 @@
|
|||||||
### 2.2.0 (2013-10-26)
|
### 2.2.0 (2013-10-26)
|
||||||
|
|
||||||
- Made `GetAccessCode` obsolete
|
- Made `GetAccessCode` obsolete
|
||||||
- Return username after authentication with `GetUser` (thanks to [ScottIsAFool](https://github.com/ScottIsAFool))
|
- Return username after authentication with `GetUser`
|
||||||
|
|
||||||
### 2.1.0 (2013-10-25)
|
### 2.1.0 (2013-10-25)
|
||||||
|
|
||||||
- Rename `Statistics()` to `GetUserStatistics()`
|
- Rename `Statistics()` to `GetUserStatistics()`
|
||||||
- Made `CallbackUri` public (thanks to [ScottIsAFool](https://github.com/ScottIsAFool))
|
- Made `CallbackUri` public
|
||||||
- Added Fody/PropertyChanged (thanks to [ScottIsAFool](https://github.com/ScottIsAFool))
|
- Added Fody/PropertyChanged
|
||||||
- Method `GetUsageLimits()` to retrieve API usage limits
|
- Method `GetUsageLimits()` to retrieve API usage limits
|
||||||
- Add PORTABLE constant to SgmlReader
|
- Add PORTABLE constant to SgmlReader
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
Copyright (c) 2013 cee, Tobias Klika
|
Copyright (c) 2015 cee, Tobias Klika
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person
|
Permission is hereby granted, free of charge, to any person
|
||||||
obtaining a copy of this software and associated documentation
|
obtaining a copy of this software and associated documentation
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
x:Class="PocketSharp.Silverlight.App"
|
|
||||||
>
|
|
||||||
<Application.Resources>
|
|
||||||
|
|
||||||
</Application.Resources>
|
|
||||||
</Application>
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Documents;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using System.Windows.Media;
|
|
||||||
using System.Windows.Media.Animation;
|
|
||||||
using System.Windows.Shapes;
|
|
||||||
|
|
||||||
namespace PocketSharp.Silverlight
|
|
||||||
{
|
|
||||||
public partial class App : Application
|
|
||||||
{
|
|
||||||
|
|
||||||
public App()
|
|
||||||
{
|
|
||||||
this.Startup += this.Application_Startup;
|
|
||||||
this.Exit += this.Application_Exit;
|
|
||||||
this.UnhandledException += this.Application_UnhandledException;
|
|
||||||
|
|
||||||
InitializeComponent();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Application_Startup(object sender, StartupEventArgs e)
|
|
||||||
{
|
|
||||||
this.RootVisual = new MainPage();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Application_Exit(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
|
|
||||||
{
|
|
||||||
// If the app is running outside of the debugger then report the exception using
|
|
||||||
// the browser's exception mechanism. On IE this will display it a yellow alert
|
|
||||||
// icon in the status bar and Firefox will display a script error.
|
|
||||||
if (!System.Diagnostics.Debugger.IsAttached)
|
|
||||||
{
|
|
||||||
|
|
||||||
// NOTE: This will allow the application to continue running after an exception has been thrown
|
|
||||||
// but not handled.
|
|
||||||
// For production applications this error handling should be replaced with something that will
|
|
||||||
// report the error to the website and stop the application.
|
|
||||||
e.Handled = true;
|
|
||||||
Deployment.Current.Dispatcher.BeginInvoke(delegate { ReportErrorToDOM(e); });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ReportErrorToDOM(ApplicationUnhandledExceptionEventArgs e)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
string errorMsg = e.ExceptionObject.Message + e.ExceptionObject.StackTrace;
|
|
||||||
errorMsg = errorMsg.Replace('"', '\'').Replace("\r\n", @"\n");
|
|
||||||
|
|
||||||
System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight Application " + errorMsg + "\");");
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
<UserControl
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" x:Class="PocketSharp.Silverlight.MainPage"
|
|
||||||
mc:Ignorable="d"
|
|
||||||
d:DesignHeight="300" d:DesignWidth="400">
|
|
||||||
|
|
||||||
<Grid x:Name="LayoutRoot" Background="White">
|
|
||||||
<Button Content="Load Items" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="380" Height="34" Click="Button_Click"/>
|
|
||||||
|
|
||||||
<sdk:DataGrid x:Name="Content" HorizontalAlignment="Left" Height="241" Margin="10,49,0,0" VerticalAlignment="Top" Width="380" FrozenColumnCount="2"/>
|
|
||||||
|
|
||||||
</Grid>
|
|
||||||
</UserControl>
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.ObjectModel;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Documents;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using System.Windows.Media;
|
|
||||||
using System.Windows.Media.Animation;
|
|
||||||
using System.Windows.Shapes;
|
|
||||||
|
|
||||||
namespace PocketSharp.Silverlight
|
|
||||||
{
|
|
||||||
public partial class MainPage : UserControl
|
|
||||||
{
|
|
||||||
ObservableCollection<Site> _Sites = new ObservableCollection<Site>();
|
|
||||||
|
|
||||||
public ObservableCollection<Site> Sites { get { return _Sites; } }
|
|
||||||
|
|
||||||
public class Site
|
|
||||||
{
|
|
||||||
public string Url { get; set; }
|
|
||||||
public string Content { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public MainPage()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private async void Button_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
// !! please don't misuse this account !!
|
|
||||||
PocketClient client = new PocketClient(
|
|
||||||
consumerKey: "15396-f6f92101d72c8e270a6c9bb3",
|
|
||||||
callbackUri: "http://frontendplay.com",
|
|
||||||
accessCode: "2c62cd50-b78a-5558-918b-65adae"
|
|
||||||
);
|
|
||||||
|
|
||||||
List<PocketSharp.Models.PocketItem> items = null;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
items = await client.Get();
|
|
||||||
|
|
||||||
items.ForEach(item =>
|
|
||||||
{
|
|
||||||
Sites.Add(new Site()
|
|
||||||
{
|
|
||||||
Content = item.Title,
|
|
||||||
Url = item.Uri.ToString()
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
Content.ItemsSource = Sites;
|
|
||||||
}
|
|
||||||
catch (PocketException ex)
|
|
||||||
{
|
|
||||||
Debug.WriteLine(ex.Message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,158 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
|
||||||
<ProductVersion>8.0.50727</ProductVersion>
|
|
||||||
<SchemaVersion>2.0</SchemaVersion>
|
|
||||||
<ProjectGuid>{656345D2-AF4C-4F88-9C9F-EBF54D7691DB}</ProjectGuid>
|
|
||||||
<ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
|
|
||||||
<OutputType>Library</OutputType>
|
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
|
||||||
<RootNamespace>PocketSharp.Silverlight</RootNamespace>
|
|
||||||
<AssemblyName>PocketSharp.Silverlight</AssemblyName>
|
|
||||||
<TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier>
|
|
||||||
<TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
|
|
||||||
<SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>
|
|
||||||
<SilverlightApplication>true</SilverlightApplication>
|
|
||||||
<SupportedCultures>
|
|
||||||
</SupportedCultures>
|
|
||||||
<XapOutputs>true</XapOutputs>
|
|
||||||
<GenerateSilverlightManifest>true</GenerateSilverlightManifest>
|
|
||||||
<XapFilename>PocketSharp.Silverlight.xap</XapFilename>
|
|
||||||
<SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>
|
|
||||||
<SilverlightAppEntry>PocketSharp.Silverlight.App</SilverlightAppEntry>
|
|
||||||
<TestPageFileName>PocketSharp.SilverlightTestPage.html</TestPageFileName>
|
|
||||||
<CreateTestPage>true</CreateTestPage>
|
|
||||||
<ValidateXaml>true</ValidateXaml>
|
|
||||||
<EnableOutOfBrowser>false</EnableOutOfBrowser>
|
|
||||||
<OutOfBrowserSettingsFile>Properties\OutOfBrowserSettings.xml</OutOfBrowserSettingsFile>
|
|
||||||
<UsePlatformExtensions>false</UsePlatformExtensions>
|
|
||||||
<ThrowErrorsInValidation>true</ThrowErrorsInValidation>
|
|
||||||
<LinkedServerProject>
|
|
||||||
</LinkedServerProject>
|
|
||||||
<ExpressionBlendVersion>12.0.40612.10</ExpressionBlendVersion>
|
|
||||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
|
|
||||||
<RestorePackages>true</RestorePackages>
|
|
||||||
</PropertyGroup>
|
|
||||||
<!-- This property group is only here to support building this project using the
|
|
||||||
MSBuild 3.5 toolset. In order to work correctly with this older toolset, it needs
|
|
||||||
to set the TargetFrameworkVersion to v3.5 -->
|
|
||||||
<PropertyGroup Condition="'$(MSBuildToolsVersion)' == '3.5'">
|
|
||||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>Bin\Debug</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE;SILVERLIGHT</DefineConstants>
|
|
||||||
<NoStdLib>true</NoStdLib>
|
|
||||||
<NoConfig>true</NoConfig>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>Bin\Release</OutputPath>
|
|
||||||
<DefineConstants>TRACE;SILVERLIGHT</DefineConstants>
|
|
||||||
<NoStdLib>true</NoStdLib>
|
|
||||||
<NoConfig>true</NoConfig>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Reference Include="Microsoft.Threading.Tasks">
|
|
||||||
<HintPath>..\..\packages\Microsoft.Bcl.Async.1.0.16\lib\sl4\Microsoft.Threading.Tasks.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.Threading.Tasks.Extensions">
|
|
||||||
<HintPath>..\..\packages\Microsoft.Bcl.Async.1.0.16\lib\sl4\Microsoft.Threading.Tasks.Extensions.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.Threading.Tasks.Extensions.Silverlight">
|
|
||||||
<HintPath>..\..\packages\Microsoft.Bcl.Async.1.0.16\lib\sl4\Microsoft.Threading.Tasks.Extensions.Silverlight.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="mscorlib" />
|
|
||||||
<Reference Include="System.ComponentModel.DataAnnotations" />
|
|
||||||
<Reference Include="System.IO, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
<HintPath>..\..\packages\Microsoft.Bcl.1.1.3\lib\sl5\System.IO.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Runtime, Version=2.6.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
<HintPath>..\..\packages\Microsoft.Bcl.1.1.3\lib\sl5\System.Runtime.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Threading.Tasks, Version=2.6.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
<HintPath>..\..\packages\Microsoft.Bcl.1.1.3\lib\sl5\System.Threading.Tasks.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Windows" />
|
|
||||||
<Reference Include="system" />
|
|
||||||
<Reference Include="System.Core">
|
|
||||||
<HintPath>$(TargetFrameworkDirectory)System.Core.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Net" />
|
|
||||||
<Reference Include="System.Windows.Controls.Data" />
|
|
||||||
<Reference Include="System.Windows.Controls.Data.Input" />
|
|
||||||
<Reference Include="System.Windows.Data" />
|
|
||||||
<Reference Include="System.Xml" />
|
|
||||||
<Reference Include="System.Windows.Browser" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Include="App.xaml.cs">
|
|
||||||
<DependentUpon>App.xaml</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="MainPage.xaml.cs">
|
|
||||||
<DependentUpon>MainPage.xaml</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ApplicationDefinition Include="App.xaml">
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
</ApplicationDefinition>
|
|
||||||
<Page Include="MainPage.xaml">
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
</Page>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="app.config" />
|
|
||||||
<None Include="packages.config" />
|
|
||||||
<None Include="Properties\AppManifest.xml" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\..\PocketSharp\PocketSharp.csproj">
|
|
||||||
<Project>{817200c3-a327-4e35-9b5f-63a51c088577}</Project>
|
|
||||||
<Name>PocketSharp</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" />
|
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
|
||||||
<Target Name="BeforeBuild">
|
|
||||||
</Target>
|
|
||||||
<Target Name="AfterBuild">
|
|
||||||
</Target>
|
|
||||||
-->
|
|
||||||
<ProjectExtensions>
|
|
||||||
<VisualStudio>
|
|
||||||
<FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">
|
|
||||||
<SilverlightProjectProperties />
|
|
||||||
</FlavorProperties>
|
|
||||||
</VisualStudio>
|
|
||||||
</ProjectExtensions>
|
|
||||||
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
|
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
|
||||||
<PropertyGroup>
|
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
|
|
||||||
</Target>
|
|
||||||
<Import Project="..\..\packages\Microsoft.Bcl.Build.1.0.10\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.10\tools\Microsoft.Bcl.Build.targets')" />
|
|
||||||
<Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
|
|
||||||
<Error Condition="!Exists('..\..\packages\Microsoft.Bcl.Build.1.0.10\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
|
|
||||||
<Error Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.10\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
|
|
||||||
</Target>
|
|
||||||
</Project>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
>
|
|
||||||
<Deployment.Parts>
|
|
||||||
</Deployment.Parts>
|
|
||||||
</Deployment>
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
using System.Reflection;
|
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
|
||||||
// set of attributes. Change these attribute values to modify the information
|
|
||||||
// associated with an assembly.
|
|
||||||
[assembly: AssemblyTitle("PocketSharp.Silverlight")]
|
|
||||||
[assembly: AssemblyDescription("")]
|
|
||||||
[assembly: AssemblyConfiguration("")]
|
|
||||||
[assembly: AssemblyCompany("")]
|
|
||||||
[assembly: AssemblyProduct("PocketSharp.Silverlight")]
|
|
||||||
[assembly: AssemblyCopyright("Copyright © 2013")]
|
|
||||||
[assembly: AssemblyTrademark("")]
|
|
||||||
[assembly: AssemblyCulture("")]
|
|
||||||
|
|
||||||
// Setting ComVisible to false makes the types in this assembly not visible
|
|
||||||
// to COM components. If you need to access a type in this assembly from
|
|
||||||
// COM, set the ComVisible attribute to true on that type.
|
|
||||||
[assembly: ComVisible(false)]
|
|
||||||
|
|
||||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
|
||||||
[assembly: Guid("656345d2-af4c-4f88-9c9f-ebf54d7691db")]
|
|
||||||
|
|
||||||
// Version information for an assembly consists of the following four values:
|
|
||||||
//
|
|
||||||
// Major Version
|
|
||||||
// Minor Version
|
|
||||||
// Build Number
|
|
||||||
// Revision
|
|
||||||
//
|
|
||||||
// You can specify all the values or you can default the Revision and Build Numbers
|
|
||||||
// by using the '*' as shown below:
|
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<configuration>
|
|
||||||
<runtime>
|
|
||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
</assemblyBinding>
|
|
||||||
</runtime>
|
|
||||||
</configuration>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<packages>
|
|
||||||
<package id="Microsoft.Bcl" version="1.1.3" targetFramework="sl50" />
|
|
||||||
<package id="Microsoft.Bcl.Async" version="1.0.16" targetFramework="sl50" />
|
|
||||||
<package id="Microsoft.Bcl.Build" version="1.0.10" targetFramework="sl50" />
|
|
||||||
</packages>
|
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<Application
|
||||||
|
x:Class="PocketSharp.UWP.App"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:local="using:PocketSharp.UWP"
|
||||||
|
RequestedTheme="Light">
|
||||||
|
|
||||||
|
</Application>
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
using System;
|
||||||
|
using Windows.ApplicationModel;
|
||||||
|
using Windows.ApplicationModel.Activation;
|
||||||
|
using Windows.UI.Xaml;
|
||||||
|
using Windows.UI.Xaml.Controls;
|
||||||
|
using Windows.UI.Xaml.Navigation;
|
||||||
|
|
||||||
|
namespace PocketSharp.UWP
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Provides application-specific behavior to supplement the default Application class.
|
||||||
|
/// </summary>
|
||||||
|
sealed partial class App : Application
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes the singleton application object. This is the first line of authored code
|
||||||
|
/// executed, and as such is the logical equivalent of main() or WinMain().
|
||||||
|
/// </summary>
|
||||||
|
public App()
|
||||||
|
{
|
||||||
|
this.InitializeComponent();
|
||||||
|
this.Suspending += OnSuspending;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Invoked when the application is launched normally by the end user. Other entry points
|
||||||
|
/// will be used such as when the application is launched to open a specific file.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="e">Details about the launch request and process.</param>
|
||||||
|
protected override void OnLaunched(LaunchActivatedEventArgs e)
|
||||||
|
{
|
||||||
|
Frame rootFrame = Window.Current.Content as Frame;
|
||||||
|
|
||||||
|
// Do not repeat app initialization when the Window already has content,
|
||||||
|
// just ensure that the window is active
|
||||||
|
if (rootFrame == null)
|
||||||
|
{
|
||||||
|
// Create a Frame to act as the navigation context and navigate to the first page
|
||||||
|
rootFrame = new Frame();
|
||||||
|
|
||||||
|
rootFrame.NavigationFailed += OnNavigationFailed;
|
||||||
|
|
||||||
|
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
|
||||||
|
{
|
||||||
|
//TODO: Load state from previously suspended application
|
||||||
|
}
|
||||||
|
|
||||||
|
// Place the frame in the current Window
|
||||||
|
Window.Current.Content = rootFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rootFrame.Content == null)
|
||||||
|
{
|
||||||
|
// When the navigation stack isn't restored navigate to the first page,
|
||||||
|
// configuring the new page by passing required information as a navigation
|
||||||
|
// parameter
|
||||||
|
rootFrame.Navigate(typeof(MainPage), e.Arguments);
|
||||||
|
}
|
||||||
|
// Ensure the current window is active
|
||||||
|
Window.Current.Activate();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Invoked when Navigation to a certain page fails
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender">The Frame which failed navigation</param>
|
||||||
|
/// <param name="e">Details about the navigation failure</param>
|
||||||
|
void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
|
||||||
|
{
|
||||||
|
throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Invoked when application execution is being suspended. Application state is saved
|
||||||
|
/// without knowing whether the application will be terminated or resumed with the contents
|
||||||
|
/// of memory still intact.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender">The source of the suspend request.</param>
|
||||||
|
/// <param name="e">Details about the suspend request.</param>
|
||||||
|
private void OnSuspending(object sender, SuspendingEventArgs e)
|
||||||
|
{
|
||||||
|
var deferral = e.SuspendingOperation.GetDeferral();
|
||||||
|
//TODO: Save application state and stop any background activity
|
||||||
|
deferral.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<Weavers>
|
<Weavers>
|
||||||
<PropertyChanged />
|
<PropertyChanged />
|
||||||
</Weavers>
|
</Weavers>
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<Page
|
||||||
|
x:Class="PocketSharp.UWP.MainPage"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:local="using:PocketSharp.UWP"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
DataContext="{Binding RelativeSource={RelativeSource Self}}">
|
||||||
|
|
||||||
|
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
|
||||||
|
<Grid x:Name="LayoutRoot" Background="Transparent">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
|
<!--TitlePanel contains the name of the application and page title-->
|
||||||
|
<StackPanel Grid.Row="0" Margin="12,17,0,28">
|
||||||
|
<Button Click="Button_Click">Load Data</Button>
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
<!--ContentPanel contains LongListSelector and LongListSelector ItemTemplate. Place additional content here-->
|
||||||
|
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
|
||||||
|
<ListView ItemsSource="{Binding Items}">
|
||||||
|
<ListView.ItemTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<StackPanel Margin="0,0,0,17">
|
||||||
|
<TextBlock Text="{Binding Title}" TextWrapping="Wrap" />
|
||||||
|
<TextBlock Text="{Binding Uri}" TextWrapping="Wrap" Margin="12,-6,12,0" />
|
||||||
|
</StackPanel>
|
||||||
|
</DataTemplate>
|
||||||
|
</ListView.ItemTemplate>
|
||||||
|
</ListView>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</Page>
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
using PocketSharp.Models;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Windows.UI.Xaml.Controls;
|
||||||
|
|
||||||
|
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
|
||||||
|
|
||||||
|
namespace PocketSharp.UWP
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// An empty page that can be used on its own or navigated to within a Frame.
|
||||||
|
/// </summary>
|
||||||
|
|
||||||
|
public sealed partial class MainPage : Page
|
||||||
|
{
|
||||||
|
public ObservableCollection<PocketItem> Items { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public MainPage()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
Items = new ObservableCollection<PocketItem>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task LoadData()
|
||||||
|
{
|
||||||
|
// !! please don't misuse this account !!
|
||||||
|
PocketClient client = new PocketClient(
|
||||||
|
consumerKey: "15396-f6f92101d72c8e270a6c9bb3",
|
||||||
|
callbackUri: "http://frontendplay.com",
|
||||||
|
accessCode: "80acf6c5-c198-03c0-b94c-e74402"
|
||||||
|
);
|
||||||
|
|
||||||
|
List<PocketSharp.Models.PocketItem> items = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
items = (await client.Get()).ToList();
|
||||||
|
foreach (var item in items)
|
||||||
|
{
|
||||||
|
Items.Add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (PocketException ex)
|
||||||
|
{
|
||||||
|
Debug.WriteLine(ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void Button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
await LoadData();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<Package
|
||||||
|
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
|
||||||
|
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
|
||||||
|
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
|
||||||
|
IgnorableNamespaces="uap mp">
|
||||||
|
|
||||||
|
<Identity
|
||||||
|
Name="17071047-817c-42b4-837d-8530fd36e521"
|
||||||
|
Publisher="CN=tobi"
|
||||||
|
Version="1.0.0.0" />
|
||||||
|
|
||||||
|
<mp:PhoneIdentity PhoneProductId="17071047-817c-42b4-837d-8530fd36e521" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
|
||||||
|
|
||||||
|
<Properties>
|
||||||
|
<DisplayName>PocketSharp.UWP</DisplayName>
|
||||||
|
<PublisherDisplayName>tobi</PublisherDisplayName>
|
||||||
|
<Logo>Assets\StoreLogo.png</Logo>
|
||||||
|
</Properties>
|
||||||
|
|
||||||
|
<Dependencies>
|
||||||
|
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
|
||||||
|
</Dependencies>
|
||||||
|
|
||||||
|
<Resources>
|
||||||
|
<Resource Language="x-generate"/>
|
||||||
|
</Resources>
|
||||||
|
|
||||||
|
<Applications>
|
||||||
|
<Application Id="App"
|
||||||
|
Executable="$targetnametoken$.exe"
|
||||||
|
EntryPoint="PocketSharp.UWP.App">
|
||||||
|
<uap:VisualElements
|
||||||
|
DisplayName="PocketSharp.UWP"
|
||||||
|
Square150x150Logo="Assets\Square150x150Logo.png"
|
||||||
|
Square44x44Logo="Assets\Square44x44Logo.png"
|
||||||
|
Description="PocketSharp.UWP"
|
||||||
|
BackgroundColor="transparent">
|
||||||
|
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png"/>
|
||||||
|
<uap:SplashScreen Image="Assets\SplashScreen.png" />
|
||||||
|
</uap:VisualElements>
|
||||||
|
</Application>
|
||||||
|
</Applications>
|
||||||
|
|
||||||
|
<Capabilities>
|
||||||
|
<Capability Name="internetClient" />
|
||||||
|
</Capabilities>
|
||||||
|
</Package>
|
||||||
@@ -0,0 +1,149 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||||
|
<ProjectGuid>{5CBB92EC-C1A2-4108-9A23-3B73DD138953}</ProjectGuid>
|
||||||
|
<OutputType>AppContainerExe</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>PocketSharp.UWP</RootNamespace>
|
||||||
|
<AssemblyName>PocketSharp.UWP</AssemblyName>
|
||||||
|
<DefaultLanguage>en-US</DefaultLanguage>
|
||||||
|
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
|
||||||
|
<TargetPlatformVersion>10.0.16299.0</TargetPlatformVersion>
|
||||||
|
<TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>
|
||||||
|
<MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||||
|
<PackageCertificateKeyFile>PocketSharp.UWP_TemporaryKey.pfx</PackageCertificateKeyFile>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||||
|
<NoWarn>;2008</NoWarn>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||||
|
<OutputPath>bin\x86\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<NoWarn>;2008</NoWarn>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<OutputPath>bin\ARM\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||||
|
<NoWarn>;2008</NoWarn>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<PlatformTarget>ARM</PlatformTarget>
|
||||||
|
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
|
||||||
|
<OutputPath>bin\ARM\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<NoWarn>;2008</NoWarn>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<PlatformTarget>ARM</PlatformTarget>
|
||||||
|
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||||
|
<NoWarn>;2008</NoWarn>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||||
|
<OutputPath>bin\x64\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<NoWarn>;2008</NoWarn>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->
|
||||||
|
<None Include="project.json" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="App.xaml.cs">
|
||||||
|
<DependentUpon>App.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="MainPage.xaml.cs">
|
||||||
|
<DependentUpon>MainPage.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<AppxManifest Include="Package.appxmanifest">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</AppxManifest>
|
||||||
|
<None Include="PocketSharp.UWP_TemporaryKey.pfx" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Include="FodyWeavers.xml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Content>
|
||||||
|
<Content Include="Properties\Default.rd.xml" />
|
||||||
|
<Content Include="Assets\LockScreenLogo.scale-200.png" />
|
||||||
|
<Content Include="Assets\SplashScreen.scale-200.png" />
|
||||||
|
<Content Include="Assets\Square150x150Logo.scale-200.png" />
|
||||||
|
<Content Include="Assets\Square44x44Logo.scale-200.png" />
|
||||||
|
<Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
|
||||||
|
<Content Include="Assets\StoreLogo.png" />
|
||||||
|
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ApplicationDefinition Include="App.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</ApplicationDefinition>
|
||||||
|
<Page Include="MainPage.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\PocketSharp\PocketSharp.csproj">
|
||||||
|
<Project>{0e22926c-7244-4a17-923c-84b46f5149c0}</Project>
|
||||||
|
<Name>PocketSharp</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
||||||
|
<VisualStudioVersion>14.0</VisualStudioVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
|
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
|
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
|
||||||
|
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
|
||||||
|
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">O:\PocketSharp\PocketSharp.Examples\PocketSharp.UWP\project.lock.json</ProjectAssetsFile>
|
||||||
|
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
|
||||||
|
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\tobi\.nuget\packages\;C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback\</NuGetPackageFolders>
|
||||||
|
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">ProjectJson</NuGetProjectStyle>
|
||||||
|
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">4.5.0</NuGetToolVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
|
<Import Project="$(NuGetPackageRoot)runtime.win10-x86.microsoft.net.uwpcoreruntimesdk\2.1.2\build\runtime.win10-x86.Microsoft.Net.UWPCoreRuntimeSdk.props" Condition="Exists('$(NuGetPackageRoot)runtime.win10-x86.microsoft.net.uwpcoreruntimesdk\2.1.2\build\runtime.win10-x86.Microsoft.Net.UWPCoreRuntimeSdk.props')" />
|
||||||
|
<Import Project="$(NuGetPackageRoot)runtime.win10-x64.microsoft.net.uwpcoreruntimesdk\2.1.2\build\runtime.win10-x64.Microsoft.Net.UWPCoreRuntimeSdk.props" Condition="Exists('$(NuGetPackageRoot)runtime.win10-x64.microsoft.net.uwpcoreruntimesdk\2.1.2\build\runtime.win10-x64.Microsoft.Net.UWPCoreRuntimeSdk.props')" />
|
||||||
|
<Import Project="$(NuGetPackageRoot)runtime.win10-arm.microsoft.net.uwpcoreruntimesdk\2.1.2\build\runtime.win10-arm.Microsoft.Net.UWPCoreRuntimeSdk.props" Condition="Exists('$(NuGetPackageRoot)runtime.win10-arm.microsoft.net.uwpcoreruntimesdk\2.1.2\build\runtime.win10-arm.Microsoft.Net.UWPCoreRuntimeSdk.props')" />
|
||||||
|
<Import Project="$(NuGetPackageRoot)microsoft.net.uwpcoreruntimesdk\2.1.2\build\Microsoft.Net.UWPCoreRuntimeSdk.props" Condition="Exists('$(NuGetPackageRoot)microsoft.net.uwpcoreruntimesdk\2.1.2\build\Microsoft.Net.UWPCoreRuntimeSdk.props')" />
|
||||||
|
<Import Project="C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback\microsoft.net.native.sharedlibrary-x86\2.0.0\build\Microsoft.Net.Native.SharedLibrary-x86.props" Condition="Exists('C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback\microsoft.net.native.sharedlibrary-x86\2.0.0\build\Microsoft.Net.Native.SharedLibrary-x86.props')" />
|
||||||
|
<Import Project="C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback\microsoft.net.native.sharedlibrary-x64\2.0.0\build\Microsoft.Net.Native.SharedLibrary-x64.props" Condition="Exists('C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback\microsoft.net.native.sharedlibrary-x64\2.0.0\build\Microsoft.Net.Native.SharedLibrary-x64.props')" />
|
||||||
|
<Import Project="C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback\microsoft.net.native.sharedlibrary-arm\2.0.0\build\Microsoft.Net.Native.SharedLibrary-arm.props" Condition="Exists('C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback\microsoft.net.native.sharedlibrary-arm\2.0.0\build\Microsoft.Net.Native.SharedLibrary-arm.props')" />
|
||||||
|
<Import Project="$(NuGetPackageRoot)microsoft.net.native.compiler\2.0.3\build\Microsoft.Net.Native.Compiler.props" Condition="Exists('$(NuGetPackageRoot)microsoft.net.native.compiler\2.0.3\build\Microsoft.Net.Native.Compiler.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
|
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
|
<Import Project="$(NuGetPackageRoot)runtime.win10-x86.microsoft.net.uwpcoreruntimesdk\2.1.2\build\runtime.win10-x86.Microsoft.Net.UWPCoreRuntimeSdk.targets" Condition="Exists('$(NuGetPackageRoot)runtime.win10-x86.microsoft.net.uwpcoreruntimesdk\2.1.2\build\runtime.win10-x86.Microsoft.Net.UWPCoreRuntimeSdk.targets')" />
|
||||||
|
<Import Project="$(NuGetPackageRoot)runtime.win10-x64.microsoft.net.uwpcoreruntimesdk\2.1.2\build\runtime.win10-x64.Microsoft.Net.UWPCoreRuntimeSdk.targets" Condition="Exists('$(NuGetPackageRoot)runtime.win10-x64.microsoft.net.uwpcoreruntimesdk\2.1.2\build\runtime.win10-x64.Microsoft.Net.UWPCoreRuntimeSdk.targets')" />
|
||||||
|
<Import Project="$(NuGetPackageRoot)runtime.win10-arm.microsoft.net.uwpcoreruntimesdk\2.1.2\build\runtime.win10-arm.Microsoft.Net.UWPCoreRuntimeSdk.targets" Condition="Exists('$(NuGetPackageRoot)runtime.win10-arm.microsoft.net.uwpcoreruntimesdk\2.1.2\build\runtime.win10-arm.Microsoft.Net.UWPCoreRuntimeSdk.targets')" />
|
||||||
|
<Import Project="C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback\netstandard.library\2.0.1\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback\netstandard.library\2.0.1\build\netstandard2.0\NETStandard.Library.targets')" />
|
||||||
|
<Import Project="$(NuGetPackageRoot)fody\3.0.0\build\Fody.targets" Condition="Exists('$(NuGetPackageRoot)fody\3.0.0\build\Fody.targets')" />
|
||||||
|
<Import Project="C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback\microsoft.net.native.sharedlibrary-x86\2.0.0\build\Microsoft.Net.Native.SharedLibrary-x86.targets" Condition="Exists('C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback\microsoft.net.native.sharedlibrary-x86\2.0.0\build\Microsoft.Net.Native.SharedLibrary-x86.targets')" />
|
||||||
|
<Import Project="C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback\microsoft.net.native.sharedlibrary-x64\2.0.0\build\Microsoft.Net.Native.SharedLibrary-x64.targets" Condition="Exists('C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback\microsoft.net.native.sharedlibrary-x64\2.0.0\build\Microsoft.Net.Native.SharedLibrary-x64.targets')" />
|
||||||
|
<Import Project="C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback\microsoft.net.native.sharedlibrary-arm\2.0.0\build\Microsoft.Net.Native.SharedLibrary-arm.targets" Condition="Exists('C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback\microsoft.net.native.sharedlibrary-arm\2.0.0\build\Microsoft.Net.Native.SharedLibrary-arm.targets')" />
|
||||||
|
<Import Project="$(NuGetPackageRoot)microsoft.net.native.compiler\2.0.3\build\Microsoft.Net.Native.Compiler.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.net.native.compiler\2.0.3\build\Microsoft.Net.Native.Compiler.targets')" />
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
||||||
@@ -1,20 +1,18 @@
|
|||||||
using System.Resources;
|
using System.Reflection;
|
||||||
using System.Reflection;
|
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
// set of attributes. Change these attribute values to modify the information
|
// set of attributes. Change these attribute values to modify the information
|
||||||
// associated with an assembly.
|
// associated with an assembly.
|
||||||
[assembly: AssemblyTitle("SgmlReader")]
|
[assembly: AssemblyTitle("PocketSharp.UWP")]
|
||||||
[assembly: AssemblyDescription("")]
|
[assembly: AssemblyDescription("")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCompany("")]
|
[assembly: AssemblyCompany("")]
|
||||||
[assembly: AssemblyProduct("SgmlReader")]
|
[assembly: AssemblyProduct("PocketSharp.UWP")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2013")]
|
[assembly: AssemblyCopyright("Copyright © 2015")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: NeutralResourcesLanguage("en")]
|
|
||||||
|
|
||||||
// Version information for an assembly consists of the following four values:
|
// Version information for an assembly consists of the following four values:
|
||||||
//
|
//
|
||||||
@@ -28,3 +26,4 @@ using System.Runtime.InteropServices;
|
|||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<!--
|
||||||
|
This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most
|
||||||
|
developers. However, you can modify these parameters to modify the behavior of the .NET Native
|
||||||
|
optimizer.
|
||||||
|
|
||||||
|
Runtime Directives are documented at http://go.microsoft.com/fwlink/?LinkID=391919
|
||||||
|
|
||||||
|
To fully enable reflection for App1.MyClass and all of its public/private members
|
||||||
|
<Type Name="App1.MyClass" Dynamic="Required All"/>
|
||||||
|
|
||||||
|
To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32
|
||||||
|
<TypeInstantiation Name="App1.AppClass" Arguments="System.Int32" Activate="Required Public" />
|
||||||
|
|
||||||
|
Using the Namespace directive to apply reflection policy to all the types in a particular namespace
|
||||||
|
<Namespace Name="DataClasses.ViewModels" Seralize="All" />
|
||||||
|
-->
|
||||||
|
|
||||||
|
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
|
||||||
|
<Application>
|
||||||
|
<!--
|
||||||
|
An Assembly element with Name="*Application*" applies to all assemblies in
|
||||||
|
the application package. The asterisks are not wildcards.
|
||||||
|
-->
|
||||||
|
<Assembly Name="*Application*" Dynamic="Required All" />
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Add your application specific runtime directives here. -->
|
||||||
|
|
||||||
|
|
||||||
|
</Application>
|
||||||
|
</Directives>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.NETCore.UniversalWindowsPlatform": "6.0.8",
|
||||||
|
"Newtonsoft.Json": "11.0.2",
|
||||||
|
"PropertyChanged.Fody": "2.4.0"
|
||||||
|
},
|
||||||
|
"frameworks": {
|
||||||
|
"uap10.0.15063": {}
|
||||||
|
},
|
||||||
|
"runtimes": {
|
||||||
|
"win10-arm": {},
|
||||||
|
"win10-arm-aot": {},
|
||||||
|
"win10-x86": {},
|
||||||
|
"win10-x86-aot": {},
|
||||||
|
"win10-x64": {},
|
||||||
|
"win10-x64-aot": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
<Application
|
|
||||||
x:Class="PocketSharp.WP8.App"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
|
|
||||||
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone">
|
|
||||||
|
|
||||||
<!--Application Resources-->
|
|
||||||
<Application.Resources>
|
|
||||||
<local:LocalizedStrings xmlns:local="clr-namespace:PocketSharp.WP8" x:Key="LocalizedStrings"/>
|
|
||||||
</Application.Resources>
|
|
||||||
|
|
||||||
<Application.ApplicationLifetimeObjects>
|
|
||||||
<!--Required object that handles lifetime events for the application-->
|
|
||||||
<shell:PhoneApplicationService
|
|
||||||
Launching="Application_Launching" Closing="Application_Closing"
|
|
||||||
Activated="Application_Activated" Deactivated="Application_Deactivated"/>
|
|
||||||
</Application.ApplicationLifetimeObjects>
|
|
||||||
|
|
||||||
</Application>
|
|
||||||
@@ -1,247 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Resources;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Markup;
|
|
||||||
using System.Windows.Navigation;
|
|
||||||
using Microsoft.Phone.Controls;
|
|
||||||
using Microsoft.Phone.Shell;
|
|
||||||
using PocketSharp.WP8.Resources;
|
|
||||||
using PocketSharp.WP8.ViewModels;
|
|
||||||
|
|
||||||
namespace PocketSharp.WP8
|
|
||||||
{
|
|
||||||
public partial class App : Application
|
|
||||||
{
|
|
||||||
private static MainViewModel viewModel = null;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A static ViewModel used by the views to bind against.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>The MainViewModel object.</returns>
|
|
||||||
public static MainViewModel ViewModel
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
// Delay creation of the view model until necessary
|
|
||||||
if (viewModel == null)
|
|
||||||
viewModel = new MainViewModel();
|
|
||||||
|
|
||||||
return viewModel;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Provides easy access to the root frame of the Phone Application.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>The root frame of the Phone Application.</returns>
|
|
||||||
public static PhoneApplicationFrame RootFrame { get; private set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Constructor for the Application object.
|
|
||||||
/// </summary>
|
|
||||||
public App()
|
|
||||||
{
|
|
||||||
// Global handler for uncaught exceptions.
|
|
||||||
UnhandledException += Application_UnhandledException;
|
|
||||||
|
|
||||||
// Standard XAML initialization
|
|
||||||
InitializeComponent();
|
|
||||||
|
|
||||||
// Phone-specific initialization
|
|
||||||
InitializePhoneApplication();
|
|
||||||
|
|
||||||
// Language display initialization
|
|
||||||
InitializeLanguage();
|
|
||||||
|
|
||||||
// Show graphics profiling information while debugging.
|
|
||||||
if (Debugger.IsAttached)
|
|
||||||
{
|
|
||||||
// Display the current frame rate counters.
|
|
||||||
Application.Current.Host.Settings.EnableFrameRateCounter = true;
|
|
||||||
|
|
||||||
// Show the areas of the app that are being redrawn in each frame.
|
|
||||||
//Application.Current.Host.Settings.EnableRedrawRegions = true;
|
|
||||||
|
|
||||||
// Enable non-production analysis visualization mode,
|
|
||||||
// which shows areas of a page that are handed off GPU with a colored overlay.
|
|
||||||
//Application.Current.Host.Settings.EnableCacheVisualization = true;
|
|
||||||
|
|
||||||
// Prevent the screen from turning off while under the debugger by disabling
|
|
||||||
// the application's idle detection.
|
|
||||||
// Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run
|
|
||||||
// and consume battery power when the user is not using the phone.
|
|
||||||
PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Code to execute when the application is launching (eg, from Start)
|
|
||||||
// This code will not execute when the application is reactivated
|
|
||||||
private void Application_Launching(object sender, LaunchingEventArgs e)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// Code to execute when the application is activated (brought to foreground)
|
|
||||||
// This code will not execute when the application is first launched
|
|
||||||
private void Application_Activated(object sender, ActivatedEventArgs e)
|
|
||||||
{
|
|
||||||
// Ensure that application state is restored appropriately
|
|
||||||
if (!App.ViewModel.IsDataLoaded)
|
|
||||||
{
|
|
||||||
App.ViewModel.LoadData();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Code to execute when the application is deactivated (sent to background)
|
|
||||||
// This code will not execute when the application is closing
|
|
||||||
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
|
|
||||||
{
|
|
||||||
// Ensure that required application state is persisted here.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Code to execute when the application is closing (eg, user hit Back)
|
|
||||||
// This code will not execute when the application is deactivated
|
|
||||||
private void Application_Closing(object sender, ClosingEventArgs e)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// Code to execute if a navigation fails
|
|
||||||
private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
|
|
||||||
{
|
|
||||||
if (Debugger.IsAttached)
|
|
||||||
{
|
|
||||||
// A navigation has failed; break into the debugger
|
|
||||||
Debugger.Break();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Code to execute on Unhandled Exceptions
|
|
||||||
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
|
|
||||||
{
|
|
||||||
if (Debugger.IsAttached)
|
|
||||||
{
|
|
||||||
// An unhandled exception has occurred; break into the debugger
|
|
||||||
Debugger.Break();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Phone application initialization
|
|
||||||
|
|
||||||
// Avoid double-initialization
|
|
||||||
private bool phoneApplicationInitialized = false;
|
|
||||||
|
|
||||||
// Do not add any additional code to this method
|
|
||||||
private void InitializePhoneApplication()
|
|
||||||
{
|
|
||||||
if (phoneApplicationInitialized)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Create the frame but don't set it as RootVisual yet; this allows the splash
|
|
||||||
// screen to remain active until the application is ready to render.
|
|
||||||
RootFrame = new PhoneApplicationFrame();
|
|
||||||
RootFrame.Navigated += CompleteInitializePhoneApplication;
|
|
||||||
|
|
||||||
// Handle navigation failures
|
|
||||||
RootFrame.NavigationFailed += RootFrame_NavigationFailed;
|
|
||||||
|
|
||||||
// Handle reset requests for clearing the backstack
|
|
||||||
RootFrame.Navigated += CheckForResetNavigation;
|
|
||||||
|
|
||||||
// Ensure we don't initialize again
|
|
||||||
phoneApplicationInitialized = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do not add any additional code to this method
|
|
||||||
private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)
|
|
||||||
{
|
|
||||||
// Set the root visual to allow the application to render
|
|
||||||
if (RootVisual != RootFrame)
|
|
||||||
RootVisual = RootFrame;
|
|
||||||
|
|
||||||
// Remove this handler since it is no longer needed
|
|
||||||
RootFrame.Navigated -= CompleteInitializePhoneApplication;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CheckForResetNavigation(object sender, NavigationEventArgs e)
|
|
||||||
{
|
|
||||||
// If the app has received a 'reset' navigation, then we need to check
|
|
||||||
// on the next navigation to see if the page stack should be reset
|
|
||||||
if (e.NavigationMode == NavigationMode.Reset)
|
|
||||||
RootFrame.Navigated += ClearBackStackAfterReset;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ClearBackStackAfterReset(object sender, NavigationEventArgs e)
|
|
||||||
{
|
|
||||||
// Unregister the event so it doesn't get called again
|
|
||||||
RootFrame.Navigated -= ClearBackStackAfterReset;
|
|
||||||
|
|
||||||
// Only clear the stack for 'new' (forward) and 'refresh' navigations
|
|
||||||
if (e.NavigationMode != NavigationMode.New && e.NavigationMode != NavigationMode.Refresh)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// For UI consistency, clear the entire page stack
|
|
||||||
while (RootFrame.RemoveBackEntry() != null)
|
|
||||||
{
|
|
||||||
; // do nothing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
// Initialize the app's font and flow direction as defined in its localized resource strings.
|
|
||||||
//
|
|
||||||
// To ensure that the font of your application is aligned with its supported languages and that the
|
|
||||||
// FlowDirection for each of those languages follows its traditional direction, ResourceLanguage
|
|
||||||
// and ResourceFlowDirection should be initialized in each resx file to match these values with that
|
|
||||||
// file's culture. For example:
|
|
||||||
//
|
|
||||||
// AppResources.es-ES.resx
|
|
||||||
// ResourceLanguage's value should be "es-ES"
|
|
||||||
// ResourceFlowDirection's value should be "LeftToRight"
|
|
||||||
//
|
|
||||||
// AppResources.ar-SA.resx
|
|
||||||
// ResourceLanguage's value should be "ar-SA"
|
|
||||||
// ResourceFlowDirection's value should be "RightToLeft"
|
|
||||||
//
|
|
||||||
// For more info on localizing Windows Phone apps see http://go.microsoft.com/fwlink/?LinkId=262072.
|
|
||||||
//
|
|
||||||
private void InitializeLanguage()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// Set the font to match the display language defined by the
|
|
||||||
// ResourceLanguage resource string for each supported language.
|
|
||||||
//
|
|
||||||
// Fall back to the font of the neutral language if the Display
|
|
||||||
// language of the phone is not supported.
|
|
||||||
//
|
|
||||||
// If a compiler error is hit then ResourceLanguage is missing from
|
|
||||||
// the resource file.
|
|
||||||
RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage);
|
|
||||||
|
|
||||||
// Set the FlowDirection of all elements under the root frame based
|
|
||||||
// on the ResourceFlowDirection resource string for each
|
|
||||||
// supported language.
|
|
||||||
//
|
|
||||||
// If a compiler error is hit then ResourceFlowDirection is missing from
|
|
||||||
// the resource file.
|
|
||||||
FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection), AppResources.ResourceFlowDirection);
|
|
||||||
RootFrame.FlowDirection = flow;
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
// If an exception is caught here it is most likely due to either
|
|
||||||
// ResourceLangauge not being correctly set to a supported language
|
|
||||||
// code or ResourceFlowDirection is set to a value other than LeftToRight
|
|
||||||
// or RightToLeft.
|
|
||||||
|
|
||||||
if (Debugger.IsAttached)
|
|
||||||
{
|
|
||||||
Debugger.Break();
|
|
||||||
}
|
|
||||||
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 3.6 KiB |
@@ -1,44 +0,0 @@
|
|||||||
<phone:PhoneApplicationPage
|
|
||||||
x:Class="PocketSharp.WP8.DetailsPage"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
|
|
||||||
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
d:DataContext="{d:DesignData SampleData/MainViewModelSampleData.xaml}"
|
|
||||||
mc:Ignorable="d"
|
|
||||||
FontFamily="{StaticResource PhoneFontFamilyNormal}"
|
|
||||||
FontSize="{StaticResource PhoneFontSizeNormal}"
|
|
||||||
Foreground="{StaticResource PhoneForegroundBrush}"
|
|
||||||
SupportedOrientations="Portrait" Orientation="Portrait"
|
|
||||||
shell:SystemTray.IsVisible="True">
|
|
||||||
|
|
||||||
<!--Data context is set to sample data above and first item in sample data collection below and LayoutRoot contains the root grid where all other page content is placed-->
|
|
||||||
<Grid x:Name="LayoutRoot" Background="Transparent" d:DataContext="{Binding Items[0]}">
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition Height="Auto"/>
|
|
||||||
<RowDefinition Height="*"/>
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
|
|
||||||
<!--TitlePanel contains the name of the application and page title-->
|
|
||||||
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
|
|
||||||
<TextBlock Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
|
|
||||||
<TextBlock Text="{Binding LineOne}" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
|
|
||||||
</StackPanel>
|
|
||||||
|
|
||||||
<!--ContentPanel contains details text. Place additional content here-->
|
|
||||||
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
|
|
||||||
<TextBlock Text="{Binding LineThree}" TextWrapping="Wrap" Style="{StaticResource PhoneTextNormalStyle}"/>
|
|
||||||
</Grid>
|
|
||||||
|
|
||||||
<!--Uncomment to see an alignment grid to help ensure your controls are
|
|
||||||
aligned on common boundaries. The image has a top margin of -32px to
|
|
||||||
account for the System Tray. Set this to 0 (or remove the margin altogether)
|
|
||||||
if the System Tray is hidden.
|
|
||||||
|
|
||||||
Before shipping remove this XAML and the image itself.-->
|
|
||||||
<!--<Image Source="/Assets/AlignmentGrid.png" VerticalAlignment="Top" Height="800" Width="480" Margin="0,-32,0,0" Grid.Row="0" Grid.RowSpan="2" IsHitTestVisible="False" />-->
|
|
||||||
</Grid>
|
|
||||||
|
|
||||||
</phone:PhoneApplicationPage>
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Navigation;
|
|
||||||
using Microsoft.Phone.Controls;
|
|
||||||
using Microsoft.Phone.Shell;
|
|
||||||
using PocketSharp.WP8.Resources;
|
|
||||||
|
|
||||||
namespace PocketSharp.WP8
|
|
||||||
{
|
|
||||||
public partial class DetailsPage : PhoneApplicationPage
|
|
||||||
{
|
|
||||||
// Constructor
|
|
||||||
public DetailsPage()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
|
|
||||||
// Sample code to localize the ApplicationBar
|
|
||||||
//BuildLocalizedApplicationBar();
|
|
||||||
}
|
|
||||||
|
|
||||||
// When page is navigated to set data context to selected item in list
|
|
||||||
protected override void OnNavigatedTo(NavigationEventArgs e)
|
|
||||||
{
|
|
||||||
if (DataContext == null)
|
|
||||||
{
|
|
||||||
string selectedIndex = "";
|
|
||||||
if (NavigationContext.QueryString.TryGetValue("selectedItem", out selectedIndex))
|
|
||||||
{
|
|
||||||
int index = int.Parse(selectedIndex);
|
|
||||||
DataContext = App.ViewModel.Items[index];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sample code for building a localized ApplicationBar
|
|
||||||
//private void BuildLocalizedApplicationBar()
|
|
||||||
//{
|
|
||||||
// // Set the page's ApplicationBar to a new instance of ApplicationBar.
|
|
||||||
// ApplicationBar = new ApplicationBar();
|
|
||||||
|
|
||||||
// // Create a new button and set the text value to the localized string from AppResources.
|
|
||||||
// ApplicationBarIconButton appBarButton = new ApplicationBarIconButton(new Uri("/Assets/AppBar/appbar.add.rest.png", UriKind.Relative));
|
|
||||||
// appBarButton.Text = AppResources.AppBarButtonText;
|
|
||||||
// ApplicationBar.Buttons.Add(appBarButton);
|
|
||||||
|
|
||||||
// // Create a new menu item with the localized string from AppResources.
|
|
||||||
// ApplicationBarMenuItem appBarMenuItem = new ApplicationBarMenuItem(AppResources.AppBarMenuItemText);
|
|
||||||
// ApplicationBar.MenuItems.Add(appBarMenuItem);
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
using PocketSharp.WP8.Resources;
|
|
||||||
|
|
||||||
namespace PocketSharp.WP8
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Provides access to string resources.
|
|
||||||
/// </summary>
|
|
||||||
public class LocalizedStrings
|
|
||||||
{
|
|
||||||
private static AppResources _localizedResources = new AppResources();
|
|
||||||
|
|
||||||
public AppResources LocalizedResources { get { return _localizedResources; } }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
<phone:PhoneApplicationPage
|
|
||||||
x:Class="PocketSharp.WP8.MainPage"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
|
|
||||||
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
mc:Ignorable="d"
|
|
||||||
d:DataContext="{d:DesignData SampleData/MainViewModelSampleData.xaml}"
|
|
||||||
FontFamily="{StaticResource PhoneFontFamilyNormal}"
|
|
||||||
FontSize="{StaticResource PhoneFontSizeNormal}"
|
|
||||||
Foreground="{StaticResource PhoneForegroundBrush}"
|
|
||||||
SupportedOrientations="Portrait" Orientation="Portrait"
|
|
||||||
shell:SystemTray.IsVisible="True">
|
|
||||||
|
|
||||||
<!--Data context is set to sample data above and LayoutRoot contains the root grid where all other page content is placed-->
|
|
||||||
<Grid x:Name="LayoutRoot" Background="Transparent">
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition Height="Auto"/>
|
|
||||||
<RowDefinition Height="*"/>
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
|
|
||||||
<!-- LOCALIZATION NOTE:
|
|
||||||
To localize the displayed strings copy their values to appropriately named
|
|
||||||
keys in the app's neutral language resource file (AppResources.resx) then
|
|
||||||
replace the hard-coded text value between the attributes' quotation marks
|
|
||||||
with the binding clause whose path points to that string name.
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
Text="{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}"
|
|
||||||
|
|
||||||
This binding points to the template's string resource named "ApplicationTitle".
|
|
||||||
|
|
||||||
Adding supported languages in the Project Properties tab will create a
|
|
||||||
new resx file per language that can carry the translated values of your
|
|
||||||
UI strings. The binding in these examples will cause the value of the
|
|
||||||
attributes to be drawn from the .resx file that matches the
|
|
||||||
CurrentUICulture of the app at run time.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!--TitlePanel contains the name of the application and page title-->
|
|
||||||
<StackPanel Grid.Row="0" Margin="12,17,0,28">
|
|
||||||
<TextBlock Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
|
|
||||||
<TextBlock Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
|
|
||||||
</StackPanel>
|
|
||||||
|
|
||||||
<!--ContentPanel contains LongListSelector and LongListSelector ItemTemplate. Place additional content here-->
|
|
||||||
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
|
|
||||||
<phone:LongListSelector x:Name="MainLongListSelector" Margin="0,0,-12,0" ItemsSource="{Binding Items}" SelectionChanged="MainLongListSelector_SelectionChanged">
|
|
||||||
<phone:LongListSelector.ItemTemplate>
|
|
||||||
<DataTemplate>
|
|
||||||
<StackPanel Margin="0,0,0,17">
|
|
||||||
<TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
|
|
||||||
<TextBlock Text="{Binding LineTwo}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
|
|
||||||
</StackPanel>
|
|
||||||
</DataTemplate>
|
|
||||||
</phone:LongListSelector.ItemTemplate>
|
|
||||||
</phone:LongListSelector>
|
|
||||||
</Grid>
|
|
||||||
|
|
||||||
<!--Uncomment to see an alignment grid to help ensure your controls are
|
|
||||||
aligned on common boundaries. The image has a top margin of -32px to
|
|
||||||
account for the System Tray. Set this to 0 (or remove the margin altogether)
|
|
||||||
if the System Tray is hidden.
|
|
||||||
|
|
||||||
Before shipping remove this XAML and the image itself.-->
|
|
||||||
<!--<Image Source="/Assets/AlignmentGrid.png" VerticalAlignment="Top" Height="800" Width="480" Margin="0,-32,0,0" Grid.Row="0" Grid.RowSpan="2" IsHitTestVisible="False" />-->
|
|
||||||
</Grid>
|
|
||||||
|
|
||||||
</phone:PhoneApplicationPage>
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Navigation;
|
|
||||||
using Microsoft.Phone.Controls;
|
|
||||||
using Microsoft.Phone.Shell;
|
|
||||||
using PocketSharp.WP8.Resources;
|
|
||||||
using PocketSharp.WP8.ViewModels;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace PocketSharp.WP8
|
|
||||||
{
|
|
||||||
public partial class MainPage : PhoneApplicationPage
|
|
||||||
{
|
|
||||||
// Constructor
|
|
||||||
public MainPage()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
|
|
||||||
// Set the data context of the LongListSelector control to the sample data
|
|
||||||
DataContext = App.ViewModel;
|
|
||||||
|
|
||||||
// Sample code to localize the ApplicationBar
|
|
||||||
//BuildLocalizedApplicationBar();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load data for the ViewModel Items
|
|
||||||
protected async override void OnNavigatedTo(NavigationEventArgs e)
|
|
||||||
{
|
|
||||||
if (!App.ViewModel.IsDataLoaded)
|
|
||||||
{
|
|
||||||
await App.ViewModel.LoadData();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle selection changed on LongListSelector
|
|
||||||
private void MainLongListSelector_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
|
||||||
{
|
|
||||||
// If selected item is null (no selection) do nothing
|
|
||||||
if (MainLongListSelector.SelectedItem == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Navigate to the new page
|
|
||||||
NavigationService.Navigate(new Uri("/DetailsPage.xaml?selectedItem=" + (MainLongListSelector.SelectedItem as ItemViewModel).ID, UriKind.Relative));
|
|
||||||
|
|
||||||
// Reset selected item to null (no selection)
|
|
||||||
MainLongListSelector.SelectedItem = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sample code for building a localized ApplicationBar
|
|
||||||
//private void BuildLocalizedApplicationBar()
|
|
||||||
//{
|
|
||||||
// // Set the page's ApplicationBar to a new instance of ApplicationBar.
|
|
||||||
// ApplicationBar = new ApplicationBar();
|
|
||||||
|
|
||||||
// // Create a new button and set the text value to the localized string from AppResources.
|
|
||||||
// ApplicationBarIconButton appBarButton = new ApplicationBarIconButton(new Uri("/Assets/AppBar/appbar.add.rest.png", UriKind.Relative));
|
|
||||||
// appBarButton.Text = AppResources.AppBarButtonText;
|
|
||||||
// ApplicationBar.Buttons.Add(appBarButton);
|
|
||||||
|
|
||||||
// // Create a new menu item with the localized string from AppResources.
|
|
||||||
// ApplicationBarMenuItem appBarMenuItem = new ApplicationBarMenuItem(AppResources.AppBarMenuItemText);
|
|
||||||
// ApplicationBar.MenuItems.Add(appBarMenuItem);
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,199 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
|
||||||
<ProductVersion>10.0.20506</ProductVersion>
|
|
||||||
<SchemaVersion>2.0</SchemaVersion>
|
|
||||||
<ProjectGuid>{47721A56-2128-4C5A-8B92-995FFC353304}</ProjectGuid>
|
|
||||||
<ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
|
|
||||||
<OutputType>Library</OutputType>
|
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
|
||||||
<RootNamespace>PocketSharp.WP8</RootNamespace>
|
|
||||||
<AssemblyName>PocketSharp.WP8</AssemblyName>
|
|
||||||
<TargetFrameworkIdentifier>WindowsPhone</TargetFrameworkIdentifier>
|
|
||||||
<TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
|
|
||||||
<SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>
|
|
||||||
<SilverlightApplication>true</SilverlightApplication>
|
|
||||||
<SupportedCultures>
|
|
||||||
</SupportedCultures>
|
|
||||||
<XapOutputs>true</XapOutputs>
|
|
||||||
<GenerateSilverlightManifest>true</GenerateSilverlightManifest>
|
|
||||||
<XapFilename>PocketSharp.WP8_$(Configuration)_$(Platform).xap</XapFilename>
|
|
||||||
<SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>
|
|
||||||
<SilverlightAppEntry>PocketSharp.WP8.App</SilverlightAppEntry>
|
|
||||||
<ValidateXaml>true</ValidateXaml>
|
|
||||||
<MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
|
|
||||||
<ThrowErrorsInValidation>true</ThrowErrorsInValidation>
|
|
||||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
|
|
||||||
<RestorePackages>true</RestorePackages>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>Bin\Debug</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
|
|
||||||
<NoStdLib>true</NoStdLib>
|
|
||||||
<NoConfig>true</NoConfig>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>Bin\Release</OutputPath>
|
|
||||||
<DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
|
|
||||||
<NoStdLib>true</NoStdLib>
|
|
||||||
<NoConfig>true</NoConfig>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>Bin\x86\Debug</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
|
|
||||||
<NoStdLib>true</NoStdLib>
|
|
||||||
<NoConfig>true</NoConfig>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>Bin\x86\Release</OutputPath>
|
|
||||||
<DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
|
|
||||||
<NoStdLib>true</NoStdLib>
|
|
||||||
<NoConfig>true</NoConfig>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|ARM' ">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>Bin\ARM\Debug</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
|
|
||||||
<NoStdLib>true</NoStdLib>
|
|
||||||
<NoConfig>true</NoConfig>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|ARM' ">
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>Bin\ARM\Release</OutputPath>
|
|
||||||
<DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
|
|
||||||
<NoStdLib>true</NoStdLib>
|
|
||||||
<NoConfig>true</NoConfig>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Include="App.xaml.cs">
|
|
||||||
<DependentUpon>App.xaml</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="LocalizedStrings.cs" />
|
|
||||||
<Compile Include="DetailsPage.xaml.cs">
|
|
||||||
<DependentUpon>DetailsPage.xaml</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="MainPage.xaml.cs">
|
|
||||||
<DependentUpon>MainPage.xaml</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
|
||||||
<Compile Include="Resources\AppResources.Designer.cs">
|
|
||||||
<AutoGen>True</AutoGen>
|
|
||||||
<DesignTime>True</DesignTime>
|
|
||||||
<DependentUpon>AppResources.resx</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="ViewModels\ItemViewModel.cs" />
|
|
||||||
<Compile Include="ViewModels\MainViewModel.cs" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ApplicationDefinition Include="App.xaml">
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
</ApplicationDefinition>
|
|
||||||
<Page Include="DetailsPage.xaml">
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
</Page>
|
|
||||||
<Page Include="MainPage.xaml">
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
</Page>
|
|
||||||
<DesignData Include="SampleData\MainViewModelSampleData.xaml">
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
</DesignData>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="Properties\AppManifest.xml" />
|
|
||||||
<None Include="Properties\WMAppManifest.xml">
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
</None>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Content Include="Assets\AlignmentGrid.png" />
|
|
||||||
<Content Include="Assets\ApplicationIcon.png">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="Assets\Tiles\FlipCycleTileLarge.png">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="Assets\Tiles\FlipCycleTileMedium.png">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="Assets\Tiles\FlipCycleTileSmall.png">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="Assets\Tiles\IconicTileMediumLarge.png">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="Assets\Tiles\IconicTileSmall.png">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<EmbeddedResource Include="Resources\AppResources.resx">
|
|
||||||
<Generator>PublicResXFileCodeGenerator</Generator>
|
|
||||||
<LastGenOutput>AppResources.Designer.cs</LastGenOutput>
|
|
||||||
</EmbeddedResource>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\..\PocketSharp\PocketSharp.csproj">
|
|
||||||
<Project>{817200C3-A327-4E35-9B5F-63A51C088577}</Project>
|
|
||||||
<Name>PocketSharp</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Reference Include="Microsoft.Threading.Tasks">
|
|
||||||
<HintPath>..\..\packages\Microsoft.Bcl.Async.1.0.16\lib\wp8\Microsoft.Threading.Tasks.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.Threading.Tasks.Extensions">
|
|
||||||
<HintPath>..\..\packages\Microsoft.Bcl.Async.1.0.16\lib\wp8\Microsoft.Threading.Tasks.Extensions.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.Threading.Tasks.Extensions.Phone">
|
|
||||||
<HintPath>..\..\packages\Microsoft.Bcl.Async.1.0.16\lib\wp8\Microsoft.Threading.Tasks.Extensions.Phone.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets" />
|
|
||||||
<Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets" />
|
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
|
||||||
<Target Name="BeforeBuild">
|
|
||||||
</Target>
|
|
||||||
<Target Name="AfterBuild">
|
|
||||||
</Target>
|
|
||||||
-->
|
|
||||||
<ProjectExtensions />
|
|
||||||
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
|
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
|
||||||
<PropertyGroup>
|
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
|
|
||||||
</Target>
|
|
||||||
</Project>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
>
|
|
||||||
<Deployment.Parts>
|
|
||||||
</Deployment.Parts>
|
|
||||||
</Deployment>
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
using System.Reflection;
|
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Resources;
|
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
|
||||||
// set of attributes. Change these attribute values to modify the information
|
|
||||||
// associated with an assembly.
|
|
||||||
[assembly: AssemblyTitle("PocketSharp.WP8")]
|
|
||||||
[assembly: AssemblyDescription("")]
|
|
||||||
[assembly: AssemblyConfiguration("")]
|
|
||||||
[assembly: AssemblyCompany("")]
|
|
||||||
[assembly: AssemblyProduct("PocketSharp.WP8")]
|
|
||||||
[assembly: AssemblyCopyright("Copyright © 2013")]
|
|
||||||
[assembly: AssemblyTrademark("")]
|
|
||||||
[assembly: AssemblyCulture("")]
|
|
||||||
|
|
||||||
// Setting ComVisible to false makes the types in this assembly not visible
|
|
||||||
// to COM components. If you need to access a type in this assembly from
|
|
||||||
// COM, set the ComVisible attribute to true on that type.
|
|
||||||
[assembly: ComVisible(false)]
|
|
||||||
|
|
||||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
|
||||||
[assembly: Guid("d4c30306-fbff-4433-8299-ecb70af9cfb6")]
|
|
||||||
|
|
||||||
// Version information for an assembly consists of the following four values:
|
|
||||||
//
|
|
||||||
// Major Version
|
|
||||||
// Minor Version
|
|
||||||
// Build Number
|
|
||||||
// Revision
|
|
||||||
//
|
|
||||||
// You can specify all the values or you can default the Revision and Build Numbers
|
|
||||||
// by using the '*' as shown below:
|
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
||||||
[assembly: NeutralResourcesLanguageAttribute("en-US")]
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
|
|
||||||
<Deployment xmlns="http://schemas.microsoft.com/windowsphone/2012/deployment" AppPlatformVersion="8.0">
|
|
||||||
<DefaultLanguage xmlns="" code="en-US"/>
|
|
||||||
<App xmlns="" ProductID="{47721a56-2128-4c5a-8b92-995ffc353304}" Title="PocketSharp.WP8" RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal" Author="PocketSharp.WP8 author" Description="Sample description" Publisher="PocketSharp.WP8" PublisherID="{d8449fc0-02fe-4be1-b0a5-3fd20d58264c}">
|
|
||||||
<IconPath IsRelative="true" IsResource="false">Assets\ApplicationIcon.png</IconPath>
|
|
||||||
<Capabilities>
|
|
||||||
<Capability Name="ID_CAP_NETWORKING"/>
|
|
||||||
<Capability Name="ID_CAP_MEDIALIB_AUDIO"/>
|
|
||||||
<Capability Name="ID_CAP_MEDIALIB_PLAYBACK"/>
|
|
||||||
<Capability Name="ID_CAP_SENSORS"/>
|
|
||||||
<Capability Name="ID_CAP_WEBBROWSERCOMPONENT"/>
|
|
||||||
</Capabilities>
|
|
||||||
<Tasks>
|
|
||||||
<DefaultTask Name ="_default" NavigationPage="MainPage.xaml"/>
|
|
||||||
</Tasks>
|
|
||||||
<Tokens>
|
|
||||||
<PrimaryToken TokenID="PocketSharp.WP8Token" TaskName="_default">
|
|
||||||
<TemplateFlip>
|
|
||||||
<SmallImageURI IsRelative="true" IsResource="false">Assets\Tiles\FlipCycleTileSmall.png</SmallImageURI>
|
|
||||||
<Count>0</Count>
|
|
||||||
<BackgroundImageURI IsRelative="true" IsResource="false">Assets\Tiles\FlipCycleTileMedium.png</BackgroundImageURI>
|
|
||||||
<Title>PocketSharp.WP8</Title>
|
|
||||||
<BackContent></BackContent>
|
|
||||||
<BackBackgroundImageURI></BackBackgroundImageURI>
|
|
||||||
<BackTitle></BackTitle>
|
|
||||||
<DeviceLockImageURI></DeviceLockImageURI>
|
|
||||||
<HasLarge></HasLarge>
|
|
||||||
</TemplateFlip>
|
|
||||||
</PrimaryToken>
|
|
||||||
</Tokens>
|
|
||||||
<ScreenResolutions>
|
|
||||||
<ScreenResolution Name="ID_RESOLUTION_WVGA"/>
|
|
||||||
<ScreenResolution Name="ID_RESOLUTION_WXGA"/>
|
|
||||||
<ScreenResolution Name="ID_RESOLUTION_HD720P"/>
|
|
||||||
</ScreenResolutions>
|
|
||||||
</App>
|
|
||||||
</Deployment>
|
|
||||||
@@ -1,138 +0,0 @@
|
|||||||
//------------------------------------------------------------------------------
|
|
||||||
// <auto-generated>
|
|
||||||
// This code was generated by a tool.
|
|
||||||
// Runtime Version:4.0.30319.17626
|
|
||||||
//
|
|
||||||
// Changes to this file may cause incorrect behavior and will be lost if
|
|
||||||
// the code is regenerated.
|
|
||||||
// </auto-generated>
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
namespace PocketSharp.WP8.Resources
|
|
||||||
{
|
|
||||||
using System;
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
|
||||||
/// </summary>
|
|
||||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
|
||||||
// class via a tool like ResGen or Visual Studio.
|
|
||||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
|
||||||
// with the /str option, or rebuild your VS project.
|
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
|
||||||
public class AppResources
|
|
||||||
{
|
|
||||||
|
|
||||||
private static global::System.Resources.ResourceManager resourceMan;
|
|
||||||
|
|
||||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
|
||||||
|
|
||||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
|
||||||
internal AppResources()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Returns the cached ResourceManager instance used by this class.
|
|
||||||
/// </summary>
|
|
||||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
|
||||||
public static global::System.Resources.ResourceManager ResourceManager
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (object.ReferenceEquals(resourceMan, null))
|
|
||||||
{
|
|
||||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PocketSharp.WP8.Resources.AppResources", typeof(AppResources).Assembly);
|
|
||||||
resourceMan = temp;
|
|
||||||
}
|
|
||||||
return resourceMan;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Overrides the current thread's CurrentUICulture property for all
|
|
||||||
/// resource lookups using this strongly typed resource class.
|
|
||||||
/// </summary>
|
|
||||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
|
||||||
public static global::System.Globalization.CultureInfo Culture
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return resourceCulture;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
resourceCulture = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks up a localized string similar to LeftToRight.
|
|
||||||
/// </summary>
|
|
||||||
public static string ResourceFlowDirection
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return ResourceManager.GetString("ResourceFlowDirection", resourceCulture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks up a localized string similar to us-EN.
|
|
||||||
/// </summary>
|
|
||||||
public static string ResourceLanguage
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return ResourceManager.GetString("ResourceLanguage", resourceCulture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks up a localized string similar to MY APPLICATION.
|
|
||||||
/// </summary>
|
|
||||||
public static string ApplicationTitle
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return ResourceManager.GetString("ApplicationTitle", resourceCulture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks up a localized string similar to Sample Runtime Property Value.
|
|
||||||
/// </summary>
|
|
||||||
public static string SampleProperty
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return ResourceManager.GetString("SampleProperty", resourceCulture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks up a localized string similar to button text.
|
|
||||||
/// </summary>
|
|
||||||
public static string AppBarButtonText
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return ResourceManager.GetString("AppBarButtonText", resourceCulture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks up a localized string similar to menu item.
|
|
||||||
/// </summary>
|
|
||||||
public static string AppBarMenuItemText
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return ResourceManager.GetString("AppBarMenuItemText", resourceCulture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,140 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<root>
|
|
||||||
<!--
|
|
||||||
Microsoft ResX Schema
|
|
||||||
|
|
||||||
Version 2.0
|
|
||||||
|
|
||||||
The primary goals of this format is to allow a simple XML format
|
|
||||||
that is mostly human readable. The generation and parsing of the
|
|
||||||
various data types are done through the TypeConverter classes
|
|
||||||
associated with the data types.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
... ado.net/XML headers & schema ...
|
|
||||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
|
||||||
<resheader name="version">2.0</resheader>
|
|
||||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
|
||||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
|
||||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
|
||||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
|
||||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
|
||||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
|
||||||
</data>
|
|
||||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
|
||||||
<comment>This is a comment</comment>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
There are any number of "resheader" rows that contain simple
|
|
||||||
name/value pairs.
|
|
||||||
|
|
||||||
Each data row contains a name, and value. The row also contains a
|
|
||||||
type or mimetype. Type corresponds to a .NET class that support
|
|
||||||
text/value conversion through the TypeConverter architecture.
|
|
||||||
Classes that don't support this are serialized and stored with the
|
|
||||||
mimetype set.
|
|
||||||
|
|
||||||
The mimetype is used for serialized objects, and tells the
|
|
||||||
ResXResourceReader how to depersist the object. This is currently not
|
|
||||||
extensible. For a given mimetype the value must be set accordingly:
|
|
||||||
|
|
||||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
|
||||||
that the ResXResourceWriter will generate, however the reader can
|
|
||||||
read any of the formats listed below.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
|
||||||
value : The object must be serialized into a byte array
|
|
||||||
: using a System.ComponentModel.TypeConverter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
-->
|
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
|
||||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:choice maxOccurs="unbounded">
|
|
||||||
<xsd:element name="metadata">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="assembly">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:attribute name="alias" type="xsd:string" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="data">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="resheader">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:schema>
|
|
||||||
<resheader name="resmimetype">
|
|
||||||
<value>text/microsoft-resx</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="version">
|
|
||||||
<value>2.0</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="reader">
|
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="writer">
|
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<data name="ResourceFlowDirection" xml:space="preserve">
|
|
||||||
<value>LeftToRight</value>
|
|
||||||
<comment>Controls the FlowDirection for all elements in the RootFrame. Set to the traditional direction of this resource file's language</comment>
|
|
||||||
</data>
|
|
||||||
<data name="ResourceLanguage" xml:space="preserve">
|
|
||||||
<value>en-US</value>
|
|
||||||
<comment>Controls the Language and ensures that the font for all elements in the RootFrame aligns with the app's language. Set to the language code of this resource file's language.</comment>
|
|
||||||
</data>
|
|
||||||
<data name="ApplicationTitle" xml:space="preserve">
|
|
||||||
<value>MY APPLICATION</value>
|
|
||||||
</data>
|
|
||||||
<data name="SampleProperty" xml:space="preserve">
|
|
||||||
<value>Sample Runtime Property Value</value>
|
|
||||||
</data>
|
|
||||||
<data name="AppBarButtonText" xml:space="preserve">
|
|
||||||
<value>add</value>
|
|
||||||
</data>
|
|
||||||
<data name="AppBarMenuItemText" xml:space="preserve">
|
|
||||||
<value>Menu Item</value>
|
|
||||||
</data>
|
|
||||||
</root>
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
<vm:MainViewModel
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:vm="clr-namespace:PocketSharp.WP8.ViewModels"
|
|
||||||
SampleProperty="Sample Text Property Value">
|
|
||||||
|
|
||||||
<vm:MainViewModel.Items>
|
|
||||||
<vm:ItemViewModel ID="0" LineOne="design one" LineTwo="Maecenas praesent accumsan bibendum" LineThree="Maecenas praesent accumsan bibendum dictumst eleifend facilisi faucibus habitant inceptos interdum lobortis nascetur"/>
|
|
||||||
<vm:ItemViewModel ID="1" LineOne="design two" LineTwo="Dictumst eleifend facilisi faucibus" LineThree="Pharetra placerat pulvinar sagittis senectus sociosqu suscipit torquent ultrices vehicula volutpat maecenas praesent"/>
|
|
||||||
<vm:ItemViewModel ID="2" LineOne="design three" LineTwo="Habitant inceptos interdum lobortis" LineThree="Accumsan bibendum dictumst eleifend facilisi faucibus habitant inceptos interdum lobortis nascetur pharetra placerat"/>
|
|
||||||
<vm:ItemViewModel ID="3" LineOne="design four" LineTwo="Nascetur pharetra placerat pulvinar" LineThree="Pulvinar sagittis senectus sociosqu suscipit torquent ultrices vehicula volutpat maecenas praesent accumsan bibendum"/>
|
|
||||||
<vm:ItemViewModel ID="4" LineOne="design five" LineTwo="Sagittis senectus sociosqu suscipit" LineThree="Dictumst eleifend facilisi faucibus habitant inceptos interdum lobortis nascetur pharetra placerat pulvinar sagittis"/>
|
|
||||||
<vm:ItemViewModel ID="5" LineOne="design six" LineTwo="Torquent ultrices vehicula volutpat" LineThree="Senectus sociosqu suscipit torquent ultrices vehicula volutpat maecenas praesent accumsan bibendum dictumst eleifend"/>
|
|
||||||
</vm:MainViewModel.Items>
|
|
||||||
|
|
||||||
</vm:MainViewModel>
|
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Net;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using System.Windows.Media;
|
|
||||||
using System.Windows.Media.Animation;
|
|
||||||
|
|
||||||
namespace PocketSharp.WP8.ViewModels
|
|
||||||
{
|
|
||||||
public class ItemViewModel : INotifyPropertyChanged
|
|
||||||
{
|
|
||||||
private string _id;
|
|
||||||
/// <summary>
|
|
||||||
/// Sample ViewModel property; this property is used to identify the object.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public string ID
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _id;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _id)
|
|
||||||
{
|
|
||||||
_id = value;
|
|
||||||
NotifyPropertyChanged("ID");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private string _lineOne;
|
|
||||||
/// <summary>
|
|
||||||
/// Sample ViewModel property; this property is used in the view to display its value using a Binding.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public string LineOne
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _lineOne;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _lineOne)
|
|
||||||
{
|
|
||||||
_lineOne = value;
|
|
||||||
NotifyPropertyChanged("LineOne");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private string _lineTwo;
|
|
||||||
/// <summary>
|
|
||||||
/// Sample ViewModel property; this property is used in the view to display its value using a Binding.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public string LineTwo
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _lineTwo;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _lineTwo)
|
|
||||||
{
|
|
||||||
_lineTwo = value;
|
|
||||||
NotifyPropertyChanged("LineTwo");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private string _lineThree;
|
|
||||||
/// <summary>
|
|
||||||
/// Sample ViewModel property; this property is used in the view to display its value using a Binding.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public string LineThree
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _lineThree;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _lineThree)
|
|
||||||
{
|
|
||||||
_lineThree = value;
|
|
||||||
NotifyPropertyChanged("LineThree");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public event PropertyChangedEventHandler PropertyChanged;
|
|
||||||
private void NotifyPropertyChanged(String propertyName)
|
|
||||||
{
|
|
||||||
PropertyChangedEventHandler handler = PropertyChanged;
|
|
||||||
if (null != handler)
|
|
||||||
{
|
|
||||||
handler(this, new PropertyChangedEventArgs(propertyName));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,108 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.ObjectModel;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using PocketSharp.WP8.Resources;
|
|
||||||
using PocketSharp;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Diagnostics;
|
|
||||||
|
|
||||||
namespace PocketSharp.WP8.ViewModels
|
|
||||||
{
|
|
||||||
public class MainViewModel : INotifyPropertyChanged
|
|
||||||
{
|
|
||||||
public MainViewModel()
|
|
||||||
{
|
|
||||||
this.Items = new ObservableCollection<ItemViewModel>();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A collection for ItemViewModel objects.
|
|
||||||
/// </summary>
|
|
||||||
public ObservableCollection<ItemViewModel> Items { get; private set; }
|
|
||||||
|
|
||||||
private string _sampleProperty = "Sample Runtime Property Value";
|
|
||||||
/// <summary>
|
|
||||||
/// Sample ViewModel property; this property is used in the view to display its value using a Binding
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public string SampleProperty
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _sampleProperty;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _sampleProperty)
|
|
||||||
{
|
|
||||||
_sampleProperty = value;
|
|
||||||
NotifyPropertyChanged("SampleProperty");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sample property that returns a localized string
|
|
||||||
/// </summary>
|
|
||||||
public string LocalizedSampleProperty
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return AppResources.SampleProperty;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsDataLoaded
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
private set;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates and adds a few ItemViewModel objects into the Items collection.
|
|
||||||
/// </summary>
|
|
||||||
public async Task LoadData()
|
|
||||||
{
|
|
||||||
// !! please don't misuse this account !!
|
|
||||||
PocketClient client = new PocketClient(
|
|
||||||
consumerKey: "15396-f6f92101d72c8e270a6c9bb3",
|
|
||||||
callbackUri: "http://frontendplay.com",
|
|
||||||
accessCode: "2c62cd50-b78a-5558-918b-65adae"
|
|
||||||
);
|
|
||||||
|
|
||||||
List<PocketSharp.Models.PocketItem> items = null;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
items = await client.Get().ConfigureAwait(false);
|
|
||||||
|
|
||||||
items.ForEach(item =>
|
|
||||||
{
|
|
||||||
this.Items.Add(new ItemViewModel()
|
|
||||||
{
|
|
||||||
ID = item.ID.ToString(),
|
|
||||||
LineOne = item.Title,
|
|
||||||
LineTwo = item.Uri.ToString()
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
catch (PocketException ex)
|
|
||||||
{
|
|
||||||
Debug.WriteLine(ex.Message);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.IsDataLoaded = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public event PropertyChangedEventHandler PropertyChanged;
|
|
||||||
private void NotifyPropertyChanged(String propertyName)
|
|
||||||
{
|
|
||||||
PropertyChangedEventHandler handler = PropertyChanged;
|
|
||||||
if (null != handler)
|
|
||||||
{
|
|
||||||
handler(this, new PropertyChangedEventArgs(propertyName));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
<Application x:Class="PocketSharp.Wpf.App"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
StartupUri="MainWindow.xaml">
|
|
||||||
<Application.Resources>
|
|
||||||
|
|
||||||
</Application.Resources>
|
|
||||||
</Application>
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Configuration;
|
|
||||||
using System.Data;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Windows;
|
|
||||||
|
|
||||||
namespace PocketSharp.Wpf
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Interaction logic for App.xaml
|
|
||||||
/// </summary>
|
|
||||||
public partial class App : Application
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
<Window x:Class="PocketSharp.Wpf.MainWindow"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
DataContext="{Binding RelativeSource={RelativeSource Self}}"
|
|
||||||
Title="MainWindow" Height="443" Width="591">
|
|
||||||
<Grid>
|
|
||||||
<Button Content="Button" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click" RenderTransformOrigin="0.547,0.566"/>
|
|
||||||
<ListView ItemsSource="{Binding Sites}" HorizontalAlignment="Left" Height="349" Margin="10,51,0,0" VerticalAlignment="Top" Width="561">
|
|
||||||
<ListView.View>
|
|
||||||
<GridView>
|
|
||||||
<GridViewColumn Width="160" Header="URL" DisplayMemberBinding="{Binding Url}" />
|
|
||||||
<GridViewColumn Width="401" Header="Content" DisplayMemberBinding="{Binding Content}" />
|
|
||||||
</GridView>
|
|
||||||
</ListView.View>
|
|
||||||
</ListView>
|
|
||||||
|
|
||||||
</Grid>
|
|
||||||
</Window>
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
using System.Windows;
|
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Collections.ObjectModel;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace PocketSharp.Wpf
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Interaction logic for MainWindow.xaml
|
|
||||||
/// </summary>
|
|
||||||
public partial class MainWindow : Window
|
|
||||||
{
|
|
||||||
ObservableCollection<Site> _Sites = new ObservableCollection<Site>();
|
|
||||||
|
|
||||||
public ObservableCollection<Site> Sites { get { return _Sites; } }
|
|
||||||
|
|
||||||
public class Site
|
|
||||||
{
|
|
||||||
public string Url { get; set; }
|
|
||||||
public string Content { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public MainWindow()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private async void Button_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
// !! please don't misuse this account !!
|
|
||||||
PocketClient client = new PocketClient(
|
|
||||||
consumerKey: "15396-f6f92101d72c8e270a6c9bb3",
|
|
||||||
callbackUri: "http://frontendplay.com",
|
|
||||||
accessCode: "2c62cd50-b78a-5558-918b-65adae"
|
|
||||||
);
|
|
||||||
|
|
||||||
List<PocketSharp.Models.PocketItem> items = null;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
items = await client.Get();
|
|
||||||
|
|
||||||
items.ForEach(item =>
|
|
||||||
{
|
|
||||||
Sites.Add(new Site()
|
|
||||||
{
|
|
||||||
Content = item.Title,
|
|
||||||
Url = item.Uri.ToString()
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
catch (PocketException ex)
|
|
||||||
{
|
|
||||||
Debug.Write(ex.Message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,144 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
|
||||||
<ProjectGuid>{775569C2-987F-4AC4-8BA5-A315A21ED1B7}</ProjectGuid>
|
|
||||||
<OutputType>WinExe</OutputType>
|
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
|
||||||
<RootNamespace>PocketSharp.Wpf</RootNamespace>
|
|
||||||
<AssemblyName>PocketSharp.Wpf</AssemblyName>
|
|
||||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
|
||||||
<FileAlignment>512</FileAlignment>
|
|
||||||
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<TargetFrameworkProfile />
|
|
||||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
|
|
||||||
<RestorePackages>true</RestorePackages>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>bin\Debug\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>bin\Release\</OutputPath>
|
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Reference Include="Microsoft.Threading.Tasks">
|
|
||||||
<HintPath>..\..\packages\Microsoft.Bcl.Async.1.0.16\lib\net45\Microsoft.Threading.Tasks.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.Threading.Tasks.Extensions">
|
|
||||||
<HintPath>..\..\packages\Microsoft.Bcl.Async.1.0.16\lib\net45\Microsoft.Threading.Tasks.Extensions.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System" />
|
|
||||||
<Reference Include="System.Data" />
|
|
||||||
<Reference Include="System.Net" />
|
|
||||||
<Reference Include="System.Net.Http" />
|
|
||||||
<Reference Include="System.Net.Http.Extensions, Version=2.2.15.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
<HintPath>..\..\packages\Microsoft.Net.Http.2.2.15\lib\net45\System.Net.Http.Extensions.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Net.Http.Primitives, Version=4.2.15.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
<HintPath>..\..\packages\Microsoft.Net.Http.2.2.15\lib\net45\System.Net.Http.Primitives.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Net.Http.WebRequest" />
|
|
||||||
<Reference Include="System.Xml" />
|
|
||||||
<Reference Include="Microsoft.CSharp" />
|
|
||||||
<Reference Include="System.Core" />
|
|
||||||
<Reference Include="System.Xml.Linq" />
|
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
|
||||||
<Reference Include="System.Xaml">
|
|
||||||
<RequiredTargetFramework>4.0</RequiredTargetFramework>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="WindowsBase" />
|
|
||||||
<Reference Include="PresentationCore" />
|
|
||||||
<Reference Include="PresentationFramework" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ApplicationDefinition Include="App.xaml">
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
</ApplicationDefinition>
|
|
||||||
<Compile Include="Site.cs" />
|
|
||||||
<Page Include="MainWindow.xaml">
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
</Page>
|
|
||||||
<Compile Include="App.xaml.cs">
|
|
||||||
<DependentUpon>App.xaml</DependentUpon>
|
|
||||||
<SubType>Code</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="MainWindow.xaml.cs">
|
|
||||||
<DependentUpon>MainWindow.xaml</DependentUpon>
|
|
||||||
<SubType>Code</SubType>
|
|
||||||
</Compile>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Include="Properties\AssemblyInfo.cs">
|
|
||||||
<SubType>Code</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Properties\Resources.Designer.cs">
|
|
||||||
<AutoGen>True</AutoGen>
|
|
||||||
<DesignTime>True</DesignTime>
|
|
||||||
<DependentUpon>Resources.resx</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Properties\Settings.Designer.cs">
|
|
||||||
<AutoGen>True</AutoGen>
|
|
||||||
<DependentUpon>Settings.settings</DependentUpon>
|
|
||||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
|
||||||
</Compile>
|
|
||||||
<EmbeddedResource Include="Properties\Resources.resx">
|
|
||||||
<Generator>ResXFileCodeGenerator</Generator>
|
|
||||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
|
||||||
</EmbeddedResource>
|
|
||||||
<None Include="app.config" />
|
|
||||||
<None Include="packages.config" />
|
|
||||||
<None Include="Properties\Settings.settings">
|
|
||||||
<Generator>SettingsSingleFileGenerator</Generator>
|
|
||||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
|
||||||
</None>
|
|
||||||
<AppDesigner Include="Properties\" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\..\PocketSharp\PocketSharp.csproj">
|
|
||||||
<Project>{817200c3-a327-4e35-9b5f-63a51c088577}</Project>
|
|
||||||
<Name>PocketSharp</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
|
||||||
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
|
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
|
||||||
<PropertyGroup>
|
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
|
|
||||||
</Target>
|
|
||||||
<Import Project="..\..\packages\Microsoft.Bcl.Build.1.0.10\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.10\tools\Microsoft.Bcl.Build.targets')" />
|
|
||||||
<Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
|
|
||||||
<Error Condition="!Exists('..\..\packages\Microsoft.Bcl.Build.1.0.10\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
|
|
||||||
<Error Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.10\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
|
|
||||||
</Target>
|
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
|
||||||
<Target Name="BeforeBuild">
|
|
||||||
</Target>
|
|
||||||
<Target Name="AfterBuild">
|
|
||||||
</Target>
|
|
||||||
-->
|
|
||||||
</Project>
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
using System.Reflection;
|
|
||||||
using System.Resources;
|
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Windows;
|
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
|
||||||
// set of attributes. Change these attribute values to modify the information
|
|
||||||
// associated with an assembly.
|
|
||||||
[assembly: AssemblyTitle("PocketSharp.Wpf")]
|
|
||||||
[assembly: AssemblyDescription("")]
|
|
||||||
[assembly: AssemblyConfiguration("")]
|
|
||||||
[assembly: AssemblyCompany("")]
|
|
||||||
[assembly: AssemblyProduct("PocketSharp.Wpf")]
|
|
||||||
[assembly: AssemblyCopyright("Copyright © 2013")]
|
|
||||||
[assembly: AssemblyTrademark("")]
|
|
||||||
[assembly: AssemblyCulture("")]
|
|
||||||
|
|
||||||
// Setting ComVisible to false makes the types in this assembly not visible
|
|
||||||
// to COM components. If you need to access a type in this assembly from
|
|
||||||
// COM, set the ComVisible attribute to true on that type.
|
|
||||||
[assembly: ComVisible(false)]
|
|
||||||
|
|
||||||
//In order to begin building localizable applications, set
|
|
||||||
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
|
|
||||||
//inside a <PropertyGroup>. For example, if you are using US english
|
|
||||||
//in your source files, set the <UICulture> to en-US. Then uncomment
|
|
||||||
//the NeutralResourceLanguage attribute below. Update the "en-US" in
|
|
||||||
//the line below to match the UICulture setting in the project file.
|
|
||||||
|
|
||||||
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
|
|
||||||
|
|
||||||
|
|
||||||
[assembly: ThemeInfo(
|
|
||||||
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
|
|
||||||
//(used if a resource is not found in the page,
|
|
||||||
// or application resource dictionaries)
|
|
||||||
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
|
|
||||||
//(used if a resource is not found in the page,
|
|
||||||
// app, or any theme specific resource dictionaries)
|
|
||||||
)]
|
|
||||||
|
|
||||||
|
|
||||||
// Version information for an assembly consists of the following four values:
|
|
||||||
//
|
|
||||||
// Major Version
|
|
||||||
// Minor Version
|
|
||||||
// Build Number
|
|
||||||
// Revision
|
|
||||||
//
|
|
||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
|
||||||
// by using the '*' as shown below:
|
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
//------------------------------------------------------------------------------
|
|
||||||
// <auto-generated>
|
|
||||||
// This code was generated by a tool.
|
|
||||||
// Runtime Version:4.0.30319.18213
|
|
||||||
//
|
|
||||||
// Changes to this file may cause incorrect behavior and will be lost if
|
|
||||||
// the code is regenerated.
|
|
||||||
// </auto-generated>
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
namespace PocketSharp.Wpf.Properties {
|
|
||||||
using System;
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
|
||||||
/// </summary>
|
|
||||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
|
||||||
// class via a tool like ResGen or Visual Studio.
|
|
||||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
|
||||||
// with the /str option, or rebuild your VS project.
|
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
|
||||||
internal class Resources {
|
|
||||||
|
|
||||||
private static global::System.Resources.ResourceManager resourceMan;
|
|
||||||
|
|
||||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
|
||||||
|
|
||||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
|
||||||
internal Resources() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Returns the cached ResourceManager instance used by this class.
|
|
||||||
/// </summary>
|
|
||||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
|
||||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
|
||||||
get {
|
|
||||||
if (object.ReferenceEquals(resourceMan, null)) {
|
|
||||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PocketSharp.Wpf.Properties.Resources", typeof(Resources).Assembly);
|
|
||||||
resourceMan = temp;
|
|
||||||
}
|
|
||||||
return resourceMan;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Overrides the current thread's CurrentUICulture property for all
|
|
||||||
/// resource lookups using this strongly typed resource class.
|
|
||||||
/// </summary>
|
|
||||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
|
||||||
internal static global::System.Globalization.CultureInfo Culture {
|
|
||||||
get {
|
|
||||||
return resourceCulture;
|
|
||||||
}
|
|
||||||
set {
|
|
||||||
resourceCulture = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<root>
|
|
||||||
<!--
|
|
||||||
Microsoft ResX Schema
|
|
||||||
|
|
||||||
Version 2.0
|
|
||||||
|
|
||||||
The primary goals of this format is to allow a simple XML format
|
|
||||||
that is mostly human readable. The generation and parsing of the
|
|
||||||
various data types are done through the TypeConverter classes
|
|
||||||
associated with the data types.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
... ado.net/XML headers & schema ...
|
|
||||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
|
||||||
<resheader name="version">2.0</resheader>
|
|
||||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
|
||||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
|
||||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
|
||||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
|
||||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
|
||||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
|
||||||
</data>
|
|
||||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
|
||||||
<comment>This is a comment</comment>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
There are any number of "resheader" rows that contain simple
|
|
||||||
name/value pairs.
|
|
||||||
|
|
||||||
Each data row contains a name, and value. The row also contains a
|
|
||||||
type or mimetype. Type corresponds to a .NET class that support
|
|
||||||
text/value conversion through the TypeConverter architecture.
|
|
||||||
Classes that don't support this are serialized and stored with the
|
|
||||||
mimetype set.
|
|
||||||
|
|
||||||
The mimetype is used for serialized objects, and tells the
|
|
||||||
ResXResourceReader how to depersist the object. This is currently not
|
|
||||||
extensible. For a given mimetype the value must be set accordingly:
|
|
||||||
|
|
||||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
|
||||||
that the ResXResourceWriter will generate, however the reader can
|
|
||||||
read any of the formats listed below.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Serialization.Formatters.Binary.BinaryFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
|
||||||
value : The object must be serialized into a byte array
|
|
||||||
: using a System.ComponentModel.TypeConverter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
-->
|
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:choice maxOccurs="unbounded">
|
|
||||||
<xsd:element name="metadata">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="assembly">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:attribute name="alias" type="xsd:string" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="data">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="resheader">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:schema>
|
|
||||||
<resheader name="resmimetype">
|
|
||||||
<value>text/microsoft-resx</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="version">
|
|
||||||
<value>2.0</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="reader">
|
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="writer">
|
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
</root>
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
//------------------------------------------------------------------------------
|
|
||||||
// <auto-generated>
|
|
||||||
// This code was generated by a tool.
|
|
||||||
// Runtime Version:4.0.30319.18213
|
|
||||||
//
|
|
||||||
// Changes to this file may cause incorrect behavior and will be lost if
|
|
||||||
// the code is regenerated.
|
|
||||||
// </auto-generated>
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
namespace PocketSharp.Wpf.Properties {
|
|
||||||
|
|
||||||
|
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
|
|
||||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
|
||||||
|
|
||||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
|
||||||
|
|
||||||
public static Settings Default {
|
|
||||||
get {
|
|
||||||
return defaultInstance;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<?xml version='1.0' encoding='utf-8'?>
|
|
||||||
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
|
|
||||||
<Profiles>
|
|
||||||
<Profile Name="(Default)" />
|
|
||||||
</Profiles>
|
|
||||||
<Settings />
|
|
||||||
</SettingsFile>
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace PocketSharp.Wpf
|
|
||||||
{
|
|
||||||
public class Site
|
|
||||||
{
|
|
||||||
public string Url { get; set; }
|
|
||||||
public string Content { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<configuration>
|
|
||||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup>
|
|
||||||
<runtime>
|
|
||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.2.15.0" newVersion="4.2.15.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
</assemblyBinding>
|
|
||||||
</runtime>
|
|
||||||
</configuration>
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<packages>
|
|
||||||
<package id="Microsoft.Bcl" version="1.1.3" targetFramework="net45" />
|
|
||||||
<package id="Microsoft.Bcl.Async" version="1.0.16" targetFramework="net45" />
|
|
||||||
<package id="Microsoft.Bcl.Build" version="1.0.10" targetFramework="net45" />
|
|
||||||
<package id="Microsoft.Net.Http" version="2.2.15" targetFramework="net45" />
|
|
||||||
</packages>
|
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
using System;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Xunit;
|
|
||||||
using PocketSharp.Models;
|
using PocketSharp.Models;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
namespace PocketSharp.Tests
|
namespace PocketSharp.Tests
|
||||||
{
|
{
|
||||||
@@ -12,48 +11,22 @@ namespace PocketSharp.Tests
|
|||||||
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task IsUserRegistered()
|
public async Task IsAuthenticationSuccessful()
|
||||||
{
|
{
|
||||||
string randomId = ((int)((DateTime)DateTime.Now - new DateTime(1970, 1, 1)).TotalSeconds).ToString();
|
string requestCode = await client.GetRequestCode();
|
||||||
|
|
||||||
bool success = await client.RegisterAccount("pocket-" + randomId, String.Format("pocketsharp-{0}@outlook.com", randomId), "mypassword");
|
PocketUser user = await client.GetUser(requestCode);
|
||||||
|
|
||||||
Assert.True(success);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task AreInvalidRegistrationsBlocked()
|
public async Task IsRegistrationURLSuccessfullyCreated()
|
||||||
{
|
{
|
||||||
await ThrowsAsync<FormatException>(async () =>
|
string requestCode = await client.GetRequestCode();
|
||||||
{
|
|
||||||
await client.RegisterAccount("abcdefghijklmnopqrstuvwxyz", "pocketsharp@outlook.com", "mypassword");
|
|
||||||
});
|
|
||||||
|
|
||||||
await ThrowsAsync<FormatException>(async () =>
|
Uri uri = client.GenerateRegistrationUri(requestCode);
|
||||||
{
|
|
||||||
await client.RegisterAccount("oiu_my:o;", "pocketsharp@outlook.com", "mypassword");
|
|
||||||
});
|
|
||||||
|
|
||||||
await ThrowsAsync<FormatException>(async () =>
|
Assert.Contains(requestCode, uri.OriginalString);
|
||||||
{
|
Assert.Contains("force=signup", uri.OriginalString);
|
||||||
await client.RegisterAccount("myusername", "pocketsharpoutlook.com", "mypassword");
|
|
||||||
});
|
|
||||||
|
|
||||||
await ThrowsAsync<FormatException>(async () =>
|
|
||||||
{
|
|
||||||
await client.RegisterAccount("myusername", "pocketsharp@outlook", "mypassword");
|
|
||||||
});
|
|
||||||
|
|
||||||
await ThrowsAsync<FormatException>(async () =>
|
|
||||||
{
|
|
||||||
await client.RegisterAccount("myusername", "pocketsharp@outlook,com", "mypassword");
|
|
||||||
});
|
|
||||||
|
|
||||||
await ThrowsAsync<ArgumentNullException>(async () =>
|
|
||||||
{
|
|
||||||
await client.RegisterAccount("myusername", null, "mypassword");
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
using System;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Xunit;
|
|
||||||
using PocketSharp.Models;
|
using PocketSharp.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Xunit;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace PocketSharp.Tests
|
namespace PocketSharp.Tests
|
||||||
{
|
{
|
||||||
@@ -24,6 +25,19 @@ namespace PocketSharp.Tests
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task ItemWithInstableImagesIsAdded()
|
||||||
|
{
|
||||||
|
var uri = new Uri("http://www.valoronline.com.br");
|
||||||
|
|
||||||
|
PocketItem item = await client.Add(uri);
|
||||||
|
|
||||||
|
Assert.NotNull(item);
|
||||||
|
|
||||||
|
itemsToDelete.Add(item.ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task AddComplexItem()
|
public async Task AddComplexItem()
|
||||||
{
|
{
|
||||||
@@ -34,12 +48,12 @@ namespace PocketSharp.Tests
|
|||||||
tweetID: "380051788172632065"
|
tweetID: "380051788172632065"
|
||||||
);
|
);
|
||||||
|
|
||||||
List<PocketItem> items = await client.Get();
|
List<PocketItem> items = (await client.Get()).ToList();
|
||||||
PocketItem itemDesired = null;
|
PocketItem itemDesired = null;
|
||||||
|
|
||||||
items.ForEach(itm =>
|
items.ForEach(itm =>
|
||||||
{
|
{
|
||||||
if(itm.ID == item.ID)
|
if (itm.ID == item.ID)
|
||||||
{
|
{
|
||||||
itemDesired = itm;
|
itemDesired = itm;
|
||||||
}
|
}
|
||||||
@@ -47,9 +61,65 @@ namespace PocketSharp.Tests
|
|||||||
|
|
||||||
Assert.NotNull(itemDesired);
|
Assert.NotNull(itemDesired);
|
||||||
Assert.Equal(itemDesired.ID, item.ID);
|
Assert.Equal(itemDesired.ID, item.ID);
|
||||||
Assert.Equal(itemDesired.Tags.Count, 3);
|
Assert.Equal(3, itemDesired.Tags.Count());
|
||||||
|
|
||||||
itemsToDelete.Add(item.ID);
|
itemsToDelete.Add(item.ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task ItemViaActionsIsAdded()
|
||||||
|
{
|
||||||
|
List<PocketAction> actions = new List<PocketAction>();
|
||||||
|
|
||||||
|
actions.Add(new PocketAction()
|
||||||
|
{
|
||||||
|
Uri = new Uri("http://frontendplay.com/story/4015/string-indexer-for-text-resources-in-nancy"),
|
||||||
|
Action = "add",
|
||||||
|
Time = DateTime.Now
|
||||||
|
});
|
||||||
|
|
||||||
|
bool success = await client.SendActions(actions);
|
||||||
|
|
||||||
|
Assert.True(success);
|
||||||
|
|
||||||
|
IEnumerable<PocketItem> items = await client.Search("in nancy");
|
||||||
|
|
||||||
|
Assert.NotNull(items);
|
||||||
|
Assert.True(items.Count() > 0);
|
||||||
|
|
||||||
|
itemsToDelete.Add(items.First().ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task ItemsViaActionsIsAdded()
|
||||||
|
{
|
||||||
|
List<PocketAction> actions = new List<PocketAction>();
|
||||||
|
|
||||||
|
actions.Add(new PocketAction()
|
||||||
|
{
|
||||||
|
Uri = new Uri("http://frontendplay.com/story/4015/string-indexer-for-text-resources-in-nancy"),
|
||||||
|
Action = "add",
|
||||||
|
Time = DateTime.Now
|
||||||
|
});
|
||||||
|
actions.Add(new PocketAction()
|
||||||
|
{
|
||||||
|
Uri = new Uri("http://frontendplay.com/story/4013/build-a-custom-razor-viewbase-in-nancy"),
|
||||||
|
Action = "add",
|
||||||
|
Time = DateTime.Now
|
||||||
|
});
|
||||||
|
|
||||||
|
bool success = await client.SendActions(actions);
|
||||||
|
|
||||||
|
Assert.True(success);
|
||||||
|
|
||||||
|
IEnumerable<PocketItem> items = await client.Search("in nancy");
|
||||||
|
|
||||||
|
Assert.NotNull(items);
|
||||||
|
Assert.True(items.Count() == 2);
|
||||||
|
|
||||||
|
itemsToDelete.AddRange(items.Select(item => item.ID));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
using PocketSharp.Models;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Xunit;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace PocketSharp.Tests
|
||||||
|
{
|
||||||
|
public class ExploreTests : TestsBase
|
||||||
|
{
|
||||||
|
public ExploreTests() : base()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//[Fact]
|
||||||
|
//public async Task CheckPreRequestAction()
|
||||||
|
//{
|
||||||
|
// var results = await client.Explore(".net");
|
||||||
|
|
||||||
|
// Assert.NotEmpty(results);
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,8 +1,11 @@
|
|||||||
using System;
|
using Newtonsoft.Json.Linq;
|
||||||
using System.Threading.Tasks;
|
using Newtonsoft.Json.Schema;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Xunit;
|
|
||||||
using PocketSharp.Models;
|
using PocketSharp.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Xunit;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace PocketSharp.Tests
|
namespace PocketSharp.Tests
|
||||||
{
|
{
|
||||||
@@ -14,8 +17,7 @@ namespace PocketSharp.Tests
|
|||||||
[Fact]
|
[Fact]
|
||||||
public async Task AreItemsRetrieved()
|
public async Task AreItemsRetrieved()
|
||||||
{
|
{
|
||||||
List<PocketItem> items = await client.Get();
|
List<PocketItem> items = (await client.Get()).ToList();
|
||||||
|
|
||||||
Assert.True(items.Count > 0);
|
Assert.True(items.Count > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,7 +25,7 @@ namespace PocketSharp.Tests
|
|||||||
[Fact]
|
[Fact]
|
||||||
public async Task IsItemRetrievedById()
|
public async Task IsItemRetrievedById()
|
||||||
{
|
{
|
||||||
List<PocketItem> items = await client.Get();
|
List<PocketItem> items = (await client.Get()).ToList();
|
||||||
PocketItem item = items[0];
|
PocketItem item = items[0];
|
||||||
PocketItem itemDuplicate = await client.Get(item.ID);
|
PocketItem itemDuplicate = await client.Get(item.ID);
|
||||||
|
|
||||||
@@ -32,19 +34,47 @@ namespace PocketSharp.Tests
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task AreSuggestionsRetrieved()
|
||||||
|
{
|
||||||
|
var articles = await client.GetTrendingArticles();
|
||||||
|
string itemId = articles.First().ID;
|
||||||
|
|
||||||
|
List<PocketItem> suggestions = (await client.GetSuggestions(itemId)).ToList();
|
||||||
|
Assert.True(suggestions.Count > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// [Fact]
|
||||||
|
// public async Task IsItemJsonPopulated()
|
||||||
|
// {
|
||||||
|
// List<PocketItem> items = (await client.Get()).ToList();
|
||||||
|
// string schemaJson = @"{
|
||||||
|
// 'description': 'PocketItem',
|
||||||
|
// 'type': 'object'
|
||||||
|
// }";
|
||||||
|
|
||||||
|
// JsonSchema schema = JsonSchema.Parse(schemaJson);
|
||||||
|
// foreach (var pocketItem in items)
|
||||||
|
// {
|
||||||
|
// Assert.True(!string.IsNullOrWhiteSpace(pocketItem.Json));
|
||||||
|
// var jObject = JObject.Parse(pocketItem.Json);
|
||||||
|
// Assert.True(jObject.IsValid(schema));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task AreFilteredItemsRetrieved()
|
public async Task AreFilteredItemsRetrieved()
|
||||||
{
|
{
|
||||||
List<PocketItem> items = await client.Get(RetrieveFilter.Favorite);
|
IEnumerable<PocketItem> items = await client.Get(RetrieveFilter.Favorite);
|
||||||
|
|
||||||
Assert.True(items.Count > 0);
|
Assert.True(items.Count() > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task RetrieveWithMultipleFilters()
|
public async Task RetrieveWithMultipleFilters()
|
||||||
{
|
{
|
||||||
List<PocketItem> items = await client.Get(
|
IEnumerable<PocketItem> items = await client.Get(
|
||||||
state: State.unread,
|
state: State.unread,
|
||||||
tag: "pocket",
|
tag: "pocket",
|
||||||
sort: Sort.title,
|
sort: Sort.title,
|
||||||
@@ -52,78 +82,78 @@ namespace PocketSharp.Tests
|
|||||||
count: 2
|
count: 2
|
||||||
);
|
);
|
||||||
|
|
||||||
Assert.InRange<int>(items.Count, 0, 2);
|
Assert.InRange<int>(items.Count(), 0, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task ItemContainsUri()
|
public async Task ItemContainsUri()
|
||||||
{
|
{
|
||||||
List<PocketItem> items = await client.Get(count: 1);
|
IEnumerable<PocketItem> items = await client.Get(count: 1);
|
||||||
|
|
||||||
Assert.True(items.Count == 1);
|
Assert.True(1 == items.Count());
|
||||||
Assert.True(items[0].Uri.ToString().StartsWith("http"));
|
Assert.StartsWith("http", items.First().Uri.OriginalString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task InvalidRetrievalReturnsNoResults()
|
public async Task InvalidRetrievalReturnsNoResults()
|
||||||
{
|
{
|
||||||
List<PocketItem> items = await client.Get(
|
IEnumerable<PocketItem> items = await client.Get(
|
||||||
favorite: true,
|
favorite: true,
|
||||||
search: "xoiu987a#;"
|
search: "xoiu987a#;"
|
||||||
);
|
);
|
||||||
|
|
||||||
Assert.False(items.Count > 0);
|
Assert.False(items.Count() > 0);
|
||||||
|
|
||||||
PocketItem item = await client.Get(99999999);
|
PocketItem item = await client.Get("99999999");
|
||||||
|
|
||||||
Assert.Null(item);
|
Assert.Null(item);
|
||||||
|
|
||||||
items = await client.Get(RetrieveFilter.Video);
|
items = await client.Get(RetrieveFilter.Video);
|
||||||
|
|
||||||
Assert.False(items.Count > 0);
|
Assert.False(items.Count() > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task SearchReturnsResult()
|
public async Task SearchReturnsResult()
|
||||||
{
|
{
|
||||||
List<PocketItem> items = await client.Search("pocket");
|
IEnumerable<PocketItem> items = await client.Search("pocket");
|
||||||
|
|
||||||
Assert.True(items.Count > 0);
|
Assert.True(items.Count() > 0);
|
||||||
Assert.True(items[0].FullTitle.ToLower().Contains("pocket"));
|
Assert.Contains("pocket", items.First().FullTitle.ToLower());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task InvalidSearchReturnsNoResult()
|
public async Task InvalidSearchReturnsNoResult()
|
||||||
{
|
{
|
||||||
List<PocketItem> items = await client.Search("adsüasd-opiu2;.398dfyx");
|
IEnumerable<PocketItem> items = await client.Search("adsüasd-opiu2;.398dfyx");
|
||||||
|
|
||||||
Assert.False(items.Count > 0);
|
Assert.False(items.Count() > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task RetrieveTagsReturnsResult()
|
public async Task RetrieveTagsReturnsResult()
|
||||||
{
|
{
|
||||||
List<PocketTag> items = await client.GetTags();
|
IEnumerable<PocketTag> items = await client.GetTags();
|
||||||
|
|
||||||
Assert.True(items.Count > 0);
|
Assert.True(items.Count() > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task SearchByTagsReturnsResult()
|
public async Task SearchByTagsReturnsResult()
|
||||||
{
|
{
|
||||||
List<PocketItem> items = await client.SearchByTag("pocket");
|
IEnumerable<PocketItem> items = await client.SearchByTag("pocket");
|
||||||
|
|
||||||
Assert.True(items.Count == 1);
|
Assert.True(items.Count() == 1);
|
||||||
|
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
items[0].Tags.ForEach(tag =>
|
items.First().Tags.ToList().ForEach(tag =>
|
||||||
{
|
{
|
||||||
if (tag.Name.Contains("pocket"))
|
if (tag.Name.Contains("pocket"))
|
||||||
{
|
{
|
||||||
@@ -138,16 +168,16 @@ namespace PocketSharp.Tests
|
|||||||
[Fact]
|
[Fact]
|
||||||
public async Task InvalidSearchByTagsReturnsNoResult()
|
public async Task InvalidSearchByTagsReturnsNoResult()
|
||||||
{
|
{
|
||||||
List<PocketItem> items = await client.SearchByTag("adsüasd-opiu2;.398dfyx");
|
IEnumerable<PocketItem> items = await client.SearchByTag("adsüasd-opiu2;.398dfyx");
|
||||||
|
|
||||||
Assert.False(items.Count > 0);
|
Assert.False(items.Count() > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task AreStatisticsRetrieved()
|
public async Task AreStatisticsRetrieved()
|
||||||
{
|
{
|
||||||
PocketStatistics statistics = await client.Statistics();
|
PocketStatistics statistics = await client.GetUserStatistics();
|
||||||
|
|
||||||
Assert.True(statistics.CountAll > 0);
|
Assert.True(statistics.CountAll > 0);
|
||||||
}
|
}
|
||||||
@@ -160,5 +190,128 @@ namespace PocketSharp.Tests
|
|||||||
|
|
||||||
Assert.True(limits.RateLimitForConsumerKey > 9999);
|
Assert.True(limits.RateLimitForConsumerKey > 9999);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task IsNewPocketItemListGeneratorWorking()
|
||||||
|
{
|
||||||
|
IEnumerable<PocketItem> items = await client.Get(count: 1, tag: "pocket");
|
||||||
|
PocketItem item = items.First();
|
||||||
|
|
||||||
|
Assert.True(item.Tags.ToList().Find(i => i.Name == "pocket") != null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task IsSinceParameterWorkingOnAddTags()
|
||||||
|
{
|
||||||
|
DateTime since = DateTime.Now;
|
||||||
|
|
||||||
|
IEnumerable<PocketItem> items = await client.Get(state: State.all);
|
||||||
|
PocketItem itemToModify = items.First();
|
||||||
|
|
||||||
|
Assert.True(items.Count() >= 3);
|
||||||
|
|
||||||
|
items = await client.Get(state: State.all, since: since);
|
||||||
|
|
||||||
|
Assert.True(items == null || items.Count() == 0);
|
||||||
|
|
||||||
|
await client.AddTags(itemToModify, new string[] { "pocketsharp" });
|
||||||
|
|
||||||
|
items = await client.Get(state: State.all, since: since);
|
||||||
|
|
||||||
|
Assert.True(items.Count() > 0);
|
||||||
|
|
||||||
|
await client.RemoveTags(itemToModify, new string[] { "pocketsharp" });
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task IsSinceParameterWorkingOnFavoriteAndArchiveModification()
|
||||||
|
{
|
||||||
|
DateTime since = DateTime.Now;//1409221736
|
||||||
|
|
||||||
|
IEnumerable<PocketItem> items = await client.Get(state: State.all);
|
||||||
|
PocketItem itemToModify = items.First();
|
||||||
|
|
||||||
|
Assert.True(items.Count() >= 3);
|
||||||
|
|
||||||
|
items = await client.Get(state: State.all, since: since);
|
||||||
|
|
||||||
|
Assert.True(items == null || items.Count() == 0);
|
||||||
|
|
||||||
|
await client.Favorite(itemToModify);
|
||||||
|
|
||||||
|
items = await client.Get(state: State.all, since: since);
|
||||||
|
|
||||||
|
Assert.True(items.Count() > 0);
|
||||||
|
|
||||||
|
await client.Unfavorite(itemToModify);
|
||||||
|
|
||||||
|
since = DateTime.Now;
|
||||||
|
|
||||||
|
await client.Archive(itemToModify);
|
||||||
|
|
||||||
|
items = await client.Get(state: State.all, since: since);
|
||||||
|
|
||||||
|
Assert.True(items.Count() > 0);
|
||||||
|
|
||||||
|
await client.Unarchive(itemToModify);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task IsUTCSinceParameterWorking()
|
||||||
|
{
|
||||||
|
DateTime since = DateTime.UtcNow;
|
||||||
|
|
||||||
|
IEnumerable<PocketItem> items = await client.Get(state: State.all);
|
||||||
|
PocketItem itemToModify = items.First();
|
||||||
|
|
||||||
|
items = await client.Get(state: State.all, since: since);
|
||||||
|
|
||||||
|
Assert.True(items == null || items.Count() == 0);
|
||||||
|
|
||||||
|
await client.Favorite(itemToModify);
|
||||||
|
|
||||||
|
items = await client.Get(state: State.all, since: since);
|
||||||
|
|
||||||
|
Assert.True(items.Count() > 0);
|
||||||
|
|
||||||
|
await client.Unfavorite(itemToModify);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task IsSinceParameterWorkingOnAddAndDelete()
|
||||||
|
{
|
||||||
|
DateTime since = DateTime.UtcNow;
|
||||||
|
|
||||||
|
PocketItem item = await client.Add(new Uri("http://frontendplay.com"));
|
||||||
|
|
||||||
|
IEnumerable<PocketItem> items = await client.Get(state: State.all, since: since);
|
||||||
|
|
||||||
|
since = DateTime.UtcNow;
|
||||||
|
|
||||||
|
await client.Delete(item);
|
||||||
|
|
||||||
|
items = await client.Get(state: State.all, since: since);
|
||||||
|
|
||||||
|
Assert.True(items.Count() == 1 && items.First().IsDeleted);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task AreUncachedItemsProperlyResolved()
|
||||||
|
{
|
||||||
|
PocketItem item = await client.Add(new Uri("http://de.ign.com/m/feature/21608/die-20-besten-kurzfilme-des-jahres-2013?bust=1"));
|
||||||
|
|
||||||
|
IEnumerable<PocketItem> items = await client.Get(state: State.all);
|
||||||
|
|
||||||
|
Assert.NotNull(item.Uri);
|
||||||
|
Assert.NotNull(items.First().Uri);
|
||||||
|
Assert.Equal(item.Uri, items.First().Uri);
|
||||||
|
|
||||||
|
itemsToDelete.Add(item.ID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
using PocketSharp.Models;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Xunit;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace PocketSharp.Tests
|
||||||
|
{
|
||||||
|
public class MiscTests : TestsBase
|
||||||
|
{
|
||||||
|
private int Incrementor = 0;
|
||||||
|
|
||||||
|
public MiscTests() : base()
|
||||||
|
{
|
||||||
|
client.PreRequest = method => Incrementor++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task CheckPreRequestAction()
|
||||||
|
{
|
||||||
|
IEnumerable<PocketItem> items = await client.Get(count: 1);
|
||||||
|
PocketItem item = items.First();
|
||||||
|
|
||||||
|
await client.Favorite(item);
|
||||||
|
await client.Unfavorite(item);
|
||||||
|
|
||||||
|
Assert.True(Incrementor >= 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ItemEqualityChecks()
|
||||||
|
{
|
||||||
|
PocketItem item1 = new PocketItem() { ID = "12872" };
|
||||||
|
PocketItem item2 = new PocketItem() { ID = "12872" };
|
||||||
|
PocketItem item3 = new PocketItem() { ID = "12800" };
|
||||||
|
PocketArticle article = new PocketArticle();
|
||||||
|
|
||||||
|
Assert.True(item1.Equals(item2));
|
||||||
|
Assert.False(item1.Equals(item3));
|
||||||
|
Assert.False(item1.Equals(null));
|
||||||
|
|
||||||
|
Assert.True(item1 == item2);
|
||||||
|
Assert.False(item1 == item3);
|
||||||
|
Assert.False(item1 == null);
|
||||||
|
|
||||||
|
Assert.False(item1 != item2);
|
||||||
|
Assert.True(item1 != item3);
|
||||||
|
Assert.True(item1 != null);
|
||||||
|
|
||||||
|
Assert.False(item1.Equals(article));
|
||||||
|
|
||||||
|
Assert.True(new List<PocketItem>() { item1 }.IndexOf(item2) > -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
using System;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Xunit;
|
|
||||||
using PocketSharp.Models;
|
using PocketSharp.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
namespace PocketSharp.Tests
|
namespace PocketSharp.Tests
|
||||||
{
|
{
|
||||||
@@ -21,7 +21,7 @@ namespace PocketSharp.Tests
|
|||||||
|
|
||||||
item = await GetItemById(item.ID);
|
item = await GetItemById(item.ID);
|
||||||
|
|
||||||
Assert.True(item.Tags.Count >= 2);
|
Assert.True(item.Tags.Count() >= 2);
|
||||||
|
|
||||||
Assert.NotNull(item.Tags.Single<PocketTag>(tag => tag.Name == "test_tag"));
|
Assert.NotNull(item.Tags.Single<PocketTag>(tag => tag.Name == "test_tag"));
|
||||||
Assert.NotNull(item.Tags.Single<PocketTag>(tag => tag.Name == "test_tag2"));
|
Assert.NotNull(item.Tags.Single<PocketTag>(tag => tag.Name == "test_tag2"));
|
||||||
@@ -44,7 +44,7 @@ namespace PocketSharp.Tests
|
|||||||
|
|
||||||
item = await GetItemById(item.ID);
|
item = await GetItemById(item.ID);
|
||||||
|
|
||||||
Assert.True(item.Tags.Count >= 2);
|
Assert.True(item.Tags.Count() >= 2);
|
||||||
|
|
||||||
Assert.True(await client.RemoveTags(item));
|
Assert.True(await client.RemoveTags(item));
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ namespace PocketSharp.Tests
|
|||||||
|
|
||||||
item = await GetItemById(item.ID);
|
item = await GetItemById(item.ID);
|
||||||
|
|
||||||
Assert.Equal(item.Tags.Count, 2);
|
Assert.Equal(2, item.Tags.Count());
|
||||||
|
|
||||||
Assert.NotNull(item.Tags.SingleOrDefault<PocketTag>(tag => tag.Name == "test_tag"));
|
Assert.NotNull(item.Tags.SingleOrDefault<PocketTag>(tag => tag.Name == "test_tag"));
|
||||||
Assert.NotNull(item.Tags.SingleOrDefault<PocketTag>(tag => tag.Name == "test_tag2"));
|
Assert.NotNull(item.Tags.SingleOrDefault<PocketTag>(tag => tag.Name == "test_tag2"));
|
||||||
@@ -83,9 +83,9 @@ namespace PocketSharp.Tests
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private async Task<PocketItem> GetItemById(int id, bool archive = false)
|
private async Task<PocketItem> GetItemById(string id, bool archive = false)
|
||||||
{
|
{
|
||||||
List<PocketItem> items = await client.Get(state: archive ? State.archive : State.unread);
|
List<PocketItem> items = (await client.Get(state: archive ? State.archive : State.unread)).ToList();
|
||||||
PocketItem itemDesired = null;
|
PocketItem itemDesired = null;
|
||||||
|
|
||||||
items.ForEach(itm =>
|
items.ForEach(itm =>
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
using System;
|
using PocketSharp.Models;
|
||||||
using System.Threading.Tasks;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
using PocketSharp.Models;
|
|
||||||
|
|
||||||
namespace PocketSharp.Tests
|
namespace PocketSharp.Tests
|
||||||
{
|
{
|
||||||
@@ -62,6 +63,65 @@ namespace PocketSharp.Tests
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task AreMultipleActionsSent()
|
||||||
|
{
|
||||||
|
PocketItem item = await Setup();
|
||||||
|
|
||||||
|
bool success = await client.SendActions(new List<PocketAction>()
|
||||||
|
{
|
||||||
|
new PocketAction() { Action = "favorite", ID = item.ID },
|
||||||
|
new PocketAction() { Action = "tags_add", ID = item.ID, Tags = new string[] { "new_tag", "another_tag" } },
|
||||||
|
new PocketAction() { Action = "archive", ID = item.ID }
|
||||||
|
});
|
||||||
|
|
||||||
|
Assert.True(success);
|
||||||
|
|
||||||
|
item = await client.Get(item.ID);
|
||||||
|
|
||||||
|
Assert.True(item.IsFavorite);
|
||||||
|
Assert.True(item.IsArchive);
|
||||||
|
Assert.NotNull(item.Tags.Single<PocketTag>(tag => tag.Name == "new_tag"));
|
||||||
|
Assert.NotNull(item.Tags.Single<PocketTag>(tag => tag.Name == "another_tag"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task AreMultipleAddActionsSent()
|
||||||
|
{
|
||||||
|
PocketItem item = await Setup();
|
||||||
|
|
||||||
|
bool success = await client.SendActions(new List<PocketAction>()
|
||||||
|
{
|
||||||
|
new PocketAction() { Action = "add", Uri = new Uri("http://msdn.microsoft.com/en-us/library/windows/apps/jj841126.aspx") },
|
||||||
|
new PocketAction() { Action = "add", Uri = new Uri("http://pokiapp.com/changelog") }
|
||||||
|
});
|
||||||
|
|
||||||
|
Assert.True(success);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task AreMultipleActionsOnOneItemPerformed()
|
||||||
|
{
|
||||||
|
PocketItem item = await Setup();
|
||||||
|
|
||||||
|
bool success = await client.SendActions(new List<PocketAction>()
|
||||||
|
{
|
||||||
|
new PocketAction() { Action = "unarchive", ID = item.ID },
|
||||||
|
new PocketAction() { Action = "archive", ID = item.ID },
|
||||||
|
new PocketAction() { Action = "unfavorite", ID = item.ID }
|
||||||
|
});
|
||||||
|
|
||||||
|
Assert.True(success);
|
||||||
|
|
||||||
|
item = await client.Get(item.ID);
|
||||||
|
|
||||||
|
Assert.False(item.IsFavorite);
|
||||||
|
Assert.True(item.IsArchive);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private async Task<PocketItem> Setup()
|
private async Task<PocketItem> Setup()
|
||||||
{
|
{
|
||||||
PocketItem item = await client.Add(
|
PocketItem item = await client.Add(
|
||||||
@@ -75,9 +135,9 @@ namespace PocketSharp.Tests
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private async Task<PocketItem> GetItemById(int id, bool archive = false)
|
private async Task<PocketItem> GetItemById(string id, bool archive = false)
|
||||||
{
|
{
|
||||||
List<PocketItem> items = await client.Get(state: archive ? State.archive : State.unread);
|
List<PocketItem> items = (await client.Get(state: archive ? State.archive : State.unread)).ToList();
|
||||||
PocketItem itemDesired = null;
|
PocketItem itemDesired = null;
|
||||||
|
|
||||||
items.ForEach(itm =>
|
items.ForEach(itm =>
|
||||||
|
|||||||
@@ -1,129 +1,38 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<TargetFramework>netcoreapp2.0</TargetFramework>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
|
||||||
<ProjectGuid>{CA3C491B-A8CA-426C-A0BB-E91636767467}</ProjectGuid>
|
<IsPackable>false</IsPackable>
|
||||||
<OutputType>Library</OutputType>
|
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
|
||||||
<RootNamespace>PocketSharp.Tests</RootNamespace>
|
|
||||||
<AssemblyName>PocketSharp.Tests</AssemblyName>
|
|
||||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
|
||||||
<FileAlignment>512</FileAlignment>
|
|
||||||
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
|
||||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
|
||||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
|
||||||
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
|
|
||||||
<IsCodedUITest>False</IsCodedUITest>
|
|
||||||
<TestProjectType>UnitTest</TestProjectType>
|
|
||||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
|
||||||
<RestorePackages>true</RestorePackages>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>bin\Debug\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>bin\Release\</OutputPath>
|
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Microsoft.Threading.Tasks">
|
<None Remove="url-10000.csv" />
|
||||||
<HintPath>..\packages\Microsoft.Bcl.Async.1.0.16\lib\net45\Microsoft.Threading.Tasks.dll</HintPath>
|
<None Remove="url-100000.csv" />
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.Threading.Tasks.Extensions">
|
|
||||||
<HintPath>..\packages\Microsoft.Bcl.Async.1.0.16\lib\net45\Microsoft.Threading.Tasks.Extensions.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System" />
|
|
||||||
<Reference Include="System.Net" />
|
|
||||||
<Reference Include="System.Net.Http" />
|
|
||||||
<Reference Include="System.Net.Http.Extensions, Version=2.2.15.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
<HintPath>..\packages\Microsoft.Net.Http.2.2.15\lib\net45\System.Net.Http.Extensions.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Net.Http.Primitives, Version=4.2.15.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
<HintPath>..\packages\Microsoft.Net.Http.2.2.15\lib\net45\System.Net.Http.Primitives.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Net.Http.WebRequest" />
|
|
||||||
<Reference Include="xunit">
|
|
||||||
<HintPath>..\packages\xunit.1.9.2\lib\net20\xunit.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Choose>
|
|
||||||
<When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
|
|
||||||
<ItemGroup>
|
|
||||||
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
|
|
||||||
</ItemGroup>
|
|
||||||
</When>
|
|
||||||
<Otherwise />
|
|
||||||
</Choose>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="AddTests.cs" />
|
<Content Include="url-10000.csv">
|
||||||
<Compile Include="AccountTests.cs" />
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
<Compile Include="ModifyTagsTests.cs" />
|
</Content>
|
||||||
<Compile Include="ModifyTests.cs" />
|
<Content Include="url-100000.csv">
|
||||||
<Compile Include="GetTests.cs" />
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
</Content>
|
||||||
<Compile Include="ReadTests.cs" />
|
|
||||||
<Compile Include="TestsBase.cs" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\PocketSharp\PocketSharp.csproj">
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />
|
||||||
<Project>{817200c3-a327-4e35-9b5f-63a51c088577}</Project>
|
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
|
||||||
<Name>PocketSharp</Name>
|
<PackageReference Include="xunit" Version="2.4.1" />
|
||||||
</ProjectReference>
|
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
|
<DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="app.config" />
|
<ProjectReference Include="..\PocketSharp\PocketSharp.csproj" />
|
||||||
<None Include="packages.config" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Choose>
|
|
||||||
<When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'">
|
</Project>
|
||||||
<ItemGroup>
|
|
||||||
<Reference Include="Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<Private>False</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<Private>False</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<Private>False</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<Private>False</Private>
|
|
||||||
</Reference>
|
|
||||||
</ItemGroup>
|
|
||||||
</When>
|
|
||||||
</Choose>
|
|
||||||
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
|
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
|
||||||
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
|
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
|
||||||
<PropertyGroup>
|
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
|
|
||||||
</Target>
|
|
||||||
<Import Project="..\packages\Microsoft.Bcl.Build.1.0.10\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.10\tools\Microsoft.Bcl.Build.targets')" />
|
|
||||||
<Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
|
|
||||||
<Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.10\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
|
|
||||||
<Error Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.10\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
|
|
||||||
</Target>
|
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
|
||||||
<Target Name="BeforeBuild">
|
|
||||||
</Target>
|
|
||||||
<Target Name="AfterBuild">
|
|
||||||
</Target>
|
|
||||||
-->
|
|
||||||
</Project>
|
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
using System.Reflection;
|
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
|
||||||
// set of attributes. Change these attribute values to modify the information
|
|
||||||
// associated with an assembly.
|
|
||||||
[assembly: AssemblyTitle("PocketSharp.Tests")]
|
|
||||||
[assembly: AssemblyDescription("")]
|
|
||||||
[assembly: AssemblyConfiguration("")]
|
|
||||||
[assembly: AssemblyCompany("")]
|
|
||||||
[assembly: AssemblyProduct("PocketSharp.Tests")]
|
|
||||||
[assembly: AssemblyCopyright("Copyright © 2013")]
|
|
||||||
[assembly: AssemblyTrademark("")]
|
|
||||||
[assembly: AssemblyCulture("")]
|
|
||||||
|
|
||||||
// Setting ComVisible to false makes the types in this assembly not visible
|
|
||||||
// to COM components. If you need to access a type in this assembly from
|
|
||||||
// COM, set the ComVisible attribute to true on that type.
|
|
||||||
[assembly: ComVisible(false)]
|
|
||||||
|
|
||||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
|
||||||
[assembly: Guid("87fcf138-5e6e-4584-ac3b-58c8ee6fccaa")]
|
|
||||||
|
|
||||||
// Version information for an assembly consists of the following four values:
|
|
||||||
//
|
|
||||||
// Major Version
|
|
||||||
// Minor Version
|
|
||||||
// Build Number
|
|
||||||
// Revision
|
|
||||||
//
|
|
||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
|
||||||
// by using the '*' as shown below:
|
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Xunit;
|
|
||||||
using PocketSharp.Models;
|
|
||||||
using System.Diagnostics;
|
|
||||||
|
|
||||||
namespace PocketSharp.Tests
|
|
||||||
{
|
|
||||||
public class ReadTests : TestsBase
|
|
||||||
{
|
|
||||||
private PocketReader reader;
|
|
||||||
|
|
||||||
|
|
||||||
public ReadTests() : base()
|
|
||||||
{
|
|
||||||
reader = new PocketReader();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public async Task ReadArticleTest()
|
|
||||||
{
|
|
||||||
PocketArticle result = await reader.Read(new PocketItem()
|
|
||||||
{
|
|
||||||
ID = 99,
|
|
||||||
Uri = new Uri("http://frontendplay.com/story/4/http-caching-demystified-part-2-implementation")
|
|
||||||
});
|
|
||||||
|
|
||||||
Assert.True(result.Content.Length > 15000);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public async Task ReadArticleWithInvalidUriTest()
|
|
||||||
{
|
|
||||||
await ThrowsAsync<PocketException>(async () =>
|
|
||||||
{
|
|
||||||
await reader.Read(new PocketItem()
|
|
||||||
{
|
|
||||||
ID = 99,
|
|
||||||
Uri = new Uri("http://frontendplayyyyy.com")
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public async Task IsBodyOnlyProperlyResolved()
|
|
||||||
{
|
|
||||||
PocketArticle result = await reader.Read(new PocketItem()
|
|
||||||
{
|
|
||||||
ID = 99,
|
|
||||||
Uri = new Uri("http://calebjacob.com/tooltipster/")
|
|
||||||
});
|
|
||||||
|
|
||||||
Assert.True(result.Content.Substring(0, 4) == "<div");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,131 @@
|
|||||||
|
using PocketSharp.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace PocketSharp.Tests
|
||||||
|
{
|
||||||
|
public class StressTests : TestsBase
|
||||||
|
{
|
||||||
|
private static IEnumerable<string> urls;
|
||||||
|
private static string[] tags = new string[] { "css", "js", "csharp", "windows", "microsoft" };
|
||||||
|
|
||||||
|
|
||||||
|
public StressTests()
|
||||||
|
: base()
|
||||||
|
{
|
||||||
|
// !! please don't misuse this account !!
|
||||||
|
client = new PocketClient(
|
||||||
|
consumerKey: "20000-786d0bc8c39294e9829111d6",
|
||||||
|
callbackUri: "http://frontendplay.com",
|
||||||
|
accessCode: "9b8ecb6b-7801-1a5c-7b39-2ba05b"
|
||||||
|
);
|
||||||
|
|
||||||
|
urls = File.ReadAllLines("../../url-100000.csv").Select(item => item.Split(',')[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task Are100ItemsRetrievedProperly()
|
||||||
|
{
|
||||||
|
IEnumerable<PocketItem> items = await client.Get(count: 100, state: State.all);
|
||||||
|
Assert.True(items.Count() == 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task Are1000ItemsRetrievedProperly()
|
||||||
|
{
|
||||||
|
IEnumerable<PocketItem> items = await client.Get(count: 1000, state: State.all);
|
||||||
|
Assert.True(items.Count() == 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task Are2500ItemsRetrievedProperly()
|
||||||
|
{
|
||||||
|
IEnumerable<PocketItem> items = await client.Get(count: 2500, state: State.all);
|
||||||
|
Assert.True(items.Count() == 2500);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task Are5000ItemsRetrievedProperly()
|
||||||
|
{
|
||||||
|
IEnumerable<PocketItem> items = await client.Get(count: 5000, state: State.all);
|
||||||
|
Assert.True(items.Count() == 5000);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task IsSearchSuccessfullyOnBigList()
|
||||||
|
{
|
||||||
|
IEnumerable<PocketItem> items = await client.Get(search: "google");
|
||||||
|
|
||||||
|
Assert.True(items.Count() > 0);
|
||||||
|
Assert.True(items.First().Title.ToLower().Contains("google") || items.First().Uri.ToString().ToLower().Contains("google"));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task IsTagSearchSuccessfullyOnBigList()
|
||||||
|
{
|
||||||
|
IEnumerable<PocketItem> items = await client.SearchByTag(tags[0]);
|
||||||
|
|
||||||
|
Assert.True(items.Count() > 1);
|
||||||
|
|
||||||
|
bool found = false;
|
||||||
|
|
||||||
|
items.First().Tags.ToList().ForEach(tag =>
|
||||||
|
{
|
||||||
|
if (tag.Name.Contains(tags[0]))
|
||||||
|
{
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Assert.True(found);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task RetrieveTagsReturnsResultOnBigList()
|
||||||
|
{
|
||||||
|
List<PocketTag> items = (await client.GetTags()).ToList();
|
||||||
|
|
||||||
|
items.ForEach(tag =>
|
||||||
|
{
|
||||||
|
Assert.Contains(tag.Name, tags);
|
||||||
|
});
|
||||||
|
|
||||||
|
Assert.Equal(items.Count, tags.Length);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private async Task FillAccount(int offset, int count)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
int r2;
|
||||||
|
string[] tag;
|
||||||
|
Random rnd = new Random();
|
||||||
|
|
||||||
|
var items = urls.Skip(offset).Take(count)
|
||||||
|
.Select((value, idx) => new { Value = value, Index = idx })
|
||||||
|
.GroupBy(item => item.Index / 100, item => item.Value)
|
||||||
|
.Cast<IEnumerable<string>>();
|
||||||
|
|
||||||
|
foreach (IEnumerable<string> urlGroup in items)
|
||||||
|
{
|
||||||
|
await Task.WhenAll(urlGroup.Select(url =>
|
||||||
|
{
|
||||||
|
r = rnd.Next(tags.Length);
|
||||||
|
r2 = rnd.Next(tags.Length);
|
||||||
|
tag = new string[] { tags[r], tags[r2] };
|
||||||
|
return client.Add(new Uri("http://" + url), tag);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//[Fact]
|
||||||
|
//public async Task Fillll()
|
||||||
|
//{
|
||||||
|
// await FillAccount(11000, 89999);
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
using PocketSharp.Models;
|
|
||||||
|
|
||||||
namespace PocketSharp.Tests
|
namespace PocketSharp.Tests
|
||||||
{
|
{
|
||||||
@@ -10,7 +9,7 @@ namespace PocketSharp.Tests
|
|||||||
{
|
{
|
||||||
protected PocketClient client;
|
protected PocketClient client;
|
||||||
|
|
||||||
protected List<int> itemsToDelete = new List<int>();
|
protected List<string> itemsToDelete = new List<string>();
|
||||||
|
|
||||||
|
|
||||||
// setup
|
// setup
|
||||||
@@ -26,7 +25,7 @@ namespace PocketSharp.Tests
|
|||||||
|
|
||||||
|
|
||||||
// teardown
|
// teardown
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
itemsToDelete.ForEach(async id =>
|
itemsToDelete.ForEach(async id =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
using PocketSharp.Models;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace PocketSharp.Tests
|
||||||
|
{
|
||||||
|
public class TrendingTests : TestsBase
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public async Task AreTrendingArticlesReturned()
|
||||||
|
{
|
||||||
|
var articles = await client.GetTrendingArticles();
|
||||||
|
Assert.NotEmpty(articles);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task AreTrendingTopicsReturned()
|
||||||
|
{
|
||||||
|
var topics = await client.GetTrendingTopics();
|
||||||
|
Assert.NotEmpty(topics);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
<assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.2.15.0" newVersion="4.2.15.0" />
|
<bindingRedirect oldVersion="0.0.0.0-4.2.29.0" newVersion="4.2.29.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<packages>
|
|
||||||
<package id="Microsoft.Bcl" version="1.1.3" targetFramework="net45" />
|
|
||||||
<package id="Microsoft.Bcl.Async" version="1.0.16" targetFramework="net45" />
|
|
||||||
<package id="Microsoft.Bcl.Build" version="1.0.10" targetFramework="net45" />
|
|
||||||
<package id="Microsoft.Net.Http" version="2.2.15" targetFramework="net45" />
|
|
||||||
<package id="xunit" version="1.9.2" targetFramework="net45" />
|
|
||||||
</packages>
|
|
||||||
@@ -1,20 +1,9 @@
|
|||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 2012
|
# Visual Studio 15
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PocketSharp", "PocketSharp\PocketSharp.csproj", "{817200C3-A327-4E35-9B5F-63A51C088577}"
|
VisualStudioVersion = 15.0.27130.2027
|
||||||
EndProject
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PocketSharp.Wpf", "PocketSharp.Examples\PocketSharp.Wpf\PocketSharp.Wpf.csproj", "{775569C2-987F-4AC4-8BA5-A315A21ED1B7}"
|
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
|
||||||
{817200C3-A327-4E35-9B5F-63A51C088577} = {817200C3-A327-4E35-9B5F-63A51C088577}
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PocketSharp.Examples", "PocketSharp.Examples", "{AFD4E3F1-B23C-4924-BA5B-D917FBADB8FA}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PocketSharp.Examples", "PocketSharp.Examples", "{AFD4E3F1-B23C-4924-BA5B-D917FBADB8FA}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PocketSharp.Silverlight", "PocketSharp.Examples\PocketSharp.Silverlight\PocketSharp.Silverlight.csproj", "{656345D2-AF4C-4F88-9C9F-EBF54D7691DB}"
|
|
||||||
EndProject
|
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PocketSharp.WP8", "PocketSharp.Examples\PocketSharp.WP8\PocketSharp.WP8.csproj", "{47721A56-2128-4C5A-8B92-995FFC353304}"
|
|
||||||
EndProject
|
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PocketSharp.Tests", "PocketSharp.Tests\PocketSharp.Tests.csproj", "{CA3C491B-A8CA-426C-A0BB-E91636767467}"
|
|
||||||
EndProject
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{19DD45B5-B849-49E7-89D6-16C89B9B96C7}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{19DD45B5-B849-49E7-89D6-16C89B9B96C7}"
|
||||||
ProjectSection(SolutionItems) = preProject
|
ProjectSection(SolutionItems) = preProject
|
||||||
.nuget\NuGet.Config = .nuget\NuGet.Config
|
.nuget\NuGet.Config = .nuget\NuGet.Config
|
||||||
@@ -22,98 +11,86 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{19DD45
|
|||||||
.nuget\NuGet.targets = .nuget\NuGet.targets
|
.nuget\NuGet.targets = .nuget\NuGet.targets
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NReadability", "PortablePorts\NReadability\NReadability.csproj", "{14C3EE6A-54A4-4A37-8B56-D52A3802F1C2}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PocketSharp.UWP", "PocketSharp.Examples\PocketSharp.UWP\PocketSharp.UWP.csproj", "{5CBB92EC-C1A2-4108-9A23-3B73DD138953}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SgmlReader", "PortablePorts\SgmlReader\SgmlReader.csproj", "{9112414C-E2D1-43BA-A298-A89F77D94332}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PocketSharp", "PocketSharp\PocketSharp.csproj", "{0E22926C-7244-4A17-923C-84B46F5149C0}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PortablePorts", "PortablePorts", "{82F79DE3-76D7-4FCB-AA7E-16BA7E363E0D}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PocketSharp.Tests", "PocketSharp.Tests\PocketSharp.Tests.csproj", "{3BAA93AD-3B5C-47C4-816B-F29A1E6D1C2D}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
Debug|ARM = Debug|ARM
|
Debug|ARM = Debug|ARM
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
Debug|x86 = Debug|x86
|
Debug|x86 = Debug|x86
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
Release|ARM = Release|ARM
|
Release|ARM = Release|ARM
|
||||||
|
Release|x64 = Release|x64
|
||||||
Release|x86 = Release|x86
|
Release|x86 = Release|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{817200C3-A327-4E35-9B5F-63A51C088577}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||||
{817200C3-A327-4E35-9B5F-63A51C088577}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Debug|Any CPU.Build.0 = Debug|x86
|
||||||
{817200C3-A327-4E35-9B5F-63A51C088577}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Debug|Any CPU.Deploy.0 = Debug|x86
|
||||||
{817200C3-A327-4E35-9B5F-63A51C088577}.Debug|x86.ActiveCfg = Debug|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||||
{817200C3-A327-4E35-9B5F-63A51C088577}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Debug|ARM.Build.0 = Debug|ARM
|
||||||
{817200C3-A327-4E35-9B5F-63A51C088577}.Release|Any CPU.Build.0 = Release|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Debug|ARM.Deploy.0 = Debug|ARM
|
||||||
{817200C3-A327-4E35-9B5F-63A51C088577}.Release|ARM.ActiveCfg = Release|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{817200C3-A327-4E35-9B5F-63A51C088577}.Release|x86.ActiveCfg = Release|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Debug|x64.Build.0 = Debug|x64
|
||||||
{775569C2-987F-4AC4-8BA5-A315A21ED1B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Debug|x64.Deploy.0 = Debug|x64
|
||||||
{775569C2-987F-4AC4-8BA5-A315A21ED1B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
{775569C2-987F-4AC4-8BA5-A315A21ED1B7}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Debug|x86.Build.0 = Debug|x86
|
||||||
{775569C2-987F-4AC4-8BA5-A315A21ED1B7}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Debug|x86.Deploy.0 = Debug|x86
|
||||||
{775569C2-987F-4AC4-8BA5-A315A21ED1B7}.Debug|x86.ActiveCfg = Debug|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Release|Any CPU.ActiveCfg = Release|x86
|
||||||
{775569C2-987F-4AC4-8BA5-A315A21ED1B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Release|ARM.ActiveCfg = Release|ARM
|
||||||
{775569C2-987F-4AC4-8BA5-A315A21ED1B7}.Release|Any CPU.Build.0 = Release|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Release|ARM.Build.0 = Release|ARM
|
||||||
{775569C2-987F-4AC4-8BA5-A315A21ED1B7}.Release|ARM.ActiveCfg = Release|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Release|ARM.Deploy.0 = Release|ARM
|
||||||
{775569C2-987F-4AC4-8BA5-A315A21ED1B7}.Release|x86.ActiveCfg = Release|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Release|x64.ActiveCfg = Release|x64
|
||||||
{656345D2-AF4C-4F88-9C9F-EBF54D7691DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Release|x64.Build.0 = Release|x64
|
||||||
{656345D2-AF4C-4F88-9C9F-EBF54D7691DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Release|x64.Deploy.0 = Release|x64
|
||||||
{656345D2-AF4C-4F88-9C9F-EBF54D7691DB}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Release|x86.ActiveCfg = Release|x86
|
||||||
{656345D2-AF4C-4F88-9C9F-EBF54D7691DB}.Debug|x86.ActiveCfg = Debug|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Release|x86.Build.0 = Release|x86
|
||||||
{656345D2-AF4C-4F88-9C9F-EBF54D7691DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953}.Release|x86.Deploy.0 = Release|x86
|
||||||
{656345D2-AF4C-4F88-9C9F-EBF54D7691DB}.Release|Any CPU.Build.0 = Release|Any CPU
|
{0E22926C-7244-4A17-923C-84B46F5149C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{656345D2-AF4C-4F88-9C9F-EBF54D7691DB}.Release|ARM.ActiveCfg = Release|Any CPU
|
{0E22926C-7244-4A17-923C-84B46F5149C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{656345D2-AF4C-4F88-9C9F-EBF54D7691DB}.Release|x86.ActiveCfg = Release|Any CPU
|
{0E22926C-7244-4A17-923C-84B46F5149C0}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{0E22926C-7244-4A17-923C-84B46F5149C0}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{0E22926C-7244-4A17-923C-84B46F5149C0}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
|
{0E22926C-7244-4A17-923C-84B46F5149C0}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Debug|ARM.ActiveCfg = Debug|ARM
|
{0E22926C-7244-4A17-923C-84B46F5149C0}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Debug|ARM.Build.0 = Debug|ARM
|
{0E22926C-7244-4A17-923C-84B46F5149C0}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Debug|ARM.Deploy.0 = Debug|ARM
|
{0E22926C-7244-4A17-923C-84B46F5149C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Debug|x86.ActiveCfg = Debug|x86
|
{0E22926C-7244-4A17-923C-84B46F5149C0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Debug|x86.Build.0 = Debug|x86
|
{0E22926C-7244-4A17-923C-84B46F5149C0}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Debug|x86.Deploy.0 = Debug|x86
|
{0E22926C-7244-4A17-923C-84B46F5149C0}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{0E22926C-7244-4A17-923C-84B46F5149C0}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Release|Any CPU.Build.0 = Release|Any CPU
|
{0E22926C-7244-4A17-923C-84B46F5149C0}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Release|Any CPU.Deploy.0 = Release|Any CPU
|
{0E22926C-7244-4A17-923C-84B46F5149C0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Release|ARM.ActiveCfg = Release|ARM
|
{0E22926C-7244-4A17-923C-84B46F5149C0}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Release|ARM.Build.0 = Release|ARM
|
{3BAA93AD-3B5C-47C4-816B-F29A1E6D1C2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Release|ARM.Deploy.0 = Release|ARM
|
{3BAA93AD-3B5C-47C4-816B-F29A1E6D1C2D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Release|x86.ActiveCfg = Release|x86
|
{3BAA93AD-3B5C-47C4-816B-F29A1E6D1C2D}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Release|x86.Build.0 = Release|x86
|
{3BAA93AD-3B5C-47C4-816B-F29A1E6D1C2D}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304}.Release|x86.Deploy.0 = Release|x86
|
{3BAA93AD-3B5C-47C4-816B-F29A1E6D1C2D}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
{CA3C491B-A8CA-426C-A0BB-E91636767467}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{3BAA93AD-3B5C-47C4-816B-F29A1E6D1C2D}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
{CA3C491B-A8CA-426C-A0BB-E91636767467}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{3BAA93AD-3B5C-47C4-816B-F29A1E6D1C2D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
{CA3C491B-A8CA-426C-A0BB-E91636767467}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
{3BAA93AD-3B5C-47C4-816B-F29A1E6D1C2D}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{CA3C491B-A8CA-426C-A0BB-E91636767467}.Debug|x86.ActiveCfg = Debug|Any CPU
|
{3BAA93AD-3B5C-47C4-816B-F29A1E6D1C2D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{CA3C491B-A8CA-426C-A0BB-E91636767467}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{3BAA93AD-3B5C-47C4-816B-F29A1E6D1C2D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{CA3C491B-A8CA-426C-A0BB-E91636767467}.Release|Any CPU.Build.0 = Release|Any CPU
|
{3BAA93AD-3B5C-47C4-816B-F29A1E6D1C2D}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
{CA3C491B-A8CA-426C-A0BB-E91636767467}.Release|ARM.ActiveCfg = Release|Any CPU
|
{3BAA93AD-3B5C-47C4-816B-F29A1E6D1C2D}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
{CA3C491B-A8CA-426C-A0BB-E91636767467}.Release|x86.ActiveCfg = Release|Any CPU
|
{3BAA93AD-3B5C-47C4-816B-F29A1E6D1C2D}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
{14C3EE6A-54A4-4A37-8B56-D52A3802F1C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{3BAA93AD-3B5C-47C4-816B-F29A1E6D1C2D}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{14C3EE6A-54A4-4A37-8B56-D52A3802F1C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{3BAA93AD-3B5C-47C4-816B-F29A1E6D1C2D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{14C3EE6A-54A4-4A37-8B56-D52A3802F1C2}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
{3BAA93AD-3B5C-47C4-816B-F29A1E6D1C2D}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{14C3EE6A-54A4-4A37-8B56-D52A3802F1C2}.Debug|x86.ActiveCfg = Debug|Any CPU
|
|
||||||
{14C3EE6A-54A4-4A37-8B56-D52A3802F1C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{14C3EE6A-54A4-4A37-8B56-D52A3802F1C2}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{14C3EE6A-54A4-4A37-8B56-D52A3802F1C2}.Release|ARM.ActiveCfg = Release|Any CPU
|
|
||||||
{14C3EE6A-54A4-4A37-8B56-D52A3802F1C2}.Release|x86.ActiveCfg = Release|Any CPU
|
|
||||||
{9112414C-E2D1-43BA-A298-A89F77D94332}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{9112414C-E2D1-43BA-A298-A89F77D94332}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{9112414C-E2D1-43BA-A298-A89F77D94332}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
|
||||||
{9112414C-E2D1-43BA-A298-A89F77D94332}.Debug|x86.ActiveCfg = Debug|Any CPU
|
|
||||||
{9112414C-E2D1-43BA-A298-A89F77D94332}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{9112414C-E2D1-43BA-A298-A89F77D94332}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{9112414C-E2D1-43BA-A298-A89F77D94332}.Release|ARM.ActiveCfg = Release|Any CPU
|
|
||||||
{9112414C-E2D1-43BA-A298-A89F77D94332}.Release|x86.ActiveCfg = Release|Any CPU
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(NestedProjects) = preSolution
|
GlobalSection(NestedProjects) = preSolution
|
||||||
{775569C2-987F-4AC4-8BA5-A315A21ED1B7} = {AFD4E3F1-B23C-4924-BA5B-D917FBADB8FA}
|
{5CBB92EC-C1A2-4108-9A23-3B73DD138953} = {AFD4E3F1-B23C-4924-BA5B-D917FBADB8FA}
|
||||||
{656345D2-AF4C-4F88-9C9F-EBF54D7691DB} = {AFD4E3F1-B23C-4924-BA5B-D917FBADB8FA}
|
EndGlobalSection
|
||||||
{47721A56-2128-4C5A-8B92-995FFC353304} = {AFD4E3F1-B23C-4924-BA5B-D917FBADB8FA}
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
{9112414C-E2D1-43BA-A298-A89F77D94332} = {82F79DE3-76D7-4FCB-AA7E-16BA7E363E0D}
|
SolutionGuid = {6B433CE4-D4DE-4360-80A1-DE2DB143DF0D}
|
||||||
{14C3EE6A-54A4-4A37-8B56-D52A3802F1C2} = {82F79DE3-76D7-4FCB-AA7E-16BA7E363E0D}
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using PocketSharp.Models;
|
using PocketSharp.Models;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text.RegularExpressions;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace PocketSharp
|
namespace PocketSharp
|
||||||
@@ -14,10 +14,11 @@ namespace PocketSharp
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Retrieves the requestCode from Pocket, which is used to generate the Authentication URI to authenticate the user
|
/// Retrieves the requestCode from Pocket, which is used to generate the Authentication URI to authenticate the user
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="System.NullReferenceException">Authentication methods need a callbackUri on initialization of the PocketClient class</exception>
|
/// <exception cref="System.NullReferenceException">Authentication methods need a callbackUri on initialization of the PocketClient class</exception>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<string> GetRequestCode()
|
public async Task<string> GetRequestCode(CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
// check if request code is available
|
// check if request code is available
|
||||||
if (CallbackUri == null)
|
if (CallbackUri == null)
|
||||||
@@ -26,7 +27,7 @@ namespace PocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// do request
|
// do request
|
||||||
RequestCode response = await Request<RequestCode>("oauth/request", new Dictionary<string, string>()
|
RequestCode response = await Request<RequestCode>("oauth/request", cancellationToken, new Dictionary<string, string>()
|
||||||
{
|
{
|
||||||
{ "redirect_uri", CallbackUri }
|
{ "redirect_uri", CallbackUri }
|
||||||
}, false);
|
}, false);
|
||||||
@@ -48,45 +49,57 @@ namespace PocketSharp
|
|||||||
public Uri GenerateAuthenticationUri(string requestCode = null)
|
public Uri GenerateAuthenticationUri(string requestCode = null)
|
||||||
{
|
{
|
||||||
// check if request code is available
|
// check if request code is available
|
||||||
if(RequestCode == null && requestCode == null)
|
if (RequestCode == null && requestCode == null)
|
||||||
{
|
{
|
||||||
throw new NullReferenceException("Call GetRequestCode() first to receive a request_code");
|
throw new NullReferenceException("Call GetRequestCode() first to receive a request_code");
|
||||||
}
|
}
|
||||||
|
|
||||||
// override property with given param if available
|
// override property with given param if available
|
||||||
if(requestCode != null)
|
if (requestCode != null)
|
||||||
{
|
{
|
||||||
RequestCode = requestCode;
|
RequestCode = requestCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Uri(string.Format(authentificationUri, RequestCode, CallbackUri));
|
return new Uri(String.Format(authentificationUri, RequestCode, CallbackUri, isMobileClient ? "1" : "0", "login", useInsideWebAuthenticationBroker ? "1" : "0"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Requests the access code after authentication
|
/// Generate registration URI from requestCode
|
||||||
/// The access code has to permanently be stored within the users session, and should be passed in the constructor for all future PocketClient initializations.
|
/// Follow the steps as with GenerateAuthenticationUri, but for unregistered users
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="requestCode">The requestCode. If no requestCode is supplied, the property from the PocketClient intialization is used.</param>
|
/// <param name="requestCode">The requestCode. If no requestCode is supplied, the property from the PocketClient intialization is used.</param>
|
||||||
/// <returns>The permanent access code, which is used to authenticate the user with the application</returns>
|
/// <returns>A valid URI to redirect the user to.</returns>
|
||||||
/// <exception cref="System.NullReferenceException">Call GetRequestCode() first to receive a request_code</exception>
|
/// <exception cref="System.NullReferenceException">Call GetRequestCode() first to receive a request_code</exception>
|
||||||
/// <exception cref="PocketException"></exception>
|
public Uri GenerateRegistrationUri(string requestCode = null)
|
||||||
[Obsolete("Please use GetUser instead")]
|
|
||||||
public async Task<string> GetAccessCode(string requestCode = null)
|
|
||||||
{
|
{
|
||||||
await GetUser(requestCode);
|
// check if request code is available
|
||||||
return AccessCode;
|
if (RequestCode == null && requestCode == null)
|
||||||
|
{
|
||||||
|
throw new NullReferenceException("Call GetRequestCode() first to receive a request_code");
|
||||||
|
}
|
||||||
|
|
||||||
|
// override property with given param if available
|
||||||
|
if (requestCode != null)
|
||||||
|
{
|
||||||
|
RequestCode = requestCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Uri(String.Format(authentificationUri, RequestCode, CallbackUri, isMobileClient ? "1" : "0", "signup", useInsideWebAuthenticationBroker ? "1" : "0"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Requests the access code and username after authentication
|
/// Requests the access code and username after authentication
|
||||||
/// The access code has to permanently be stored within the users session, and should be passed in the constructor for all future PocketClient initializations.
|
/// The access code has to permanently be stored within the users session, and should be passed in the constructor for all future PocketClient initializations.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <param name="requestCode">The request code.</param>
|
/// <param name="requestCode">The request code.</param>
|
||||||
/// <returns>The authenticated user</returns>
|
/// <returns>
|
||||||
|
/// The authenticated user
|
||||||
|
/// </returns>
|
||||||
/// <exception cref="System.NullReferenceException">Call GetRequestCode() first to receive a request_code</exception>
|
/// <exception cref="System.NullReferenceException">Call GetRequestCode() first to receive a request_code</exception>
|
||||||
public async Task<PocketUser> GetUser(string requestCode = null)
|
public async Task<PocketUser> GetUser(string requestCode = null, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
// check if request code is available
|
// check if request code is available
|
||||||
if (RequestCode == null && requestCode == null)
|
if (RequestCode == null && requestCode == null)
|
||||||
@@ -101,70 +114,47 @@ namespace PocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// do request
|
// do request
|
||||||
PocketUser response = await Request<PocketUser>("oauth/authorize", new Dictionary<string, string>()
|
GetUserResponse response = await Request<GetUserResponse>("oauth/authorize", cancellationToken, new Dictionary<string, string>()
|
||||||
{
|
{
|
||||||
{"code", RequestCode}
|
{ "code", RequestCode },
|
||||||
|
{ "account", "1" }
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
// save code to client
|
string avatar = response.Account?.Profile?.Avatar_url;
|
||||||
AccessCode = response.Code;
|
|
||||||
|
|
||||||
return response;
|
PocketUser user = new PocketUser()
|
||||||
|
{
|
||||||
|
Username = response.Username,
|
||||||
|
Code = response.Access_token,
|
||||||
|
Id = response.Account?.User_id,
|
||||||
|
Email = response.Account?.Email,
|
||||||
|
FirstName = response.Account?.First_name,
|
||||||
|
LastName = response.Account?.Last_name,
|
||||||
|
Followers = response.Account?.Profile?.Follower_count ?? 0,
|
||||||
|
Follows = response.Account?.Profile?.Follow_count ?? 0,
|
||||||
|
Avatar = avatar != null ? new Uri(avatar, UriKind.Absolute) : null,
|
||||||
|
IsDefaultAvatar = avatar == null || avatar.Contains("pocket-profile-images."),
|
||||||
|
Description = response.Account?.Profile?.Description
|
||||||
|
};
|
||||||
|
|
||||||
|
// save code to client
|
||||||
|
AccessCode = user.Code;
|
||||||
|
|
||||||
|
return user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Registers a new account.
|
/// Get a new GUID from the Pocket API.
|
||||||
/// Account has to be activated via a activation email sent by Pocket.
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="username">The username.</param>
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <param name="email">The email.</param>
|
/// <returns>
|
||||||
/// <param name="password">The password.</param>
|
/// The GUID
|
||||||
/// <returns></returns>
|
/// </returns>
|
||||||
/// <exception cref="System.ArgumentNullException">All parameters are required</exception>
|
public async Task<string> GetGuid(CancellationToken cancellationToken = default(CancellationToken))
|
||||||
/// <exception cref="System.FormatException">
|
|
||||||
/// Invalid email address.
|
|
||||||
/// or
|
|
||||||
/// Invalid username. Please only use letters, numbers, and/or dashes and between 1-20 characters.
|
|
||||||
/// or
|
|
||||||
/// Invalid password.
|
|
||||||
/// </exception>
|
|
||||||
/// <exception cref="PocketException"></exception>
|
|
||||||
public async Task<bool> RegisterAccount(string username, string email, string password)
|
|
||||||
{
|
{
|
||||||
if (username == null || email == null || password == null)
|
GuidResponse response = await Request<GuidResponse>("guid", cancellationToken, requireAuth: false);
|
||||||
{
|
return response.Guid;
|
||||||
throw new ArgumentNullException("All parameters are required");
|
|
||||||
}
|
|
||||||
|
|
||||||
Match matchEmail = Regex.Match(email, @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,10}))$");
|
|
||||||
Match matchUsername = Regex.Match(username, @"^([\w\-_]{1,20})$");
|
|
||||||
|
|
||||||
if (!matchEmail.Success)
|
|
||||||
{
|
|
||||||
throw new FormatException("(1) Invalid email address.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!matchUsername.Success)
|
|
||||||
{
|
|
||||||
throw new FormatException("(2) Invalid username. Please only use letters, numbers, and/or dashes and between 1-20 characters.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (password.Length < 3)
|
|
||||||
{
|
|
||||||
throw new FormatException("(3) Invalid password.");
|
|
||||||
}
|
|
||||||
|
|
||||||
RegisterParameters parameters = new RegisterParameters()
|
|
||||||
{
|
|
||||||
Username = username,
|
|
||||||
Email = email,
|
|
||||||
Password = password
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseBase response = await Request<ResponseBase>("signup", parameters.Convert(), false);
|
|
||||||
|
|
||||||
return response.Status;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using PocketSharp.Models;
|
using PocketSharp.Models;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace PocketSharp
|
namespace PocketSharp
|
||||||
@@ -16,10 +17,25 @@ namespace PocketSharp
|
|||||||
/// <param name="tags">A comma-separated list of tags to apply to the item</param>
|
/// <param name="tags">A comma-separated list of tags to apply to the item</param>
|
||||||
/// <param name="title">This can be included for cases where an item does not have a title, which is typical for image or PDF URLs. If Pocket detects a title from the content of the page, this parameter will be ignored.</param>
|
/// <param name="title">This can be included for cases where an item does not have a title, which is typical for image or PDF URLs. If Pocket detects a title from the content of the page, this parameter will be ignored.</param>
|
||||||
/// <param name="tweetID">If you are adding Pocket support to a Twitter client, please send along a reference to the tweet status id. This allows Pocket to show the original tweet alongside the article.</param>
|
/// <param name="tweetID">If you are adding Pocket support to a Twitter client, please send along a reference to the tweet status id. This allows Pocket to show the original tweet alongside the article.</param>
|
||||||
/// <returns>A simple representation of the saved item which doesn't contain all data (is only returned by calling the Retrieve method)</returns>
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns>
|
||||||
|
/// A simple representation of the saved item which doesn't contain all data (is only returned by calling the Retrieve method)
|
||||||
|
/// </returns>
|
||||||
|
/// <exception cref="System.FormatException">(1) Uri should be absolute.</exception>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<PocketItem> Add(Uri uri, string[] tags = null, string title = null, string tweetID = null)
|
public async Task<PocketItem> Add(
|
||||||
|
Uri uri,
|
||||||
|
string[] tags = null,
|
||||||
|
string title = null,
|
||||||
|
string tweetID = null,
|
||||||
|
CancellationToken cancellationToken = default(CancellationToken)
|
||||||
|
)
|
||||||
{
|
{
|
||||||
|
if (!uri.IsAbsoluteUri)
|
||||||
|
{
|
||||||
|
throw new FormatException("(1) Uri should be absolute.");
|
||||||
|
}
|
||||||
|
|
||||||
AddParameters parameters = new AddParameters()
|
AddParameters parameters = new AddParameters()
|
||||||
{
|
{
|
||||||
Uri = uri,
|
Uri = uri,
|
||||||
@@ -28,7 +44,7 @@ namespace PocketSharp
|
|||||||
TweetID = tweetID
|
TweetID = tweetID
|
||||||
};
|
};
|
||||||
|
|
||||||
Add response = await Request<Add>("add", parameters.Convert());
|
Add response = await Request<Add>("add", cancellationToken, parameters.Convert());
|
||||||
|
|
||||||
return response.Item;
|
return response.Item;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,101 @@
|
|||||||
|
//using HtmlAgilityPack;
|
||||||
|
//using PocketSharp.Models;
|
||||||
|
//using System;
|
||||||
|
//using System.Collections.Generic;
|
||||||
|
//using System.Linq;
|
||||||
|
//using System.Threading;
|
||||||
|
//using System.Threading.Tasks;
|
||||||
|
//using System.Web;
|
||||||
|
|
||||||
|
//namespace PocketSharp
|
||||||
|
//{
|
||||||
|
// /// <summary>
|
||||||
|
// /// PocketClient
|
||||||
|
// /// </summary>
|
||||||
|
// public partial class PocketClient
|
||||||
|
// {
|
||||||
|
// /// <summary>
|
||||||
|
// /// Term to use for trending articles in the Explore() method
|
||||||
|
// /// </summary>
|
||||||
|
// const string EXPLORE_TRENDING = "trending";
|
||||||
|
|
||||||
|
// /// <summary>
|
||||||
|
// /// Term to use for must-read articles in the Explore() method
|
||||||
|
// /// </summary>
|
||||||
|
// const string EXPLORE_MUST_READS = "must-reads";
|
||||||
|
|
||||||
|
|
||||||
|
// /// <summary>
|
||||||
|
// /// Explore Pocket and find interesting articles by a certain topic
|
||||||
|
// /// </summary>
|
||||||
|
// /// <param name="topic">Term or topic to get articles for</param>
|
||||||
|
// /// <param name="cancellationToken"></param>
|
||||||
|
// /// <returns></returns>
|
||||||
|
// async Task<IEnumerable<PocketExploreItem>> Explore(string topic, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
// {
|
||||||
|
// List<PocketExploreItem> items = new List<PocketExploreItem>();
|
||||||
|
// string html = await RequestAsString("https://getpocket.com/explore/" + HttpUtility.UrlEncode(topic), cancellationToken);
|
||||||
|
|
||||||
|
// var document = new HtmlDocument();
|
||||||
|
// document.LoadHtml(html);
|
||||||
|
|
||||||
|
// IEnumerable<HtmlNode> nodes = document.DocumentNode.SelectNodesByClass("media_item");
|
||||||
|
|
||||||
|
// if (nodes == null || !nodes.Any())
|
||||||
|
// {
|
||||||
|
// return items;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// for (int i = 0; i < nodes.Count(); i++)
|
||||||
|
// {
|
||||||
|
// HtmlNode node = nodes.ElementAt(i);
|
||||||
|
// PocketExploreItem item = new PocketExploreItem();
|
||||||
|
// item.ID = node.Id;
|
||||||
|
|
||||||
|
// HtmlNode title = node.SelectNodeByClass("title")?.FirstChild;
|
||||||
|
|
||||||
|
// if (title == null)
|
||||||
|
// {
|
||||||
|
// continue;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // get uri
|
||||||
|
// string uri = title.GetAttributeValue("data-saveurl", null);
|
||||||
|
// item.Uri = new Uri(uri);
|
||||||
|
|
||||||
|
// // get image
|
||||||
|
// string imageUri = node.SelectNodeByClass("item_image")?.GetAttributeValue("data-thumburl", null);
|
||||||
|
// if (!String.IsNullOrEmpty(imageUri))
|
||||||
|
// {
|
||||||
|
// PocketImage image = new PocketImage();
|
||||||
|
// image.Uri = new Uri(imageUri);
|
||||||
|
// image.ID = "0";
|
||||||
|
// image.ItemID = item.ID;
|
||||||
|
// item.Images = new List<PocketImage>() { image };
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // get basic infos
|
||||||
|
// item.Title = title.InnerText;
|
||||||
|
// item.Excerpt = node.SelectNodeByClass("excerpt")?.InnerText;
|
||||||
|
// item.IsTrending = node.SelectNodeByClass("flag-trending") != null;
|
||||||
|
|
||||||
|
// // save count
|
||||||
|
// string saveCountStr = node.SelectNodeByClass("save_count")?.InnerText?.Split(' ')?.FirstOrDefault();
|
||||||
|
// int saveCount = 0;
|
||||||
|
// Int32.TryParse(saveCountStr, out saveCount);
|
||||||
|
// item.SaveCount = saveCount;
|
||||||
|
|
||||||
|
// // add published date
|
||||||
|
// DateTime publishedDate = DateTime.Now;
|
||||||
|
// if (DateTime.TryParse(node.SelectNodeByClass("read_time")?.InnerText, out publishedDate))
|
||||||
|
// {
|
||||||
|
// item.PublishedTime = publishedDate;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// items.Add(item);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// return items;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
using PocketSharp.Models;
|
using PocketSharp.Models;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace PocketSharp
|
namespace PocketSharp
|
||||||
{
|
{
|
||||||
@@ -11,23 +12,24 @@ namespace PocketSharp
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class PocketClient
|
public partial class PocketClient
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Retrieves items from pocket
|
/// Retrieves items from pocket
|
||||||
/// with the given filters
|
/// with the given filters
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="state">The state.</param>
|
/// <param name="state">The state.</param>
|
||||||
/// <param name="favorite">The favorite.</param>
|
/// <param name="favorite">The favorite.</param>
|
||||||
/// <param name="tag">The tag.</param>
|
/// <param name="tag">The tag.</param>
|
||||||
/// <param name="contentType">Type of the content.</param>
|
/// <param name="contentType">Type of the content.</param>
|
||||||
/// <param name="sort">The sort.</param>
|
/// <param name="sort">The sort.</param>
|
||||||
/// <param name="search">The search.</param>
|
/// <param name="search">The search.</param>
|
||||||
/// <param name="domain">The domain.</param>
|
/// <param name="domain">The domain.</param>
|
||||||
/// <param name="since">The since.</param>
|
/// <param name="since">The since.</param>
|
||||||
/// <param name="count">The count.</param>
|
/// <param name="count">The count.</param>
|
||||||
/// <param name="offset">The offset.</param>
|
/// <param name="offset">The offset.</param>
|
||||||
/// <returns></returns>
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <returns></returns>
|
||||||
public async Task<List<PocketItem>> Get(
|
/// <exception cref="PocketException"></exception>
|
||||||
|
public async Task<IEnumerable<PocketItem>> Get(
|
||||||
State? state = null,
|
State? state = null,
|
||||||
bool? favorite = null,
|
bool? favorite = null,
|
||||||
string tag = null,
|
string tag = null,
|
||||||
@@ -37,7 +39,8 @@ namespace PocketSharp
|
|||||||
string domain = null,
|
string domain = null,
|
||||||
DateTime? since = null,
|
DateTime? since = null,
|
||||||
int? count = null,
|
int? count = null,
|
||||||
int? offset = null
|
int? offset = null,
|
||||||
|
CancellationToken cancellationToken = default(CancellationToken)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
RetrieveParameters parameters = new RetrieveParameters()
|
RetrieveParameters parameters = new RetrieveParameters()
|
||||||
@@ -50,14 +53,13 @@ namespace PocketSharp
|
|||||||
DetailType = DetailType.complete,
|
DetailType = DetailType.complete,
|
||||||
Search = search,
|
Search = search,
|
||||||
Domain = domain,
|
Domain = domain,
|
||||||
Since = since,
|
Since = since.HasValue ? ((DateTime)since).ToUniversalTime() : since,
|
||||||
Count = count,
|
Count = count,
|
||||||
Offset = offset
|
Offset = offset,
|
||||||
|
Version = 2
|
||||||
};
|
};
|
||||||
|
|
||||||
Retrieve response = await Request<Retrieve>("get", parameters.Convert());
|
return (await Request<Retrieve>("get", cancellationToken, parameters.Convert())).Items ?? new List<PocketItem>();
|
||||||
|
|
||||||
return response.Items;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -66,15 +68,15 @@ namespace PocketSharp
|
|||||||
/// Note: The Pocket API contains no method, which allows to retrieve a single item, so all items are retrieved and filtered locally by the ID.
|
/// Note: The Pocket API contains no method, which allows to retrieve a single item, so all items are retrieved and filtered locally by the ID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="itemID">The item ID.</param>
|
/// <param name="itemID">The item ID.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<PocketItem> Get(int itemID)
|
public async Task<PocketItem> Get(string itemID, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
List<PocketItem> items = await Get(
|
return (await Get(
|
||||||
state: State.all
|
cancellationToken: cancellationToken,
|
||||||
);
|
state: State.all
|
||||||
|
)).SingleOrDefault<PocketItem>(item => item.ID == itemID);
|
||||||
return items.SingleOrDefault<PocketItem>(item => item.ID == itemID);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -82,13 +84,14 @@ namespace PocketSharp
|
|||||||
/// Retrieves all items by a given filter
|
/// Retrieves all items by a given filter
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="filter">The filter.</param>
|
/// <param name="filter">The filter.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<List<PocketItem>> Get(RetrieveFilter filter)
|
public async Task<IEnumerable<PocketItem>> Get(RetrieveFilter filter, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
RetrieveParameters parameters = new RetrieveParameters();
|
RetrieveParameters parameters = new RetrieveParameters();
|
||||||
|
|
||||||
switch(filter)
|
switch (filter)
|
||||||
{
|
{
|
||||||
case RetrieveFilter.Article:
|
case RetrieveFilter.Article:
|
||||||
parameters.ContentType = ContentType.article;
|
parameters.ContentType = ContentType.article;
|
||||||
@@ -115,9 +118,19 @@ namespace PocketSharp
|
|||||||
|
|
||||||
parameters.DetailType = DetailType.complete;
|
parameters.DetailType = DetailType.complete;
|
||||||
|
|
||||||
Retrieve response = await Request<Retrieve>("get", parameters.Convert());
|
return (await Request<Retrieve>("get", cancellationToken, parameters.Convert())).Items;
|
||||||
|
}
|
||||||
|
|
||||||
return response.Items;
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts a raw JSON response to a PocketItem list
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="itemsJSON">The raw JSON response.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
public IEnumerable<PocketItem> ConvertJsonToList(string itemsJSON)
|
||||||
|
{
|
||||||
|
return DeserializeJson<Retrieve>(itemsJSON).Items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -125,19 +138,22 @@ namespace PocketSharp
|
|||||||
/// Retrieves all available tags.
|
/// Retrieves all available tags.
|
||||||
/// Note: The Pocket API contains no method, which allows to retrieve all tags, so all items are retrieved and the associated tags extracted.
|
/// Note: The Pocket API contains no method, which allows to retrieve all tags, so all items are retrieved and the associated tags extracted.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<List<PocketTag>> GetTags()
|
public async Task<IEnumerable<PocketTag>> GetTags(CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
List<PocketItem> items = await Get(
|
IEnumerable<PocketItem> items = await Get(
|
||||||
|
cancellationToken: cancellationToken,
|
||||||
state: State.all
|
state: State.all
|
||||||
);
|
);
|
||||||
|
|
||||||
return items.Where(item => item.Tags != null)
|
return items
|
||||||
.SelectMany(item => item.Tags)
|
.Where(item => item.Tags != null)
|
||||||
.GroupBy(item => item.Name)
|
.SelectMany(item => item.Tags)
|
||||||
.Select(item => item.First())
|
.GroupBy(item => item.Name)
|
||||||
.ToList<PocketTag>();
|
.Select(item => item.First())
|
||||||
|
.ToList<PocketTag>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -145,11 +161,16 @@ namespace PocketSharp
|
|||||||
/// Retrieves items by tag
|
/// Retrieves items by tag
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="tag">The tag.</param>
|
/// <param name="tag">The tag.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<List<PocketItem>> SearchByTag(string tag)
|
public async Task<IEnumerable<PocketItem>> SearchByTag(string tag, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await Get(tag: tag);
|
return await Get(
|
||||||
|
state: State.all,
|
||||||
|
cancellationToken: cancellationToken,
|
||||||
|
tag: tag
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -157,36 +178,75 @@ namespace PocketSharp
|
|||||||
/// Retrieves items which match the specified search string in title and URI
|
/// Retrieves items which match the specified search string in title and URI
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="searchString">The search string.</param>
|
/// <param name="searchString">The search string.</param>
|
||||||
|
/// <param name="tag">Filter by tag.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="System.ArgumentOutOfRangeException">Search string length has to be a minimum of 2 chars</exception>
|
/// <exception cref="System.ArgumentOutOfRangeException">Search string length has to be a minimum of 2 chars</exception>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<List<PocketItem>> Search(string searchString, bool searchInUri = true)
|
public async Task<IEnumerable<PocketItem>> Search(string searchString, string tag = null, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
List<PocketItem> items = await Get(RetrieveFilter.All);
|
if (String.IsNullOrEmpty(searchString) || searchString.Length < 2)
|
||||||
|
|
||||||
return Search(items, searchString);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Finds the specified search string in title and URI for an available list of items
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="availableItems">The available items.</param>
|
|
||||||
/// <param name="searchString">The search string.</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
/// <exception cref="System.ArgumentOutOfRangeException">Search string length has to be a minimum of 2 chars</exception>
|
|
||||||
/// <exception cref="PocketException"></exception>
|
|
||||||
public List<PocketItem> Search(List<PocketItem> availableItems, string searchString)
|
|
||||||
{
|
|
||||||
if (searchString.Length < 2)
|
|
||||||
{
|
{
|
||||||
throw new ArgumentOutOfRangeException("Search string length has to be a minimum of 2 chars");
|
throw new ArgumentOutOfRangeException("Search string length has to be a minimum of 2 chars");
|
||||||
}
|
}
|
||||||
|
|
||||||
return availableItems.Where(item => (
|
return await Get(
|
||||||
(!String.IsNullOrEmpty(item.FullTitle) && item.FullTitle.ToLower().Contains(searchString))
|
state: State.all,
|
||||||
|| item.Uri.ToString().ToLower().Contains(searchString)
|
search: searchString,
|
||||||
)).ToList();
|
tag: tag,
|
||||||
|
cancellationToken: cancellationToken
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieves the article content from an URI
|
||||||
|
/// WARNING:
|
||||||
|
/// You have to pass the parseUri in the PocketClient ctor for this method to work.
|
||||||
|
/// This is a private API and can only be used by authenticated users.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="uri">The article URI.</param>
|
||||||
|
/// <param name="includeImages">Include images into content or use placeholder.</param>
|
||||||
|
/// <param name="includeVideos">Include videos into content or use placeholder.</param>
|
||||||
|
/// <param name="forceRefresh">Force refresh of the content (don't use cache).</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
public async Task<PocketArticle> GetArticle(Uri uri, bool includeImages = true, bool includeVideos = true, bool forceRefresh = false, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
{
|
||||||
|
Dictionary<string, string> parameters = new Dictionary<string, string>()
|
||||||
|
{
|
||||||
|
{ "url", uri.OriginalString },
|
||||||
|
{ "images", includeImages ? "1" : "0" },
|
||||||
|
{ "videos", includeVideos ? "1" : "0" },
|
||||||
|
{ "refresh", forceRefresh ? "1" : "0" },
|
||||||
|
{ "output", "json" }
|
||||||
|
};
|
||||||
|
|
||||||
|
return await Request<PocketArticle>("", cancellationToken, parameters, false, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get article suggestions for an existing Pocket item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="itemId">Get suggestions based on this item.</param>
|
||||||
|
/// <param name="count">Requested item count.</param>
|
||||||
|
/// <param name="languageCode">Two-letter language code for language-specific results.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
public async Task<IEnumerable<PocketItem>> GetSuggestions(string itemId, int count = 3, string languageCode = "en", CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
{
|
||||||
|
Dictionary<string, string> parameters = new Dictionary<string, string>()
|
||||||
|
{
|
||||||
|
{ "resolved_id", itemId },
|
||||||
|
{ "version", "1" },
|
||||||
|
{ "locale_lang", languageCode },
|
||||||
|
{ "count", count.ToString() }
|
||||||
|
};
|
||||||
|
|
||||||
|
return (await Request<Retrieve>("getSuggestedItems", cancellationToken, parameters)).Items ?? new List<PocketItem>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
using PocketSharp.Models;
|
using PocketSharp.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace PocketSharp
|
namespace PocketSharp
|
||||||
@@ -8,15 +11,44 @@ namespace PocketSharp
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class PocketClient
|
public partial class PocketClient
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Sends multiple actions in one request.
|
||||||
|
/// See: http://getpocket.com/developer/docs/v3/modify
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="actions">The actions.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
public async Task<bool> SendActions(IEnumerable<PocketAction> actions, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
{
|
||||||
|
return await Send(actions, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sends an action.
|
||||||
|
/// See: http://getpocket.com/developer/docs/v3/modify
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="action">The action.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
public async Task<bool> SendAction(PocketAction action, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
{
|
||||||
|
return await Send(new List<PocketAction>() { action }, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Archives the specified item.
|
/// Archives the specified item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="itemID">The item ID.</param>
|
/// <param name="itemID">The item ID.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> Archive(int itemID)
|
public async Task<bool> Archive(string itemID, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await SendDefault(itemID, "archive");
|
return await SendDefault(cancellationToken, itemID, "archive");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -24,11 +56,12 @@ namespace PocketSharp
|
|||||||
/// Archives the specified item.
|
/// Archives the specified item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item">The item.</param>
|
/// <param name="item">The item.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> Archive(PocketItem item)
|
public async Task<bool> Archive(PocketItem item, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await Archive(item.ID);
|
return await Archive(item.ID, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -36,11 +69,12 @@ namespace PocketSharp
|
|||||||
/// Un-archives the specified item (alias for Readd).
|
/// Un-archives the specified item (alias for Readd).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="itemID">The item ID.</param>
|
/// <param name="itemID">The item ID.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> Unarchive(int itemID)
|
public async Task<bool> Unarchive(string itemID, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await SendDefault(itemID, "readd");
|
return await SendDefault(cancellationToken, itemID, "readd");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -48,11 +82,12 @@ namespace PocketSharp
|
|||||||
/// Unarchives the specified item.
|
/// Unarchives the specified item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item">The item.</param>
|
/// <param name="item">The item.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> Unarchive(PocketItem item)
|
public async Task<bool> Unarchive(PocketItem item, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await Unarchive(item.ID);
|
return await Unarchive(item.ID, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -60,11 +95,12 @@ namespace PocketSharp
|
|||||||
/// Favorites the specified item.
|
/// Favorites the specified item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="itemID">The item ID.</param>
|
/// <param name="itemID">The item ID.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> Favorite(int itemID)
|
public async Task<bool> Favorite(string itemID, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await SendDefault(itemID, "favorite");
|
return await SendDefault(cancellationToken, itemID, "favorite");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -72,11 +108,12 @@ namespace PocketSharp
|
|||||||
/// Favorites the specified item.
|
/// Favorites the specified item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item">The item.</param>
|
/// <param name="item">The item.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> Favorite(PocketItem item)
|
public async Task<bool> Favorite(PocketItem item, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await Favorite(item.ID);
|
return await Favorite(item.ID, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -84,11 +121,12 @@ namespace PocketSharp
|
|||||||
/// Un-favorites the specified item.
|
/// Un-favorites the specified item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="itemID">The item ID.</param>
|
/// <param name="itemID">The item ID.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> Unfavorite(int itemID)
|
public async Task<bool> Unfavorite(string itemID, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await SendDefault(itemID, "unfavorite");
|
return await SendDefault(cancellationToken, itemID, "unfavorite");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -96,50 +134,54 @@ namespace PocketSharp
|
|||||||
/// Un-favorites the specified item.
|
/// Un-favorites the specified item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item">The item.</param>
|
/// <param name="item">The item.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> Unfavorite(PocketItem item)
|
public async Task<bool> Unfavorite(PocketItem item, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await Unfavorite(item.ID);
|
return await Unfavorite(item.ID, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Deletes the specified item.
|
/// Deletes the specified item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <param name="itemID">The item ID.</param>
|
/// <param name="itemID">The item ID.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> Delete(int itemID)
|
public async Task<bool> Delete(string itemID, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await SendDefault(itemID, "delete");
|
return await SendDefault(cancellationToken, itemID, "delete");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Deletes the specified item.
|
/// Deletes the specified item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <param name="item">The item.</param>
|
/// <param name="item">The item.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<bool> Delete(PocketItem item)
|
public async Task<bool> Delete(PocketItem item, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await Delete(item.ID);
|
return await Delete(item.ID, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Puts an action
|
/// Puts an action
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <param name="itemID">The item ID.</param>
|
/// <param name="itemID">The item ID.</param>
|
||||||
/// <param name="action">The action.</param>
|
/// <param name="action">The action.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
protected async Task<bool> SendDefault(int itemID, string action)
|
protected async Task<bool> SendDefault(CancellationToken cancellationToken, string itemID, string action)
|
||||||
{
|
{
|
||||||
return await Send(new ActionParameter()
|
return await Send(new PocketAction()
|
||||||
{
|
{
|
||||||
Action = action,
|
Action = action,
|
||||||
ID = itemID
|
ID = itemID
|
||||||
});
|
}, cancellationToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using PocketSharp.Models;
|
using PocketSharp.Models;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace PocketSharp
|
namespace PocketSharp
|
||||||
@@ -13,11 +14,12 @@ namespace PocketSharp
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="itemID">The item ID.</param>
|
/// <param name="itemID">The item ID.</param>
|
||||||
/// <param name="tags">The tags.</param>
|
/// <param name="tags">The tags.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> AddTags(int itemID, string[] tags)
|
public async Task<bool> AddTags(string itemID, string[] tags, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await SendTags(itemID, "tags_add", tags);
|
return await SendTags(cancellationToken, itemID, "tags_add", tags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -26,11 +28,12 @@ namespace PocketSharp
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item">The item.</param>
|
/// <param name="item">The item.</param>
|
||||||
/// <param name="tags">The tags.</param>
|
/// <param name="tags">The tags.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> AddTags(PocketItem item, string[] tags)
|
public async Task<bool> AddTags(PocketItem item, string[] tags, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await AddTags(item.ID, tags);
|
return await AddTags(item.ID, tags, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -39,11 +42,12 @@ namespace PocketSharp
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="itemID">The item ID.</param>
|
/// <param name="itemID">The item ID.</param>
|
||||||
/// <param name="tags">The tags.</param>
|
/// <param name="tags">The tags.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> RemoveTags(int itemID, string[] tags)
|
public async Task<bool> RemoveTags(string itemID, string[] tags, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await SendTags(itemID, "tags_remove", tags);
|
return await SendTags(cancellationToken, itemID, "tags_remove", tags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -52,11 +56,12 @@ namespace PocketSharp
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item">The item.</param>
|
/// <param name="item">The item.</param>
|
||||||
/// <param name="tags">The tag.</param>
|
/// <param name="tags">The tag.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> RemoveTags(PocketItem item, string[] tags)
|
public async Task<bool> RemoveTags(PocketItem item, string[] tags, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await RemoveTags(item.ID, tags);
|
return await RemoveTags(item.ID, tags, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -64,12 +69,13 @@ namespace PocketSharp
|
|||||||
/// Removes a tag from an item.
|
/// Removes a tag from an item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="itemID">The item ID.</param>
|
/// <param name="itemID">The item ID.</param>
|
||||||
/// <param name="tags">The tag.</param>
|
/// <param name="tag">The tag.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> RemoveTag(int itemID, string tag)
|
public async Task<bool> RemoveTag(string itemID, string tag, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await SendTags(itemID, "tags_remove", new string[] { tag });
|
return await SendTags(cancellationToken, itemID, "tags_remove", new string[] { tag });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -77,12 +83,13 @@ namespace PocketSharp
|
|||||||
/// Removes a tag from an item.
|
/// Removes a tag from an item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item">The item.</param>
|
/// <param name="item">The item.</param>
|
||||||
/// <param name="tags">The tags.</param>
|
/// <param name="tag">The tag.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> RemoveTag(PocketItem item, string tag)
|
public async Task<bool> RemoveTag(PocketItem item, string tag, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await RemoveTag(item.ID, tag);
|
return await RemoveTag(item.ID, tag, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -90,11 +97,12 @@ namespace PocketSharp
|
|||||||
/// Clears all tags from an item.
|
/// Clears all tags from an item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="itemID">The item ID.</param>
|
/// <param name="itemID">The item ID.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> RemoveTags(int itemID)
|
public async Task<bool> RemoveTags(string itemID, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await SendDefault(itemID, "tags_clear");
|
return await SendDefault(cancellationToken, itemID, "tags_clear");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -102,11 +110,29 @@ namespace PocketSharp
|
|||||||
/// Clears all tags from an item.
|
/// Clears all tags from an item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item">The item.</param>
|
/// <param name="item">The item.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> RemoveTags(PocketItem item)
|
public async Task<bool> RemoveTags(PocketItem item, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await RemoveTags(item.ID);
|
return await RemoveTags(item.ID, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes a tag. This will remove it from all affected items too.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tag">The tag.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
public async Task<bool> DeleteTag(string tag, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
{
|
||||||
|
return await Send(new PocketAction()
|
||||||
|
{
|
||||||
|
Action = "tag_delete",
|
||||||
|
Tag = tag
|
||||||
|
}, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -115,11 +141,12 @@ namespace PocketSharp
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="itemID">The item ID.</param>
|
/// <param name="itemID">The item ID.</param>
|
||||||
/// <param name="tags">The tags.</param>
|
/// <param name="tags">The tags.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> ReplaceTags(int itemID, string[] tags)
|
public async Task<bool> ReplaceTags(string itemID, string[] tags, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await SendTags(itemID, "tags_replace", tags);
|
return await SendTags(cancellationToken, itemID, "tags_replace", tags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -128,63 +155,50 @@ namespace PocketSharp
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item">The item.</param>
|
/// <param name="item">The item.</param>
|
||||||
/// <param name="tags">The tags.</param>
|
/// <param name="tags">The tags.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> ReplaceTags(PocketItem item, string[] tags)
|
public async Task<bool> ReplaceTags(PocketItem item, string[] tags, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await ReplaceTags(item.ID, tags);
|
return await ReplaceTags(item.ID, tags, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Renames a tag in an item.
|
/// Renames a tag. This affects all items with this tag.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="itemID">The item ID.</param>
|
|
||||||
/// <param name="oldTag">The old tag.</param>
|
/// <param name="oldTag">The old tag.</param>
|
||||||
/// <param name="newTag">The new tag name.</param>
|
/// <param name="newTag">The new tag name.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<bool> RenameTag(int itemID, string oldTag, string newTag)
|
public async Task<bool> RenameTag(string oldTag, string newTag, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await Send(new ActionParameter()
|
return await Send(new PocketAction()
|
||||||
{
|
{
|
||||||
Action = "tag_rename",
|
Action = "tag_rename",
|
||||||
ID = itemID,
|
|
||||||
OldTag = oldTag,
|
OldTag = oldTag,
|
||||||
NewTag = newTag
|
NewTag = newTag
|
||||||
});
|
}, cancellationToken);
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Renames a tag in an item.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="item">The item.</param>
|
|
||||||
/// <param name="oldTag">The old tag.</param>
|
|
||||||
/// <param name="newTag">The new tag name.</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
/// <exception cref="PocketException"></exception>
|
|
||||||
public async Task<bool> RenameTag(PocketItem item, string oldTag, string newTag)
|
|
||||||
{
|
|
||||||
return await RenameTag(item.ID, oldTag, newTag);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Puts the send action for tags.
|
/// Puts the send action for tags.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <param name="itemID">The item ID.</param>
|
/// <param name="itemID">The item ID.</param>
|
||||||
/// <param name="action">The action.</param>
|
/// <param name="action">The action.</param>
|
||||||
/// <param name="tags">The tags.</param>
|
/// <param name="tags">The tags.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
protected async Task<bool> SendTags(int itemID, string action, string[] tags)
|
protected async Task<bool> SendTags(CancellationToken cancellationToken, string itemID, string action, string[] tags)
|
||||||
{
|
{
|
||||||
return await Send(new ActionParameter()
|
return await Send(new PocketAction()
|
||||||
{
|
{
|
||||||
Action = action,
|
Action = action,
|
||||||
ID = itemID,
|
ID = itemID,
|
||||||
Tags = tags
|
Tags = tags
|
||||||
});
|
}, cancellationToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using PocketSharp.Models;
|
using PocketSharp.Models;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace PocketSharp
|
namespace PocketSharp
|
||||||
@@ -12,23 +13,12 @@ namespace PocketSharp
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Statistics from the user account.
|
/// Statistics from the user account.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<PocketStatistics> GetUserStatistics()
|
public async Task<PocketStatistics> GetUserStatistics(CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
return await Request<PocketStatistics>("stats");
|
return await Request<PocketStatistics>("stats", cancellationToken);
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Statistics from the user account.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
/// <exception cref="PocketException"></exception>
|
|
||||||
[Obsolete("Please use GetUserStatistics instead")]
|
|
||||||
public async Task<PocketStatistics> Statistics()
|
|
||||||
{
|
|
||||||
return await GetUserStatistics();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -37,16 +27,20 @@ namespace PocketSharp
|
|||||||
/// If a request was made before, the data is returned synchronously from the cache.
|
/// If a request was made before, the data is returned synchronously from the cache.
|
||||||
/// Note: This method only works for authenticated users with a given AccessCode.
|
/// Note: This method only works for authenticated users with a given AccessCode.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="PocketException"></exception>
|
/// <exception cref="PocketException"></exception>
|
||||||
public async Task<PocketLimits> GetUsageLimits()
|
public async Task<PocketLimits> GetUsageLimits(CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
string rateLimitForConsumerKey = TryGetHeaderValue(lastHeaders, "X-Limit-Key-Limit");
|
string rateLimitForConsumerKey = TryGetHeaderValue(lastHeaders, "X-Limit-Key-Limit");
|
||||||
|
|
||||||
if (rateLimitForConsumerKey == null)
|
if (rateLimitForConsumerKey == null)
|
||||||
{
|
{
|
||||||
// this is the fastest way to do a non-failing request to receive the correct headers
|
// this is the fastest way to do a non-failing request to receive the correct headers
|
||||||
await Get(count: 1);
|
await Get(
|
||||||
|
cancellationToken: cancellationToken,
|
||||||
|
count: 1
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new PocketLimits()
|
return new PocketLimits()
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
using PocketSharp.Models;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace PocketSharp
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// PocketClient
|
||||||
|
/// </summary>
|
||||||
|
public partial class PocketClient
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Get trending articles on Pocket.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="count">Article count.</param>
|
||||||
|
/// <param name="languageCode">Two-letter language code for language-specific results.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
public async Task<IEnumerable<PocketItem>> GetTrendingArticles(int count = 20, string languageCode = "en", CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
{
|
||||||
|
return (await Request<Retrieve>("getGlobalRecs", cancellationToken, new Dictionary<string, string>()
|
||||||
|
{
|
||||||
|
{ "locale_lang", languageCode },
|
||||||
|
{ "count", count.ToString() },
|
||||||
|
{ "version", "2" }
|
||||||
|
}, false)).Items ?? new List<PocketItem>();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get trending topics on Pocket.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="languageCode">Two-letter language code for language-specific results.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
public async Task<IEnumerable<PocketTopic>> GetTrendingTopics(string languageCode = "en", CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
{
|
||||||
|
return (await Request<TopicsResponse>("getTrendingTopics", cancellationToken, new Dictionary<string, string>()
|
||||||
|
{
|
||||||
|
{ "locale_lang", languageCode },
|
||||||
|
{ "version", "2" }
|
||||||
|
}, false)).Items ?? new List<PocketTopic>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,89 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<Choose>
|
|
||||||
<When Condition="$(NCrunchOriginalSolutionDir) != '' And $(NCrunchOriginalSolutionDir) != '*Undefined*'">
|
|
||||||
<PropertyGroup>
|
|
||||||
<FodySolutionDir>$(NCrunchOriginalSolutionDir)</FodySolutionDir>
|
|
||||||
</PropertyGroup>
|
|
||||||
</When>
|
|
||||||
<When Condition="$(SolutionDir) != '' And $(SolutionDir) != '*Undefined*'">
|
|
||||||
<PropertyGroup>
|
|
||||||
<FodySolutionDir>$(SolutionDir)</FodySolutionDir>
|
|
||||||
</PropertyGroup>
|
|
||||||
</When>
|
|
||||||
<When Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">
|
|
||||||
<PropertyGroup>
|
|
||||||
<FodySolutionDir>$(MSBuildProjectDirectory)\..\</FodySolutionDir>
|
|
||||||
</PropertyGroup>
|
|
||||||
</When>
|
|
||||||
</Choose>
|
|
||||||
<Choose>
|
|
||||||
<When Condition="$(KeyOriginatorFile) != '' And $(KeyOriginatorFile) != '*Undefined*'">
|
|
||||||
<PropertyGroup>
|
|
||||||
<FodyKeyFilePath>$(KeyOriginatorFile)</FodyKeyFilePath>
|
|
||||||
</PropertyGroup>
|
|
||||||
</When>
|
|
||||||
<When Condition="$(AssemblyOriginatorKeyFile) != '' And $(AssemblyOriginatorKeyFile) != '*Undefined*'">
|
|
||||||
<PropertyGroup>
|
|
||||||
<FodyKeyFilePath>$(AssemblyOriginatorKeyFile)</FodyKeyFilePath>
|
|
||||||
</PropertyGroup>
|
|
||||||
</When>
|
|
||||||
<Otherwise >
|
|
||||||
<PropertyGroup>
|
|
||||||
<FodyKeyFilePath></FodyKeyFilePath>
|
|
||||||
</PropertyGroup>
|
|
||||||
</Otherwise>
|
|
||||||
</Choose>
|
|
||||||
<PropertyGroup>
|
|
||||||
<IntermediateDir>$(ProjectDir)$(IntermediateOutputPath)</IntermediateDir>
|
|
||||||
<FodyMessageImportance Condition="$(FodyMessageImportance) == '' Or $(FodyMessageImportance) == '*Undefined*'">Low</FodyMessageImportance>
|
|
||||||
<FodySignAssembly Condition="$(FodySignAssembly) == '' Or $(FodySignAssembly) == '*Undefined*'">$(SignAssembly)</FodySignAssembly>
|
|
||||||
<FodyPath Condition="$(FodyPath) == '' Or $(FodyPath) == '*Undefined*'">$(MSBuildThisFileDirectory)</FodyPath>
|
|
||||||
</PropertyGroup>
|
|
||||||
<UsingTask
|
|
||||||
TaskName="Fody.WeavingTask"
|
|
||||||
AssemblyFile="$(FodyPath)\Fody.dll" />
|
|
||||||
<Target
|
|
||||||
AfterTargets="AfterCompile"
|
|
||||||
Name="WinFodyTarget"
|
|
||||||
Condition=" '$(OS)' == 'Windows_NT'">
|
|
||||||
|
|
||||||
<Fody.WeavingTask
|
|
||||||
AssemblyPath="@(IntermediateAssembly)"
|
|
||||||
IntermediateDir="$(IntermediateDir)"
|
|
||||||
KeyFilePath="$(FodyKeyFilePath)"
|
|
||||||
MessageImportance="$(FodyMessageImportance)"
|
|
||||||
ProjectDirectory="$(ProjectDir)"
|
|
||||||
SolutionDir="$(FodySolutionDir)"
|
|
||||||
References="@(ReferencePath)"
|
|
||||||
SignAssembly="$(FodySignAssembly)"
|
|
||||||
ReferenceCopyLocalPaths="@(ReferenceCopyLocalPaths)"
|
|
||||||
DefineConstants="$(DefineConstants)"
|
|
||||||
/>
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target
|
|
||||||
AfterTargets="AfterBuild"
|
|
||||||
Name="NonWinFodyTarget"
|
|
||||||
Condition=" '$(OS)' != 'Windows_NT'">
|
|
||||||
<Fody.WeavingTask
|
|
||||||
AssemblyPath="$(TargetPath)"
|
|
||||||
IntermediateDir="$(IntermediateDir)"
|
|
||||||
KeyFilePath="$(FodyKeyFilePath)"
|
|
||||||
MessageImportance="$(FodyMessageImportance)"
|
|
||||||
ProjectDirectory="$(ProjectDir)"
|
|
||||||
SolutionDir="$(FodySolutionDir)"
|
|
||||||
References="@(ReferencePath)"
|
|
||||||
SignAssembly="$(FodySignAssembly)"
|
|
||||||
ReferenceCopyLocalPaths="$(ReferenceCopyLocalPaths)"
|
|
||||||
DefineConstants="$(DefineConstants)"
|
|
||||||
/>
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
|
|
||||||
<!--Support for ncrunch-->
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="$(FodyPath)\*.*" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
||||||
@@ -0,0 +1,512 @@
|
|||||||
|
using PocketSharp.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace PocketSharp
|
||||||
|
{
|
||||||
|
public interface IPocketClient
|
||||||
|
{
|
||||||
|
#region properties
|
||||||
|
/// <summary>
|
||||||
|
/// callback URLi for API calls
|
||||||
|
/// </summary>
|
||||||
|
/// <value>
|
||||||
|
/// The callback URI.
|
||||||
|
/// </value>
|
||||||
|
string CallbackUri { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Accessor for the Pocket API key
|
||||||
|
/// see: http://getpocket.com/developer
|
||||||
|
/// </summary>
|
||||||
|
/// <value>
|
||||||
|
/// The consumer key.
|
||||||
|
/// </value>
|
||||||
|
string ConsumerKey { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Code retrieved on authentification
|
||||||
|
/// </summary>
|
||||||
|
/// <value>
|
||||||
|
/// The request code.
|
||||||
|
/// </value>
|
||||||
|
string RequestCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Code retrieved on authentification-success
|
||||||
|
/// </summary>
|
||||||
|
/// <value>
|
||||||
|
/// The access code.
|
||||||
|
/// </value>
|
||||||
|
string AccessCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Action which is executed before every request
|
||||||
|
/// </summary>
|
||||||
|
/// <value>
|
||||||
|
/// The pre request callback.
|
||||||
|
/// </value>
|
||||||
|
Action<string> PreRequest { get; set; }
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region account methods
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieves the requestCode from Pocket, which is used to generate the Authentication URI to authenticate the user
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="System.NullReferenceException">Authentication methods need a callbackUri on initialization of the PocketClient class</exception>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<string> GetRequestCode(CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Generate Authentication URI from requestCode
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="requestCode">The requestCode. If no requestCode is supplied, the property from the PocketClient intialization is used.</param>
|
||||||
|
/// <returns>
|
||||||
|
/// A valid URI to redirect the user to.
|
||||||
|
/// </returns>
|
||||||
|
/// <exception cref="System.NullReferenceException">Call GetRequestCode() first to receive a request_code</exception>
|
||||||
|
Uri GenerateAuthenticationUri(string requestCode = null);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Requests the access code and username after authentication
|
||||||
|
/// The access code has to permanently be stored within the users session, and should be passed in the constructor for all future PocketClient initializations.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="requestCode">The request code.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns>
|
||||||
|
/// The authenticated user
|
||||||
|
/// </returns>
|
||||||
|
/// <exception cref="System.NullReferenceException">Call GetRequestCode() first to receive a request_code</exception>
|
||||||
|
Task<PocketUser> GetUser(string requestCode = null, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Generate registration URI from requestCode
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="requestCode">The requestCode. If no requestCode is supplied, the property from the PocketClient intialization is used.</param>
|
||||||
|
/// <returns>A valid URI to redirect the user to.</returns>
|
||||||
|
/// <exception cref="System.NullReferenceException">Call GetRequestCode() first to receive a request_code</exception>
|
||||||
|
Uri GenerateRegistrationUri(string requestCode = null);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get a new GUID from the Pocket API.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns>
|
||||||
|
/// The GUID
|
||||||
|
/// </returns>
|
||||||
|
Task<string> GetGuid(CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region add methods
|
||||||
|
/// <summary>
|
||||||
|
/// Adds a new item to pocket
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="uri">The URL of the item you want to save</param>
|
||||||
|
/// <param name="tags">A comma-separated list of tags to apply to the item</param>
|
||||||
|
/// <param name="title">This can be included for cases where an item does not have a title, which is typical for image or PDF URLs. If Pocket detects a title from the content of the page, this parameter will be ignored.</param>
|
||||||
|
/// <param name="tweetID">If you are adding Pocket support to a Twitter client, please send along a reference to the tweet status id. This allows Pocket to show the original tweet alongside the article.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns>
|
||||||
|
/// A simple representation of the saved item which doesn't contain all data (is only returned by calling the Retrieve method)
|
||||||
|
/// </returns>
|
||||||
|
/// <exception cref="System.FormatException">(1) Uri should be absolute.</exception>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<PocketItem> Add(Uri uri, string[] tags = null, string title = null, string tweetID = null, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region get methods
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieves items from pocket
|
||||||
|
/// with the given filters
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="state">The state.</param>
|
||||||
|
/// <param name="favorite">The favorite.</param>
|
||||||
|
/// <param name="tag">The tag.</param>
|
||||||
|
/// <param name="contentType">Type of the content.</param>
|
||||||
|
/// <param name="sort">The sort.</param>
|
||||||
|
/// <param name="search">The search.</param>
|
||||||
|
/// <param name="domain">The domain.</param>
|
||||||
|
/// <param name="since">The since.</param>
|
||||||
|
/// <param name="count">The count.</param>
|
||||||
|
/// <param name="offset">The offset.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<IEnumerable<PocketItem>> Get(
|
||||||
|
State? state = null,
|
||||||
|
bool? favorite = null,
|
||||||
|
string tag = null,
|
||||||
|
ContentType? contentType = null,
|
||||||
|
Sort? sort = null,
|
||||||
|
string search = null,
|
||||||
|
string domain = null,
|
||||||
|
DateTime? since = null,
|
||||||
|
int? count = null,
|
||||||
|
int? offset = null,
|
||||||
|
CancellationToken cancellationToken = default(CancellationToken)
|
||||||
|
);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieves an item by a given ID
|
||||||
|
/// Note: The Pocket API contains no method, which allows to retrieve a single item, so all items are retrieved and filtered locally by the ID.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="itemID">The item ID.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<PocketItem> Get(string itemID, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieves all items by a given filter
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="filter">The filter.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<IEnumerable<PocketItem>> Get(RetrieveFilter filter, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts a raw JSON response to a PocketItem list
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="itemsJSON">The raw JSON response.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
IEnumerable<PocketItem> ConvertJsonToList(string itemsJSON);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieves all available tags.
|
||||||
|
/// Note: The Pocket API contains no method, which allows to retrieve all tags, so all items are retrieved and the associated tags extracted.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<IEnumerable<PocketTag>> GetTags(CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieves items by tag
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tag">The tag.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<IEnumerable<PocketItem>> SearchByTag(string tag, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieves items which match the specified search string in title and URI
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchString">The search string.</param>
|
||||||
|
/// <param name="tag">Filter by tag.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="System.ArgumentOutOfRangeException">Search string length has to be a minimum of 2 chars</exception>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<IEnumerable<PocketItem>> Search(string searchString, string tag = null, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieves the article content from an URI
|
||||||
|
/// WARNING:
|
||||||
|
/// You have to pass the parseUri in the PocketClient ctor for this method to work.
|
||||||
|
/// This is a private API and can only be used by authenticated users.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tag">The article URI.</param>
|
||||||
|
/// <param name="includeImages">Include images into content or use placeholder.</param>
|
||||||
|
/// <param name="includeVideos">Include videos into content or use placeholder.</param>
|
||||||
|
/// <param name="forceRefresh">Force refresh of the content (don't use cache).</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<PocketArticle> GetArticle(Uri uri, bool includeImages = true, bool includeVideos = true, bool forceRefresh = false, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get article suggestions for an existing Pocket item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="itemId">Get suggestions based on this item.</param>
|
||||||
|
/// <param name="count">Requested item count.</param>
|
||||||
|
/// <param name="languageCode">Two-letter language code for language-specific results.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<IEnumerable<PocketItem>> GetSuggestions(string itemId, int count = 3, string languageCode = "en", CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region modify methods
|
||||||
|
/// <summary>
|
||||||
|
/// Sends multiple actions in one request.
|
||||||
|
/// See: http://getpocket.com/developer/docs/v3/modify
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="actions">The actions.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> SendActions(IEnumerable<PocketAction> actions, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Archives the specified item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="itemID">The item ID.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> Archive(string itemID, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Archives the specified item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">The item.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> Archive(PocketItem item, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Un-archives the specified item (alias for Readd).
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="itemID">The item ID.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> Unarchive(string itemID, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Unarchives the specified item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">The item.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> Unarchive(PocketItem item, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Favorites the specified item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="itemID">The item ID.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> Favorite(string itemID, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Favorites the specified item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">The item.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> Favorite(PocketItem item, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Un-favorites the specified item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="itemID">The item ID.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> Unfavorite(string itemID, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Un-favorites the specified item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">The item.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> Unfavorite(PocketItem item, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes the specified item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="itemID">The item ID.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> Delete(string itemID, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes the specified item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">The item.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<bool> Delete(PocketItem item, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region modify tags methods
|
||||||
|
/// <summary>
|
||||||
|
/// Adds the specified tags to an item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="itemID">The item ID.</param>
|
||||||
|
/// <param name="tags">The tags.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> AddTags(string itemID, string[] tags, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds the specified tags to an item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">The item.</param>
|
||||||
|
/// <param name="tags">The tags.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> AddTags(PocketItem item, string[] tags, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Removes the specified tags from an item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="itemID">The item ID.</param>
|
||||||
|
/// <param name="tags">The tags.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> RemoveTags(string itemID, string[] tags, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Removes the specified tags from an item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">The item.</param>
|
||||||
|
/// <param name="tags">The tag.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> RemoveTags(PocketItem item, string[] tags, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Removes a tag from an item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="itemID">The item ID.</param>
|
||||||
|
/// <param name="tag">The tag.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> RemoveTag(string itemID, string tag, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Removes a tag from an item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">The item.</param>
|
||||||
|
/// <param name="tag">The tag.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> RemoveTag(PocketItem item, string tag, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clears all tags from an item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="itemID">The item ID.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> RemoveTags(string itemID, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clears all tags from an item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">The item.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> RemoveTags(PocketItem item, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes a tag. This will remove it from all affected items too.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tag">The tag.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> DeleteTag(string tag, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Replaces all existing tags with the given tags in an item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="itemID">The item ID.</param>
|
||||||
|
/// <param name="tags">The tags.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> ReplaceTags(string itemID, string[] tags, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Replaces all existing tags with the given new ones in an item.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">The item.</param>
|
||||||
|
/// <param name="tags">The tags.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> ReplaceTags(PocketItem item, string[] tags, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Renames a tag. This affects all items with this tag.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="oldTag">The old tag.</param>
|
||||||
|
/// <param name="newTag">The new tag name.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<bool> RenameTag(string oldTag, string newTag, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region statistics methods
|
||||||
|
/// <summary>
|
||||||
|
/// Statistics from the user account.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<PocketStatistics> GetUserStatistics(CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns API usage statistics.
|
||||||
|
/// If a request was made before, the data is returned synchronously from the cache.
|
||||||
|
/// Note: This method only works for authenticated users with a given AccessCode.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<PocketLimits> GetUsageLimits(CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region explore/trending methods
|
||||||
|
/// <summary>
|
||||||
|
/// Get trending articles on Pocket.
|
||||||
|
/// Requires an active GUID from GetGuid() and will therefore make two HTTP requests.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="count">Article count.</param>
|
||||||
|
/// <param name="languageCode">Two-letter language code for language-specific results.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<IEnumerable<PocketItem>> GetTrendingArticles(int count = 20, string languageCode = "en", CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get trending topics on Pocket.
|
||||||
|
/// Requires an active GUID from GetGuid() and will therefore make two HTTP requests.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="languageCode">Two-letter language code for language-specific results.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="PocketException"></exception>
|
||||||
|
Task<IEnumerable<PocketTopic>> GetTrendingTopics(string languageCode = "en", CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Explore Pocket and find interesting articles by a certain topic
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="topic">Term or topic to get articles for</param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
// Task<IEnumerable<PocketExploreItem>> Explore(string topic, CancellationToken cancellationToken = default(CancellationToken));
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
|
||||||
|
/// </summary>
|
||||||
|
void Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,6 +16,6 @@ namespace PocketSharp.Models
|
|||||||
/// The actions.
|
/// The actions.
|
||||||
/// </value>
|
/// </value>
|
||||||
[DataMember(Name = "actions")]
|
[DataMember(Name = "actions")]
|
||||||
public List<Dictionary<string, string>> Actions { get; set; }
|
public IEnumerable<Dictionary<string, string>> Actions { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.Serialization;
|
using System.Runtime.Serialization;
|
||||||
@@ -23,16 +23,26 @@ namespace PocketSharp.Models
|
|||||||
Dictionary<string, string> parameterDict = new Dictionary<string, string>();
|
Dictionary<string, string> parameterDict = new Dictionary<string, string>();
|
||||||
|
|
||||||
// get object properties
|
// get object properties
|
||||||
IEnumerable<PropertyInfo> properties = this.GetType()
|
IEnumerable<MemberInfo> properties = this.GetType()
|
||||||
.GetProperties(BindingFlags.Instance | BindingFlags.Public)
|
.GetTypeInfo()
|
||||||
.Where(p => Attribute.IsDefined(p, typeof(DataMemberAttribute)));
|
.DeclaredMembers
|
||||||
|
.Where(p => p.CustomAttributes.FirstOrDefault(a => a.AttributeType == typeof(DataMemberAttribute)) != null);
|
||||||
|
|
||||||
// gather attributes of object
|
// gather attributes of object
|
||||||
foreach (PropertyInfo propertyInfo in properties)
|
foreach (MemberInfo memberInfo in properties)
|
||||||
{
|
{
|
||||||
DataMemberAttribute attribute = (DataMemberAttribute)propertyInfo.GetCustomAttributes(typeof(DataMemberAttribute), false).FirstOrDefault();
|
DataMemberAttribute attribute = (DataMemberAttribute)memberInfo.GetCustomAttributes(typeof(DataMemberAttribute), false).FirstOrDefault();
|
||||||
string name = attribute.Name ?? propertyInfo.Name.ToLower();
|
string name = attribute.Name ?? memberInfo.Name.ToLower();
|
||||||
object value = propertyInfo.GetValue(this, null);
|
object value = null;
|
||||||
|
|
||||||
|
if (memberInfo is FieldInfo)
|
||||||
|
{
|
||||||
|
value = ((FieldInfo)memberInfo).GetValue(this);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value = ((PropertyInfo)memberInfo).GetValue(this, null);
|
||||||
|
}
|
||||||
|
|
||||||
// invalid parameter
|
// invalid parameter
|
||||||
if (value == null)
|
if (value == null)
|
||||||
@@ -55,7 +65,7 @@ namespace PocketSharp.Models
|
|||||||
// convert DateTime to UNIX timestamp
|
// convert DateTime to UNIX timestamp
|
||||||
if (value is DateTime)
|
if (value is DateTime)
|
||||||
{
|
{
|
||||||
value = (int)((DateTime)value - new DateTime(1970, 1, 1)).TotalSeconds;
|
value = (int)((DateTime)value - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
parameterDict.Add(name, value.ToString());
|
parameterDict.Add(name, value.ToString());
|
||||||
@@ -64,4 +74,4 @@ namespace PocketSharp.Models
|
|||||||
return parameterDict;
|
return parameterDict;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
using System.Runtime.Serialization;
|
|
||||||
|
|
||||||
namespace PocketSharp.Models
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// All parameters which can be passed to register a user
|
|
||||||
/// </summary>
|
|
||||||
[DataContract]
|
|
||||||
internal class RegisterParameters : Parameters
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the username.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>
|
|
||||||
/// The username.
|
|
||||||
/// </value>
|
|
||||||
[DataMember(Name = "username")]
|
|
||||||
public string Username { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the E-Mail.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>
|
|
||||||
/// The E-Mail.
|
|
||||||
/// </value>
|
|
||||||
[DataMember(Name = "email")]
|
|
||||||
public string Email { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the password.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>
|
|
||||||
/// The password.
|
|
||||||
/// </value>
|
|
||||||
[DataMember(Name = "password")]
|
|
||||||
public string Password { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||