Skip to content
This repository was archived by the owner on May 5, 2021. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 14 additions & 11 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
*.ide
.DS_Store
*.userprefs
*.user
*.suo
*.quicktest
bin
obj
*.ide
.DS_Store
*.userprefs
*.user
*.suo
*.quicktest
bin
obj
test-results
components
.xpkg
docs
src/Components
samples/
components
.xpkg
docs
StyleCop.Cache
3 changes: 3 additions & 0 deletions src/Xamarin.Social.Android/Xamarin.Social.Android.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,9 @@
<Compile Include="..\..\Xamarin.Auth\src\Xamarin.Auth\WebEx.cs">
<Link>WebEx.cs</Link>
</Compile>
<Compile Include="..\Xamarin.Social\Location.cs">
<Link>Location.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<Folder Include="Services\" />
Expand Down
8 changes: 6 additions & 2 deletions src/Xamarin.Social.iOS/Xamarin.Social.iOS.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
<OutputType>Library</OutputType>
<RootNamespace>Xamarin.Social</RootNamespace>
<AssemblyName>Xamarin.Social.iOS</AssemblyName>
<SynchReleaseVersion>false</SynchReleaseVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>True</DebugSymbols>
Expand Down Expand Up @@ -46,7 +47,7 @@
<Reference Include="System.Json" />
<Reference Include="Xamarin.iOS" />
<Reference Include="Xamarin.Mobile">
<HintPath>..\Components\xamarin.mobile-0.7.5\lib\ios-unified\Xamarin.Mobile.dll</HintPath>
<HintPath>..\..\..\..\Components\xamarin.mobile-0.7.6\lib\ios-unified\Xamarin.Mobile.dll</HintPath>
</Reference>
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" />
Expand Down Expand Up @@ -105,6 +106,9 @@
<Compile Include="..\..\Xamarin.Auth\src\Xamarin.Auth\WebEx.cs">
<Link>WebEx.cs</Link>
</Compile>
<Compile Include="..\Xamarin.Social\Location.cs">
<Link>Location.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<Folder Include="Services\" />
Expand All @@ -117,7 +121,7 @@
</ItemGroup>
<ItemGroup>
<XamarinComponentReference Include="xamarin.mobile">
<Version>0.7.5</Version>
<Version>0.7.6</Version>
<Visible>False</Visible>
</XamarinComponentReference>
</ItemGroup>
Expand Down
16 changes: 16 additions & 0 deletions src/Xamarin.Social/Item.cs
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,22 @@ public bool HasAttachments {
/// </summary>
public IList<FileData> Files { get; set; }

private Location location = null;
/// <summary>
/// Gets or sets the location associated with this item.
/// </summary>
public Location Location {
get {
if (location == null) {
location = new Location ();
}
return location;
}
set {
location = value;
}
}

#if SUPPORT_VIDEO
/// <summary>
/// Attached video.
Expand Down
31 changes: 31 additions & 0 deletions src/Xamarin.Social/Location.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
//
// Copyright 2013, Michael Henke
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
using System;

namespace Xamarin.Social
{
public class Location
{
public double Latitude { get; set; }

public double Longitude { get; set; }

public Location ()
{
}
}
}

54 changes: 52 additions & 2 deletions src/Xamarin.Social/Services/FacebookService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
using System.Text;
using System.Threading;
using Xamarin.Auth;
using System.Diagnostics;
using System.Json;

namespace Xamarin.Social.Services
{
Expand Down Expand Up @@ -75,8 +77,48 @@ static string GetValueFromJson (string json, string key)
return r;
}

public override Task ShareItemAsync (Item item, Account account, CancellationToken cancellationToken)
public async override Task ShareItemAsync (Item item, Account account, CancellationToken cancellationToken)
{
string placeId = null;

if (item.Location.Latitude != 0 && item.Location.Longitude != 0)
{
Request placeRequest = CreateRequest("GET", new Uri ("https://graph.facebook.com/search"), account);

placeRequest.Parameters ["type"] = "place";
placeRequest.Parameters ["center"] = item.Location.Latitude.ToString() + "," + item.Location.Longitude.ToString();
placeRequest.Parameters ["distance"] = "100";

var reqTask = await placeRequest.GetResponseAsync(cancellationToken).ConfigureAwait(false);

var obj = JsonObject.Parse(reqTask.GetResponseText());

if (obj.ContainsKey("data") && obj["data"].Count > 0 && obj["data"][0].ContainsKey("id"))
placeId = obj ["data"] [0] ["id"];

await ShareItemWithLocationAsync(item, account, placeId, cancellationToken).ConfigureAwait(false);

return;
}
else
{
try
{
await ShareItemWithLocationAsync(item, account, null, cancellationToken).ConfigureAwait(false);
}
catch(Exception e)
{
#if DEBUG
throw(e);
#endif
}
return;
}
}

public Task ShareItemWithLocationAsync (Item item, Account account, string placeId, CancellationToken cancellationToken)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this a separate public method if you're detecting whether it needs to be called in ShareItemAsync anyway?

{

Request req;

if (item.Images.Count > 0) {
Expand All @@ -90,21 +132,29 @@ public override Task ShareItemAsync (Item item, Account account, CancellationTok
message.Append (l.AbsoluteUri);
}
req.AddMultipartData ("message", message.ToString ());
if (placeId != null) {

req.AddMultipartData("place", placeId);
}
}
else {
req = CreateRequest ("POST", new Uri ("https://graph.facebook.com/me/feed"), account);
req.Parameters["message"] = item.Text;
if (item.Links.Count > 0) {
req.Parameters["link"] = item.Links.First ().AbsoluteUri;
}
if (placeId != null) {

req.Parameters.Add("place", placeId);
}
}

return req.GetResponseAsync (cancellationToken).ContinueWith (reqTask => {
var content = reqTask.Result.GetResponseText ();
if (!content.Contains ("\"id\"")) {
throw new SocialException ("Facebook returned an unrecognized response.");
}
});
});
}
}
}
Expand Down
58 changes: 58 additions & 0 deletions src/Xamarin.Social/Services/TwitterService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,68 @@ public override Task ShareItemAsync (Item item, Account account, CancellationTok
if (item.Images.Count == 0) {
req = CreateRequest ("POST", new Uri ("https://api.twitter.com/1.1/statuses/update.json"), account);
req.Parameters["status"] = status;
if (item.Location.Latitude != 0 && item.Location.Longitude != 0) {
req.Parameters ["lat"] = item.Location.Latitude.ToString();
req.Parameters ["long"] = item.Location.Longitude.ToString();
}
}
else {
req = CreateRequest ("POST", new Uri ("https://api.twitter.com/1.1/statuses/update_with_media.json"), account);
req.AddMultipartData ("status", status);
if (item.Location.Latitude != 0 && item.Location.Longitude != 0) {
req.AddMultipartData ("lat", item.Location.Latitude.ToString());
req.AddMultipartData ("long", item.Location.Longitude.ToString());
}
foreach (var i in item.Images.Take (MaxImages)) {
i.AddToRequest (req, "media[]");
}
}

//
// Send it
//
return req.GetResponseAsync (cancellationToken);/*.ContinueWith ((Task<Response> reqTask) => {
var content = reqTask.Result.GetResponseText ();
if (!content.Contains ("<status")) {
throw new SocialException ("Twitter did not return the expected response.");
}
});*/
}

