refact.
This commit is contained in:
parent
cbed392dfd
commit
007b844185
283 changed files with 23194 additions and 590 deletions
33
ZicMoove/ZicMoove/Constants.Private.cs
Normal file
33
ZicMoove/ZicMoove/Constants.Private.cs
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace ZicMoove
|
||||
{
|
||||
public static partial class Constants
|
||||
{
|
||||
|
||||
public static readonly string AuthorizeUrl = YavscHomeUrl + "/authorize";
|
||||
public static readonly string AccessTokenUrl = YavscHomeUrl + "/token";
|
||||
public const string RedirectUrl = YavscHomeUrl + "/oauth/success";
|
||||
public static readonly string Scope = "profile";
|
||||
|
||||
public static readonly string YavscApiUrl = YavscHomeUrl + "/api";
|
||||
public static readonly string MobileRegistrationUrl = YavscApiUrl + "/gcm/register";
|
||||
public static readonly string UserInfoUrl = YavscApiUrl + "/me";
|
||||
public static readonly string BlogUrl = YavscApiUrl + "/blogs";
|
||||
public static readonly string FsUrl = YavscApiUrl + "/fs";
|
||||
public static readonly string SignalRHubsUrl = YavscHomeUrl + "/api/signalr/hubs";
|
||||
|
||||
public static int AllowBeATarget = 1;
|
||||
|
||||
public static int CloudTimeout = 400;
|
||||
|
||||
public const string PermissionMapReceive = Constants.ApplicationName + ".permission.MAPS_RECEIVE";
|
||||
public const string PermissionC2DMessage = Constants.ApplicationName + ".permission.C2D_MESSAGE";
|
||||
public const string ImagePath = "images";
|
||||
}
|
||||
}
|
||||
332
ZicMoove/ZicMoove/Settings/MainSettings.Private.cs
Normal file
332
ZicMoove/ZicMoove/Settings/MainSettings.Private.cs
Normal file
|
|
@ -0,0 +1,332 @@
|
|||
// Helpers/Settings.cs
|
||||
using Newtonsoft.Json;
|
||||
using Plugin.Settings;
|
||||
using Plugin.Settings.Abstractions;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
|
||||
namespace ZicMoove.Settings
|
||||
{
|
||||
using Model.Social;
|
||||
using Model.Auth.Account;
|
||||
using Model.Musical;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
/// <summary>
|
||||
/// This is the Settings static class that can be used in your Core solution or in any
|
||||
/// of your client applications. All settings are laid out the same exact way with getters
|
||||
/// and setters.
|
||||
/// </summary>
|
||||
public static partial class MainSettings
|
||||
{
|
||||
|
||||
public static ISettings AppSettings
|
||||
{
|
||||
get
|
||||
{
|
||||
return CrossSettings.Current;
|
||||
}
|
||||
}
|
||||
|
||||
#region Setting Constants
|
||||
public static readonly string SettingsDefault = string.Empty;
|
||||
public static readonly string EntityDataSettingsPrefix = Constants.YavscApiUrl;
|
||||
private const string userNameKey = "user_id";
|
||||
private const string PushNotificationsKey = "pushNotifs";
|
||||
private const string AllowGPSUsageKey = "allowGPSUsage";
|
||||
private const string UserListsKey = "userList";
|
||||
private const string GoogleRegIdKey = "googleRedId";
|
||||
private const string AllowProBookingOnlyKey = "allowProBookingOnly";
|
||||
|
||||
|
||||
private static readonly string UserIdDefault =
|
||||
string.Empty;
|
||||
private static readonly bool PushNotificationsDefault = false;
|
||||
|
||||
|
||||
private const string MusicalKey = "musical_prefs";
|
||||
private const string EnvironKey = "environ_prefs";
|
||||
private static readonly Dictionary<string, double> MusicalDefault =
|
||||
new Dictionary<string, double> {
|
||||
{ "Pop", 0.5 }, { "Hip Hop" , 0.5 }, { "Rock" , 0.5 }, { "Funk", 0.5 },
|
||||
{ "R&B", 0.5 }, { "Jazz", 0.5 }
|
||||
};
|
||||
private static readonly Dictionary<string, double> musical = new Dictionary<string, double>();
|
||||
private static readonly Dictionary<string, double> EnvironDefault =
|
||||
new Dictionary<string, double> {
|
||||
{ "Discothèque", 0.5 }, { "Salles de concert", 0.5 },
|
||||
{ "Piano bar", 0.5 }, { "Bar", 0.5 }, { "Cinema", 0.5 },
|
||||
{ "Théatre", 0.5 }, { "Salles des fêtes", 0.5 },
|
||||
{ "Espace publique", 0.5 }
|
||||
};
|
||||
private static readonly Dictionary<string, double> environ = new Dictionary<string, double>();
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
public static string UserName
|
||||
{
|
||||
get
|
||||
{
|
||||
return AppSettings.GetValueOrDefault<string>(userNameKey, null);
|
||||
}
|
||||
}
|
||||
public const string bookQueryNotificationsKey = "BookQueryNotifications";
|
||||
public static BookQuery[] GetBookQueryNotifications()
|
||||
{
|
||||
// Do not return any null List
|
||||
var json = AppSettings.GetValueOrDefault<string>(bookQueryNotificationsKey);
|
||||
if (!string.IsNullOrWhiteSpace(json))
|
||||
return JsonConvert.DeserializeObject<BookQuery[]>(json);
|
||||
return new BookQuery[] { };
|
||||
}
|
||||
|
||||
public static string GoogleRegId
|
||||
{
|
||||
set
|
||||
{
|
||||
var oldregid = GoogleRegId;
|
||||
AppSettings.AddOrUpdateValue<string>(GoogleRegIdKey, value);
|
||||
// TODO If it changed, and there's an identified user,
|
||||
// Inform the server of it.
|
||||
if (oldregid != value)
|
||||
{
|
||||
var dit = App.PostDeviceInfo();
|
||||
dit.Wait();
|
||||
if (dit.IsCompleted)
|
||||
{
|
||||
if (dit.Result)
|
||||
App.PlatformSpecificInstance.UpdateAppImages();
|
||||
}
|
||||
}
|
||||
}
|
||||
get { return AppSettings.GetValueOrDefault<string>(GoogleRegIdKey); }
|
||||
}
|
||||
|
||||
private static ObservableCollection<User> accountList = null;
|
||||
public static ObservableCollection<User> AccountList
|
||||
{
|
||||
get
|
||||
{
|
||||
if (accountList == null)
|
||||
{
|
||||
accountList = new ObservableCollection<User>();
|
||||
var json = AppSettings.GetValueOrDefault<string>
|
||||
(UserListsKey, null);
|
||||
if (json != null)
|
||||
{
|
||||
var users = JsonConvert.DeserializeObject<User[]>(json);
|
||||
if (users != null)
|
||||
foreach (User user in users)
|
||||
{
|
||||
accountList.Add(user);
|
||||
}
|
||||
}
|
||||
}
|
||||
return accountList;
|
||||
}
|
||||
}
|
||||
|
||||
public static User CurrentUser
|
||||
{
|
||||
get
|
||||
{
|
||||
var uname = UserName;
|
||||
if (uname == null) return null;
|
||||
return AccountList.Where(
|
||||
u => u.UserName == uname
|
||||
).FirstOrDefault();
|
||||
}
|
||||
set
|
||||
{
|
||||
var olduserid = CurrentUser?.Id;
|
||||
AppSettings.AddOrUpdateValue<string>(userNameKey, value?.UserName);
|
||||
// TODO if it changes, for a valid
|
||||
// ident, and we've got a GoogleRedId, inform the server
|
||||
// of it.
|
||||
if (value != null)
|
||||
{
|
||||
if (olduserid != value.Id)
|
||||
{
|
||||
App.PostDeviceInfo();
|
||||
if (UserChanged!=null)
|
||||
UserChanged.Invoke(App.Current, new EventArgs());
|
||||
}
|
||||
}
|
||||
else if (olduserid != null)
|
||||
{
|
||||
if (UserChanged != null)
|
||||
UserChanged.Invoke(App.Current, new EventArgs());
|
||||
// TODO else Unregister this device
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static event EventHandler<EventArgs> UserChanged;
|
||||
|
||||
/// <summary>
|
||||
/// Saves the given user account in the account list.
|
||||
/// An existent presenting the same Id will be dropped.
|
||||
/// </summary>
|
||||
/// <param name="user"></param>
|
||||
public static void SaveUser(User user)
|
||||
{
|
||||
var existent = AccountList.FirstOrDefault(u => u.Id == user.Id);
|
||||
if (existent != null)
|
||||
AccountList.Remove(existent);
|
||||
AccountList.Add(user);
|
||||
var json = JsonConvert.SerializeObject(AccountList.ToArray());
|
||||
AppSettings.AddOrUpdateValue(UserListsKey, json);
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets an account connection info, given its name
|
||||
/// </summary>
|
||||
/// <param name="username"></param>
|
||||
/// <returns></returns>
|
||||
public static User GetUser(string username)
|
||||
{
|
||||
return AccountList.FirstOrDefault(a => a.UserName == username);
|
||||
}
|
||||
|
||||
// FIXME real time usage
|
||||
/// <summary>
|
||||
/// Enables/disables push notifications
|
||||
/// </summary>
|
||||
public static bool PushNotifications
|
||||
{
|
||||
get
|
||||
{
|
||||
return AppSettings.GetValueOrDefault<bool>(
|
||||
PushNotificationsKey,
|
||||
PushNotificationsDefault);
|
||||
}
|
||||
set
|
||||
{
|
||||
// TODO Stop Broadcast receiver
|
||||
AppSettings.AddOrUpdateValue<bool>(
|
||||
PushNotificationsKey,
|
||||
value);
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME real time usage
|
||||
/// <summary>
|
||||
/// Enables/disables GPS usage
|
||||
/// </summary>
|
||||
public static bool AllowGPSUsage
|
||||
{
|
||||
get
|
||||
{
|
||||
return AppSettings.GetValueOrDefault<bool>(
|
||||
AllowGPSUsageKey,
|
||||
PushNotificationsDefault);
|
||||
}
|
||||
set
|
||||
{
|
||||
AppSettings.AddOrUpdateValue<bool>(
|
||||
AllowGPSUsageKey,
|
||||
value);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO make it a server side user's parameter
|
||||
/// <summary>
|
||||
/// Only allow professionals to ask for user's services
|
||||
/// </summary>
|
||||
public static bool AllowProBookingOnly
|
||||
{
|
||||
get
|
||||
{
|
||||
return AppSettings.GetValueOrDefault<bool>(
|
||||
AllowProBookingOnlyKey,
|
||||
PushNotificationsDefault);
|
||||
}
|
||||
set
|
||||
{
|
||||
AppSettings.AddOrUpdateValue<bool>(
|
||||
AllowProBookingOnlyKey,
|
||||
value);
|
||||
}
|
||||
}
|
||||
public static void SetMusical(string key, double value)
|
||||
{
|
||||
AppSettings.AddOrUpdateValue<double>(MusicalKey + key, value);
|
||||
}
|
||||
|
||||
public static double GetMusical(string key)
|
||||
{
|
||||
return AppSettings.GetValueOrDefault<double>(MusicalKey + key, MusicalDefault[key]);
|
||||
}
|
||||
|
||||
public static Dictionary<string, double> Musical
|
||||
{
|
||||
get
|
||||
{
|
||||
return musical;
|
||||
}
|
||||
}
|
||||
|
||||
public static Dictionary<string, double> Environ
|
||||
{
|
||||
get
|
||||
{
|
||||
return environ;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Use a sub-key to make persist different tables with the same definition.
|
||||
/// </summary>
|
||||
/// <typeparam name="V"></typeparam>
|
||||
/// <param name="collection"></param>
|
||||
/// <param name="subKey"></param>
|
||||
public static bool Populate<V,K>(this ILocalEntity<V, K> collection, string subKey = null) where K : IEquatable<K>
|
||||
{
|
||||
var key = GetCollectionKey<V>(subKey);
|
||||
var data = AppSettings.GetValueOrDefault<string>(key, null);
|
||||
if (!string.IsNullOrWhiteSpace(data))
|
||||
{
|
||||
var items = JsonConvert.DeserializeObject<IList<V>>(data);
|
||||
if (items != null)
|
||||
foreach (var item in items)
|
||||
collection.Add(item);
|
||||
var cursorKey = GetCursorKey<V>(subKey);
|
||||
var index = AppSettings.GetValueOrDefault<int>(cursorKey, -1);
|
||||
if (index>=0)
|
||||
{
|
||||
collection.Seek(index);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Saves a list
|
||||
/// </summary>
|
||||
/// <typeparam name="V"></typeparam>
|
||||
/// <param name="collection"></param>
|
||||
/// <param name="subKey"></param>
|
||||
public static void SaveEntity<V,K>(this ILocalEntity<V, K> collection, string subKey=null) where K : IEquatable<K>
|
||||
{
|
||||
if (collection == null) return;
|
||||
var key = GetCollectionKey<V>(subKey);
|
||||
var cursorKey = GetCursorKey<V>(subKey);
|
||||
AppSettings.AddOrUpdateValue(key, JsonConvert.SerializeObject(collection));
|
||||
if (collection.CurrentItem!=null)
|
||||
{
|
||||
int index = collection.IndexOf(collection.CurrentItem) ;
|
||||
AppSettings.AddOrUpdateValue<int>(cursorKey, index);
|
||||
}
|
||||
}
|
||||
private static string GetCursorKey<V>(string subKey)
|
||||
{
|
||||
return $"{EntityDataSettingsPrefix}/{subKey}/{typeof(V).FullName}/c";
|
||||
}
|
||||
private static string GetCollectionKey<V>(string subKey)
|
||||
{
|
||||
return $"{EntityDataSettingsPrefix}/{subKey}/{typeof(V).FullName}";
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue