diff --git a/InstaSharper.Examples/App.config b/InstaSharper.Examples/App.config
index f882b53a..7785bb06 100644
--- a/InstaSharper.Examples/App.config
+++ b/InstaSharper.Examples/App.config
@@ -4,4 +4,4 @@
-
+
\ No newline at end of file
diff --git a/InstaSharper.Examples/InstaSharper.Examples.csproj b/InstaSharper.Examples/InstaSharper.Examples.csproj
index 787fcfce..07fedfd4 100644
--- a/InstaSharper.Examples/InstaSharper.Examples.csproj
+++ b/InstaSharper.Examples/InstaSharper.Examples.csproj
@@ -34,11 +34,12 @@
4
-
- ..\InstaSharper\bin\Debug\net452\InstaSharper.dll
+
+ False
+ ..\InstaSharper\bin\release\net452\InstaSharper.dll
- packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll
+ packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll
@@ -54,9 +55,11 @@
+
+
+
-
diff --git a/InstaSharper.Examples/Program.cs b/InstaSharper.Examples/Program.cs
index 6a91cb1b..064e915c 100644
--- a/InstaSharper.Examples/Program.cs
+++ b/InstaSharper.Examples/Program.cs
@@ -1,8 +1,10 @@
using System;
+using System.Collections.Generic;
using System.Threading.Tasks;
using InstaSharper.API;
using InstaSharper.API.Builder;
using InstaSharper.Classes;
+using InstaSharper.Classes.Android.DeviceInfo;
using InstaSharper.Examples.Samples;
using InstaSharper.Logger;
@@ -18,6 +20,9 @@ public class Program
private static void Main(string[] args)
{
var result = Task.Run(MainAsync).GetAwaiter().GetResult();
+ if (result)
+ return;
+ Console.ReadKey();
}
public static async Task MainAsync()
@@ -33,12 +38,14 @@ public static async Task MainAsync()
};
// create new InstaApi instance using Builder
- _instaApi = new InstaApiBuilder()
+ var device = AndroidDeviceGenerator.GetByName(AndroidDevices.SAMSUNG_NOTE3);
+ var requestMessage = ApiRequestMessage.FromDevice(device);
+ _instaApi = InstaApiBuilder.CreateBuilder()
.SetUser(userSession)
- .UseLogger(new DebugLogger()) // use logger for requests and debug messages
- .SetRequestDelay(TimeSpan.FromSeconds(1)) // set delay between requests
+ .SetApiRequestMessage(requestMessage)
+ .UseLogger(new DebugLogger(LogLevel.Info)) // use logger for requests and debug messages
+ .SetRequestDelay(TimeSpan.FromSeconds(2))
.Build();
-
// login
Console.WriteLine($"Logging in as {userSession.UserName}");
var logInResult = await _instaApi.LoginAsync();
@@ -51,27 +58,23 @@ public static async Task MainAsync()
Console.WriteLine("Press 1 to start basic demo samples");
Console.WriteLine("Press 2 to start upload photo demo sample");
Console.WriteLine("Press 3 to start comment media demo sample");
+ Console.WriteLine("Press 4 to start stories demo sample");
+ Console.WriteLine("Press 5 to start demo with saving state of API instance");
+ var samplesMap = new Dictionary
+ {
+ [ConsoleKey.D1] = new Basics(_instaApi),
+ [ConsoleKey.D2] = new UploadPhoto(_instaApi),
+ [ConsoleKey.D3] = new CommentMedia(_instaApi),
+ [ConsoleKey.D4] = new Stories(_instaApi),
+ [ConsoleKey.D5] = new SaveLoadState(_instaApi)
+ };
var key = Console.ReadKey();
Console.WriteLine(Environment.NewLine);
- switch (key.Key)
- {
- case ConsoleKey.D1:
- var basics = new Basics(_instaApi);
- await basics.DoShow();
- break;
- case ConsoleKey.D2:
- var upload = new UploadPhoto(_instaApi);
- await upload.DoShow();
- break;
- case ConsoleKey.D3:
- var comment = new CommentMedia(_instaApi);
- await comment.DoShow();
- break;
- default:
- break;
- }
+ if (samplesMap.ContainsKey(key.Key))
+ await samplesMap[key.Key].DoShow();
Console.WriteLine("Done. Press esc key to exit...");
+
key = Console.ReadKey();
return key.Key == ConsoleKey.Escape;
}
@@ -88,4 +91,4 @@ public static async Task MainAsync()
return false;
}
}
-}
+}
\ No newline at end of file
diff --git a/InstaSharper.Examples/Properties/AssemblyInfo.cs b/InstaSharper.Examples/Properties/AssemblyInfo.cs
index 6035e817..b094a7c8 100644
--- a/InstaSharper.Examples/Properties/AssemblyInfo.cs
+++ b/InstaSharper.Examples/Properties/AssemblyInfo.cs
@@ -36,4 +36,4 @@
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
\ No newline at end of file
diff --git a/InstaSharper.Examples/Samples/Basics.cs b/InstaSharper.Examples/Samples/Basics.cs
index 8f21a516..bcb21e24 100644
--- a/InstaSharper.Examples/Samples/Basics.cs
+++ b/InstaSharper.Examples/Samples/Basics.cs
@@ -6,7 +6,7 @@
namespace InstaSharper.Examples.Samples
{
- internal class Basics
+ internal class Basics : IDemoSample
{
///
/// Config values
@@ -72,4 +72,4 @@ public async Task DoShow()
}
}
}
-}
+}
\ No newline at end of file
diff --git a/InstaSharper.Examples/Samples/CommentMedia.cs b/InstaSharper.Examples/Samples/CommentMedia.cs
index 35f65101..bd290780 100644
--- a/InstaSharper.Examples/Samples/CommentMedia.cs
+++ b/InstaSharper.Examples/Samples/CommentMedia.cs
@@ -4,7 +4,7 @@
namespace InstaSharper.Examples.Samples
{
- internal class CommentMedia
+ internal class CommentMedia : IDemoSample
{
private readonly IInstaApi _instaApi;
@@ -21,4 +21,4 @@ public async Task DoShow()
: $"Unable to create comment: {commentResult.Info.Message}");
}
}
-}
+}
\ No newline at end of file
diff --git a/InstaSharper.Examples/Samples/IDemoSample.cs b/InstaSharper.Examples/Samples/IDemoSample.cs
new file mode 100644
index 00000000..19fea3c5
--- /dev/null
+++ b/InstaSharper.Examples/Samples/IDemoSample.cs
@@ -0,0 +1,9 @@
+using System.Threading.Tasks;
+
+namespace InstaSharper.Examples.Samples
+{
+ internal interface IDemoSample
+ {
+ Task DoShow();
+ }
+}
\ No newline at end of file
diff --git a/InstaSharper.Examples/Samples/SaveLoadState.cs b/InstaSharper.Examples/Samples/SaveLoadState.cs
new file mode 100644
index 00000000..990da146
--- /dev/null
+++ b/InstaSharper.Examples/Samples/SaveLoadState.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Threading.Tasks;
+using InstaSharper.API;
+using InstaSharper.API.Builder;
+
+namespace InstaSharper.Examples.Samples
+{
+ internal class SaveLoadState : IDemoSample
+ {
+ private readonly IInstaApi _instaApi;
+
+ public SaveLoadState(IInstaApi instaApi)
+ {
+ _instaApi = instaApi;
+ }
+
+ public async Task DoShow()
+ {
+ var result = await _instaApi.GetCurrentUserAsync();
+ if (!result.Succeeded)
+ {
+ Console.WriteLine($"Unable to get current user using current API instance: {result.Info}");
+ return;
+ }
+ Console.WriteLine($"Got current user: {result.Value.UserName} using existing API instance");
+ var stream = _instaApi.GetStateDataAsStream();
+ var anotherInstance = InstaApiBuilder.CreateBuilder()
+ .SetRequestDelay(TimeSpan.FromSeconds(2))
+ .Build();
+ anotherInstance.LoadStateDataFromStream(stream);
+ var anotherResult = await anotherInstance.GetCurrentUserAsync();
+ if (!anotherResult.Succeeded)
+ {
+ Console.WriteLine($"Unable to get current user using current API instance: {result.Info}");
+ return;
+ }
+ Console.WriteLine(
+ $"Got current user: {anotherResult.Value.UserName} using new API instance without re-login");
+ }
+ }
+}
\ No newline at end of file
diff --git a/InstaSharper.Examples/Samples/Stories.cs b/InstaSharper.Examples/Samples/Stories.cs
new file mode 100644
index 00000000..92e851c1
--- /dev/null
+++ b/InstaSharper.Examples/Samples/Stories.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Threading.Tasks;
+using InstaSharper.API;
+
+namespace InstaSharper.Examples.Samples
+{
+ internal class Stories : IDemoSample
+ {
+ private readonly IInstaApi _instaApi;
+
+ public Stories(IInstaApi instaApi)
+ {
+ _instaApi = instaApi;
+ }
+
+ public async Task DoShow()
+ {
+ var result = await _instaApi.GetStoryFeedAsync();
+ if (!result.Succeeded)
+ {
+ Console.WriteLine($"Unable to get story feed: {result.Info}");
+ return;
+ }
+ var storyFeed = result.Value;
+ Console.WriteLine($"Got {storyFeed.Items.Count} story reels.");
+ foreach (var feedItem in storyFeed.Items)
+ {
+ Console.WriteLine($"User: {feedItem.User.FullName}");
+ foreach (var item in feedItem.Items)
+ Console.WriteLine(
+ $"Story item: {item.Caption?.Text ?? item.Code}, images:{item.ImageList?.Count ?? 0}, videos: {item.VideoList?.Count ?? 0}");
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/InstaSharper.Examples/Samples/UploadPhoto.cs b/InstaSharper.Examples/Samples/UploadPhoto.cs
index bffa6b18..300d643b 100644
--- a/InstaSharper.Examples/Samples/UploadPhoto.cs
+++ b/InstaSharper.Examples/Samples/UploadPhoto.cs
@@ -6,7 +6,7 @@
namespace InstaSharper.Examples.Samples
{
- internal class UploadPhoto
+ internal class UploadPhoto : IDemoSample
{
private readonly IInstaApi _instaApi;
@@ -17,7 +17,7 @@ public UploadPhoto(IInstaApi instaApi)
public async Task DoShow()
{
- var mediaImage = new MediaImage
+ var mediaImage = new InstaImage
{
Height = 1080,
Width = 1080,
@@ -29,4 +29,4 @@ public async Task DoShow()
: $"Unable to upload photo: {result.Info.Message}");
}
}
-}
+}
\ No newline at end of file
diff --git a/InstaSharper.Examples/Utils/ConsoleUtils.cs b/InstaSharper.Examples/Utils/ConsoleUtils.cs
index eff75917..1b9956bc 100644
--- a/InstaSharper.Examples/Utils/ConsoleUtils.cs
+++ b/InstaSharper.Examples/Utils/ConsoleUtils.cs
@@ -11,4 +11,4 @@ public static void PrintMedia(string header, InstaMedia media, int maxDescriptio
$"{header} [{media.User.UserName}]: {media.Caption?.Text.Truncate(maxDescriptionLength)}, {media.Code}, likes: {media.LikesCount}, multipost: {media.IsMultiPost}");
}
}
-}
+}
\ No newline at end of file
diff --git a/InstaSharper.Examples/Utils/DebugLogger.cs b/InstaSharper.Examples/Utils/DebugLogger.cs
deleted file mode 100644
index 173bb364..00000000
--- a/InstaSharper.Examples/Utils/DebugLogger.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Net.Http;
-using System.Net.Http.Headers;
-using System.Text;
-using System.Threading.Tasks;
-using InstaSharper.Logger;
-using Newtonsoft.Json;
-
-namespace InstaSharper.Logger
-{
- internal class DebugLogger : ILogger
- {
- public void OnRequest(object request)
- {
- WriteSeprator();
- if (request is HttpRequestMessage req)
- {
- Console.WriteLine($"[+] Request: {req.Method} {req.RequestUri}");
- WriteHeaders(req.Headers);
- WriteProperties(req.Properties);
- }
- else if (request is Uri uri)
- Console.WriteLine($"[+] Request: {HttpMethod.Get} {uri}");
- else
- Console.WriteLine($"Request[{request.GetType()}]");
- //WriteObject(request);
- WriteSeprator();
- }
-
- public void OnResponse(object response)
- {
- if (response is HttpResponseMessage rsp)
- {
- Console.WriteLine($"[+] Response: {rsp.RequestMessage.Method} {rsp.RequestMessage.RequestUri}");
- WriteContent(rsp.Content,Formatting.None, 0);
- }
- //WriteObject(response);
- }
-
- public void OnError(Exception ex)
- {
- Console.WriteLine("[+] Error:");
- Console.WriteLine(ex.ToString());
- }
-
- public void OnInfo(string info)
- {
- Console.WriteLine($"[+] Info:\n{info}");
- }
-
- private void WriteHeaders(HttpHeaders headers)
- {
- if (headers == null) return;
- if (!headers.Any()) return;
- Console.WriteLine("[+] Headers:");
- foreach (var item in headers)
- Console.WriteLine($"{item.Key}:{JsonConvert.SerializeObject(item.Value)}");
- }
-
- private void WriteProperties(IDictionary properties)
- {
- if (properties == null) return;
- if (properties.Count == 0) return;
-
- Console.WriteLine($"[+] Properties:\n{JsonConvert.SerializeObject(properties, Formatting.Indented)}");
- }
-
- private async void WriteContent(HttpContent content,Formatting formatting, int maxLen = 0)
- {
- Console.WriteLine("[+] Content:");
- var raw = await content.ReadAsStringAsync();
- if (formatting == Formatting.Indented) raw = FormatJson(raw);
- raw = raw.Contains("") ? "got html content!" : raw;
- if (raw.Length > maxLen & maxLen != 0)
- raw = raw.Substring(0, maxLen);
- Console.WriteLine(raw);
- }
-
- private void WriteSeprator()
- {
- StringBuilder sep = new StringBuilder();
- for (var i = 0; i < 100; i++) sep.Append("-");
- Console.WriteLine(sep);
- }
-
- private void WriteObject(object obj)
- {
- Console.WriteLine(JsonConvert.SerializeObject(obj));
- }
-
- private string FormatJson(string json)
- {
- dynamic parsedJson = JsonConvert.DeserializeObject(json);
- return JsonConvert.SerializeObject(parsedJson, Formatting.Indented);
- }
-
- }
-}
\ No newline at end of file
diff --git a/InstaSharper.Examples/Utils/StringExtensions.cs b/InstaSharper.Examples/Utils/StringExtensions.cs
index 7382f191..02d5049c 100644
--- a/InstaSharper.Examples/Utils/StringExtensions.cs
+++ b/InstaSharper.Examples/Utils/StringExtensions.cs
@@ -7,4 +7,4 @@ public static string Truncate(this string value, int maxChars)
return value.Length <= maxChars ? value : value.Substring(0, maxChars) + "...";
}
}
-}
+}
\ No newline at end of file
diff --git a/InstaSharper.Examples/packages.config b/InstaSharper.Examples/packages.config
index 80c23c20..6ca16e36 100644
--- a/InstaSharper.Examples/packages.config
+++ b/InstaSharper.Examples/packages.config
@@ -1,6 +1,5 @@
-
-
-
+
+
\ No newline at end of file
diff --git a/InstaSharper.Tests/Endpoints/FeedTest.cs b/InstaSharper.Tests/Endpoints/FeedTest.cs
index 08347dc1..7371f2be 100644
--- a/InstaSharper.Tests/Endpoints/FeedTest.cs
+++ b/InstaSharper.Tests/Endpoints/FeedTest.cs
@@ -47,6 +47,21 @@ public async void GetUserTagFeedTest(string username)
Assert.False(anyMediaDuplicate);
}
+ [Theory]
+ [InlineData(260955581)]
+ [InlineData(267685466)]
+ [InlineData(466579064)]
+ public async void GetUserReelFeedTest(long userPk)
+ {
+ Assert.True(_authInfo.ApiInstance.IsUserAuthenticated);
+
+ var result = await _authInfo.ApiInstance.GetUserStoryFeedAsync(userPk);
+ var feed = result.Value;
+ //assert
+ Assert.True(result.Succeeded);
+ Assert.NotNull(feed);
+ }
+
[Fact]
public async void ExploreTest()
{
@@ -118,20 +133,5 @@ public async void GetUserLikeFeedTest()
Assert.NotNull(feed);
Assert.False(anyDuplicate);
}
-
- [Theory]
- [InlineData(260955581)]
- [InlineData(267685466)]
- [InlineData(466579064)]
- public async void GetUserReelFeedTest(long userPk)
- {
- Assert.True(_authInfo.ApiInstance.IsUserAuthenticated);
-
- var result = await _authInfo.ApiInstance.GetUserStoryFeedAsync(userPk);
- var feed = result.Value;
- //assert
- Assert.True(result.Succeeded);
- Assert.NotNull(feed);
- }
}
}
\ No newline at end of file
diff --git a/InstaSharper.Tests/Infrastructure/ApiInstanceBuilderTest.cs b/InstaSharper.Tests/Infrastructure/ApiInstanceBuilderTest.cs
index 2a1dce26..c4a1e1e0 100644
--- a/InstaSharper.Tests/Infrastructure/ApiInstanceBuilderTest.cs
+++ b/InstaSharper.Tests/Infrastructure/ApiInstanceBuilderTest.cs
@@ -11,7 +11,7 @@ public class ApiInstanceBuilderTest
public void CreateApiInstanceWithBuilder()
{
var result = InstaApiBuilder.CreateBuilder()
- .UseLogger(new DebugLogger())
+ .UseLogger(new DebugLogger(LogLevel.All))
.Build();
Assert.NotNull(result);
}
diff --git a/InstaSharper.Tests/Infrastructure/StateDataTest.cs b/InstaSharper.Tests/Infrastructure/StateDataTest.cs
index cfd89b86..2230f004 100644
--- a/InstaSharper.Tests/Infrastructure/StateDataTest.cs
+++ b/InstaSharper.Tests/Infrastructure/StateDataTest.cs
@@ -1,7 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using InstaSharper.Classes;
+using InstaSharper.Classes;
using InstaSharper.Tests.Classes;
using InstaSharper.Tests.Utils;
using Xunit;
@@ -26,10 +23,10 @@ public async void GetSetStateDataTest()
var getUserResult = await _authInfo.ApiInstance.GetCurrentUserAsync();
var user = getUserResult.Value;
- var data = _authInfo.ApiInstance.GetStateData();
+ var data = _authInfo.ApiInstance.GetStateDataAsStream();
var newApiInstance = TestHelpers.GetDefaultInstaApiInstance(new UserSessionData());
- newApiInstance.SetStateData(data);
- var newGetUserResult = await _authInfo.ApiInstance.GetCurrentUserAsync();
+ newApiInstance.LoadStateDataFromStream(data);
+ var newGetUserResult = await newApiInstance.GetCurrentUserAsync();
var newUser = getUserResult.Value;
Assert.True(getUserResult.Succeeded && newGetUserResult.Succeeded);
@@ -37,7 +34,6 @@ public async void GetSetStateDataTest()
Assert.NotNull(newUser);
Assert.Equal(user.UserName, _authInfo.GetUsername());
Assert.Equal(newUser.UserName, _authInfo.GetUsername());
-
}
}
-}
+}
\ No newline at end of file
diff --git a/InstaSharper.Tests/Utils/TestHelpers.cs b/InstaSharper.Tests/Utils/TestHelpers.cs
index 46ce7cdf..4586ac7b 100644
--- a/InstaSharper.Tests/Utils/TestHelpers.cs
+++ b/InstaSharper.Tests/Utils/TestHelpers.cs
@@ -19,7 +19,7 @@ public static IInstaApi GetDefaultInstaApiInstance(string username)
var requestMessage = ApiRequestMessage.FromDevice(device);
var apiInstance = InstaApiBuilder.CreateBuilder()
.SetUserName(username)
- .UseLogger(new DebugLogger())
+ .UseLogger(new DebugLogger(LogLevel.All))
.SetApiRequestMessage(requestMessage)
.Build();
return apiInstance;
diff --git a/InstaSharper/API/IInstaApi.cs b/InstaSharper/API/IInstaApi.cs
index 146ca7fd..5f37976a 100644
--- a/InstaSharper/API/IInstaApi.cs
+++ b/InstaSharper/API/IInstaApi.cs
@@ -1,4 +1,5 @@
-using System.Threading.Tasks;
+using System.IO;
+using System.Threading.Tasks;
using InstaSharper.Classes;
using InstaSharper.Classes.Models;
@@ -15,6 +16,17 @@ public interface IInstaApi
#endregion
+ ///
+ /// Get current state info as Memory stream
+ ///
+ /// State data
+ Stream GetStateDataAsStream();
+
+ ///
+ /// Set state data from provided stream
+ ///
+ void LoadStateDataFromStream(Stream data);
+
#region Async Members
///
@@ -348,16 +360,6 @@ public interface IInstaApi
///
Task> GetUserStoryFeedAsync(long userId);
- ///
- /// Get current state info
- ///
- /// State data
- StateData GetStateData();
-
- ///
- /// Set state data from provided
- ///
- void SetStateData(StateData data);
#endregion
}
}
\ No newline at end of file
diff --git a/InstaSharper/API/InstaApi.cs b/InstaSharper/API/InstaApi.cs
index 0403afbc..ec926b6c 100644
--- a/InstaSharper/API/InstaApi.cs
+++ b/InstaSharper/API/InstaApi.cs
@@ -22,9 +22,9 @@ namespace InstaSharper.API
{
internal class InstaApi : IInstaApi
{
- private AndroidDevice _deviceInfo;
private readonly IHttpRequestProcessor _httpRequestProcessor;
private readonly IInstaLogger _logger;
+ private AndroidDevice _deviceInfo;
private UserSessionData _user;
public InstaApi(UserSessionData user, IInstaLogger logger, AndroidDevice deviceInfo,
@@ -160,16 +160,27 @@ public async Task> GetUserStoryFeedAsync(long userId)
}
}
- public StateData GetStateData()
+ ///
+ public Stream GetStateDataAsStream()
{
- return new StateData() {DeviceInfo = _deviceInfo, IsAuthenticated = IsUserAuthenticated, UserSession = _user};
+ var state = new StateData
+ {
+ DeviceInfo = _deviceInfo,
+ IsAuthenticated = IsUserAuthenticated,
+ UserSession = _user,
+ Cookies = _httpRequestProcessor.HttpHandler.CookieContainer
+ };
+ return SerializationHelper.SerializeToStream(state);
}
- public void SetStateData(StateData data)
+ ///
+ public void LoadStateDataFromStream(Stream stream)
{
+ var data = SerializationHelper.DeserializeFromStream(stream);
_deviceInfo = data.DeviceInfo;
_user = data.UserSession;
IsUserAuthenticated = data.IsAuthenticated;
+ _httpRequestProcessor.HttpHandler.CookieContainer = data.Cookies;
}
public async Task> GetExploreFeedAsync(int maxPages = 0)
diff --git a/InstaSharper/Classes/Android/DeviceInfo/AndroidDevice.cs b/InstaSharper/Classes/Android/DeviceInfo/AndroidDevice.cs
index 6a1adbb0..2e3c1ee9 100644
--- a/InstaSharper/Classes/Android/DeviceInfo/AndroidDevice.cs
+++ b/InstaSharper/Classes/Android/DeviceInfo/AndroidDevice.cs
@@ -5,7 +5,6 @@ namespace InstaSharper.Classes.Android.DeviceInfo
[Serializable]
public class AndroidDevice
{
- public AndroidDevice() { }
public Guid PhoneGuid { get; set; }
public Guid DeviceGuid { get; set; }
public Guid GoogleAdId { get; set; } = Guid.NewGuid();
diff --git a/InstaSharper/Classes/Models/InstaUserShort.cs b/InstaSharper/Classes/Models/InstaUserShort.cs
index 138db7d3..6a51de42 100644
--- a/InstaSharper/Classes/Models/InstaUserShort.cs
+++ b/InstaSharper/Classes/Models/InstaUserShort.cs
@@ -1,5 +1,8 @@
+using System;
+
namespace InstaSharper.Classes.Models
{
+ [Serializable]
public class InstaUserShort
{
public bool IsVerified { get; set; }
diff --git a/InstaSharper/Classes/StateData.cs b/InstaSharper/Classes/StateData.cs
index d4fcd805..5c6402c9 100644
--- a/InstaSharper/Classes/StateData.cs
+++ b/InstaSharper/Classes/StateData.cs
@@ -1,17 +1,15 @@
using System;
-using System.Collections.Generic;
-using System.Text;
+using System.Net;
using InstaSharper.Classes.Android.DeviceInfo;
-using InstaSharper.Logger;
namespace InstaSharper.Classes
{
[Serializable]
- public class StateData
+ internal class StateData
{
- public StateData() { }
public AndroidDevice DeviceInfo { get; set; }
public UserSessionData UserSession { get; set; }
public bool IsAuthenticated { get; set; }
+ public CookieContainer Cookies { get; set; }
}
-}
+}
\ No newline at end of file
diff --git a/InstaSharper/Classes/UserSessionData.cs b/InstaSharper/Classes/UserSessionData.cs
index 77d477a9..5b11f2b8 100644
--- a/InstaSharper/Classes/UserSessionData.cs
+++ b/InstaSharper/Classes/UserSessionData.cs
@@ -6,7 +6,6 @@ namespace InstaSharper.Classes
[Serializable]
public class UserSessionData
{
- public UserSessionData() { }
public string UserName { get; set; }
public string Password { get; set; }
diff --git a/InstaSharper/Helpers/SerializationHelper.cs b/InstaSharper/Helpers/SerializationHelper.cs
new file mode 100644
index 00000000..8907798d
--- /dev/null
+++ b/InstaSharper/Helpers/SerializationHelper.cs
@@ -0,0 +1,24 @@
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+
+namespace InstaSharper.Helpers
+{
+ internal class SerializationHelper
+ {
+ public static MemoryStream SerializeToStream(object o)
+ {
+ var stream = new MemoryStream();
+ var formatter = new BinaryFormatter();
+ formatter.Serialize(stream, o);
+ return stream;
+ }
+
+ public static T DeserializeFromStream(Stream stream)
+ {
+ var formatter = new BinaryFormatter();
+ stream.Seek(0, SeekOrigin.Begin);
+ var fromStream = formatter.Deserialize(stream);
+ return (T) fromStream;
+ }
+ }
+}
\ No newline at end of file
diff --git a/InstaSharper/Logger/DebugLogger.cs b/InstaSharper/Logger/DebugLogger.cs
index 589e8560..9a47f56e 100644
--- a/InstaSharper/Logger/DebugLogger.cs
+++ b/InstaSharper/Logger/DebugLogger.cs
@@ -10,34 +10,45 @@ namespace InstaSharper.Logger
{
public class DebugLogger : IInstaLogger
{
+ private readonly LogLevel _logLevel;
+
+ public DebugLogger(LogLevel loglevel)
+ {
+ _logLevel = loglevel;
+ }
+
public void LogRequest(HttpRequestMessage request)
{
+ if (_logLevel < LogLevel.Request) return;
WriteSeprator();
Write($"Request: {request.Method} {request.RequestUri}");
WriteHeaders(request.Headers);
WriteProperties(request.Properties);
- WriteSeprator();
}
public void LogRequest(Uri uri)
{
+ if (_logLevel < LogLevel.Request) return;
Write($"Request: {uri}");
}
public void LogResponse(HttpResponseMessage response)
{
+ if (_logLevel < LogLevel.Response) return;
Write($"Response: {response.RequestMessage.Method} {response.RequestMessage.RequestUri}");
WriteContent(response.Content, Formatting.None, 0);
}
public void LogException(Exception ex)
{
+ if (_logLevel < LogLevel.Exceptions) return;
Console.WriteLine($"Exception: {ex}");
Console.WriteLine($"Stacktrace: {ex.StackTrace}");
}
public void LogInfo(string info)
{
+ if (_logLevel < LogLevel.Info) return;
Write($"Info:{Environment.NewLine}{info}");
}
@@ -47,7 +58,7 @@ private void WriteHeaders(HttpHeaders headers)
if (!headers.Any()) return;
Write("Headers:");
foreach (var item in headers)
- Console.WriteLine($"{item.Key}:{JsonConvert.SerializeObject(item.Value)}");
+ Write($"{item.Key}:{JsonConvert.SerializeObject(item.Value)}");
}
private void WriteProperties(IDictionary properties)
diff --git a/InstaSharper/Logger/LogLevel.cs b/InstaSharper/Logger/LogLevel.cs
new file mode 100644
index 00000000..c1ba3284
--- /dev/null
+++ b/InstaSharper/Logger/LogLevel.cs
@@ -0,0 +1,11 @@
+namespace InstaSharper.Logger
+{
+ public enum LogLevel
+ {
+ Exceptions = 0,
+ Info = 1,
+ Request = 2,
+ Response = 3,
+ All = 4
+ }
+}
\ No newline at end of file