public Task ShareItemWithLocationAsync (Item item, Account account, string placeId, CancellationToken cancellationToken)
{
//
// Combine the links into the tweet
//
var sb = new StringBuilder ();
sb.Append (item.Text);
foreach (var l in item.Links) {
sb.Append (" ");
sb.Append (l.AbsoluteUri);
}
var status = sb.ToString ();

//
// Create the request
//
Request req;
if (item.Images.Count == 0) {
req = CreateRequest ("POST", new Uri ("https://api.twitter.com/1.1/statuses/update.json"), account);
req.Parameters["status"] = status;
if (item.Location.Latitude != 0 && item.Location.Longitude != 0) {
req.Parameters ["lat"] = item.Location.Latitude.ToString();
req.Parameters ["long"] = item.Location.Longitude.ToString();
req.Parameters ["place_id"] = placeId;
}
}
else {
req = CreateRequest ("POST", new Uri ("https://api.twitter.com/1.1/statuses/update_with_media.json"), account);
req.AddMultipartData ("status", status);
if (item.Location.Latitude != 0 && item.Location.Longitude != 0) {
req.AddMultipartData ("lat", item.Location.Latitude.ToString());
req.AddMultipartData ("long", item.Location.Longitude.ToString());
req.AddMultipartData ("place_id", placeId);
}
foreach (var i in item.Images.Take (MaxImages)) {
i.AddToRequest (req, "media[]");
}
Expand Down
1 change: 1 addition & 0 deletions src/Xamarin.Social/Xamarin.Social.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
<Compile Include="..\..\Xamarin.Auth\src\Xamarin.Auth\WebEx.cs">
<Link>WebEx.cs</Link>
</Compile>
<Compile Include="Location.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup />
Expand Down