rename from Pixiview to Gallery
This commit is contained in:
257
Gallery/App.cs
Executable file
257
Gallery/App.cs
Executable file
@@ -0,0 +1,257 @@
|
||||
using System;
|
||||
#if DEBUG
|
||||
using System.Diagnostics;
|
||||
#endif
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using Gallery.Illust;
|
||||
using Gallery.Resources;
|
||||
using Gallery.UI.Theme;
|
||||
using Gallery.Utils;
|
||||
using Xamarin.Essentials;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace Gallery
|
||||
{
|
||||
public class App : Application
|
||||
{
|
||||
// public properties
|
||||
public static AppTheme CurrentTheme { get; private set; }
|
||||
public static PlatformCulture CurrentCulture { get; private set; }
|
||||
|
||||
public App()
|
||||
{
|
||||
Device.SetFlags(new string[0]);
|
||||
}
|
||||
|
||||
private void InitResources()
|
||||
{
|
||||
var theme = AppInfo.RequestedTheme;
|
||||
SetTheme(theme, true);
|
||||
}
|
||||
|
||||
private void InitPreferences()
|
||||
{
|
||||
Configs.SetCookie(Preferences.Get(Configs.CookieKey, null));
|
||||
Configs.SetUserId(Preferences.Get(Configs.UserIdKey, null));
|
||||
|
||||
Configs.DownloadIllustThreads = Preferences.Get(Configs.DownloadIllustThreadsKey, 1);
|
||||
Configs.IsOnR18 = Preferences.Get(Configs.IsOnR18Key, false);
|
||||
Configs.SyncFavType = (SyncType)Preferences.Get(Configs.SyncFavTypeKey, 0);
|
||||
var isProxied = Preferences.Get(Configs.IsProxiedKey, false);
|
||||
if (isProxied)
|
||||
{
|
||||
var host = Preferences.Get(Configs.HostKey, string.Empty);
|
||||
int port = Preferences.Get(Configs.PortKey, 0);
|
||||
if (!string.IsNullOrEmpty(host) && port > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (host.IndexOf(':') >= 0)
|
||||
{
|
||||
host = $"[{host}]";
|
||||
}
|
||||
var uri = new Uri($"http://{host}:{port}");
|
||||
Configs.Proxy = new System.Net.WebProxy(uri, true);
|
||||
#if LOG
|
||||
DebugPrint($"load proxy: {host}:{port}");
|
||||
#endif
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
DebugError("init.preferences", $"failed to parse proxy: {host}:{port}, error: {ex.Message}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Configs.Proxy = null;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Configs.Proxy = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void InitLanguage()
|
||||
{
|
||||
var ci = EnvironmentService.GetCurrentCultureInfo();
|
||||
EnvironmentService.SetCultureInfo(ci);
|
||||
CurrentCulture = new PlatformCulture(ci.Name.ToLower());
|
||||
}
|
||||
|
||||
private void SetTheme(AppTheme theme, bool force = false)
|
||||
{
|
||||
if (force || theme != CurrentTheme)
|
||||
{
|
||||
CurrentTheme = theme;
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
#if LOG
|
||||
DebugPrint($"application theme: {theme}");
|
||||
#endif
|
||||
ThemeBase themeInstance;
|
||||
if (theme == AppTheme.Dark)
|
||||
{
|
||||
themeInstance = DarkTheme.Instance;
|
||||
}
|
||||
else
|
||||
{
|
||||
themeInstance = LightTheme.Instance;
|
||||
}
|
||||
#if __IOS__
|
||||
var style = (StatusBarStyles)themeInstance[ThemeBase.StatusBarStyle];
|
||||
EnvironmentService.SetStatusBarStyle(style);
|
||||
#elif __ANDROID__
|
||||
var color = (Color)themeInstance[ThemeBase.NavColor];
|
||||
EnvironmentService.SetStatusBarColor(color);
|
||||
#endif
|
||||
Resources = themeInstance;
|
||||
}
|
||||
|
||||
protected override void OnStart()
|
||||
{
|
||||
InitLanguage();
|
||||
MainPage = new AppShell();
|
||||
|
||||
InitResources();
|
||||
InitPreferences();
|
||||
}
|
||||
|
||||
protected override void OnSleep()
|
||||
{
|
||||
base.OnSleep();
|
||||
}
|
||||
|
||||
protected override void OnResume()
|
||||
{
|
||||
var theme = AppInfo.RequestedTheme;
|
||||
SetTheme(theme);
|
||||
}
|
||||
#if DEBUG
|
||||
public static void DebugPrint(string message)
|
||||
{
|
||||
Debug.WriteLine("[{0:HH:mm:ss.ffff}] - {1}", DateTime.Now, message);
|
||||
}
|
||||
public static void DebugError(string category, string message)
|
||||
{
|
||||
Debug.Fail(string.Format("[{0:HH:mm:ss.ffff}] - {1} - {2}", DateTime.Now, category, message));
|
||||
}
|
||||
#else
|
||||
public static void DebugPrint(string message)
|
||||
{
|
||||
Console.WriteLine("[Debug.Print] - {0}", message);
|
||||
}
|
||||
public static void DebugError(string category, string message)
|
||||
{
|
||||
Console.Error.WriteLine(string.Format("[Debug.Error] - {0} - {1}", category, message));
|
||||
}
|
||||
#endif
|
||||
public static bool OpenUrl(Uri uri)
|
||||
{
|
||||
var current = Current.MainPage;
|
||||
if (current != null && uri != null)
|
||||
{
|
||||
var url = uri.AbsolutePath;
|
||||
if ("gallery".Equals(uri.Scheme, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var m = Regex.Match(url, "/artworks/([0-9]+)", RegexOptions.IgnoreCase);
|
||||
if (m.Success)
|
||||
{
|
||||
var illust = new IllustItem { Id = m.Groups[1].Value };
|
||||
var page = new ViewIllustPage(illust);
|
||||
MainThread.BeginInvokeOnMainThread(() => current.Navigation.PushAsync(page));
|
||||
}
|
||||
else
|
||||
{
|
||||
MainThread.BeginInvokeOnMainThread(() => current.DisplayAlert(
|
||||
url,
|
||||
ResourceHelper.InvalidUrl,
|
||||
ResourceHelper.Ok));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
url = System.Net.WebUtility.UrlDecode(url);
|
||||
if (File.Exists(url))
|
||||
{
|
||||
IllustFavorite favObj;
|
||||
try
|
||||
{
|
||||
favObj = Stores.LoadFavoritesIllusts(url);
|
||||
foreach (var o in favObj.Illusts)
|
||||
{
|
||||
o.BookmarkId = null;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
DebugError("open.file", $"failed to parse file, name: {url}, error: {ex.Message}");
|
||||
return true;
|
||||
}
|
||||
var path = Stores.FavoritesPath;
|
||||
if (url == path)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (File.Exists(path))
|
||||
{
|
||||
MainThread.BeginInvokeOnMainThread(async () =>
|
||||
{
|
||||
var opReplace = ResourceHelper.FavoritesReplace;
|
||||
var opCombine = ResourceHelper.FavoritesCombine;
|
||||
var result = await current.DisplayActionSheet(
|
||||
ResourceHelper.FavoritesOperation,
|
||||
ResourceHelper.Cancel,
|
||||
opCombine,
|
||||
opReplace);
|
||||
if (result == opReplace)
|
||||
{
|
||||
// replace favorite file
|
||||
File.Copy(url, path, true);
|
||||
}
|
||||
else if (result == opCombine)
|
||||
{
|
||||
// combine favorite file
|
||||
var favNow = Stores.GetFavoriteObject();
|
||||
var list = favNow.Illusts;
|
||||
var distinct = favObj.Illusts.Where(f => !list.Any(i => i.Id == f.Id)).ToList();
|
||||
list.InsertRange(0, distinct);
|
||||
|
||||
//favNow.Illusts = list;
|
||||
Stores.SaveFavoritesIllusts();
|
||||
}
|
||||
|
||||
if (Shell.Current.CurrentState.Location.OriginalString.EndsWith(Routes.Favorites))
|
||||
{
|
||||
var sc = (IShellSectionController)Shell.Current.CurrentItem.CurrentItem;
|
||||
if (sc.PresentedPage is FavoritesPage fav)
|
||||
{
|
||||
fav.Reload(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
File.Copy(url, path);
|
||||
if (Shell.Current.CurrentState.Location.OriginalString.EndsWith(Routes.Favorites))
|
||||
{
|
||||
var sc = (IShellSectionController)Shell.Current.CurrentItem.CurrentItem;
|
||||
if (sc.PresentedPage is FavoritesPage fav)
|
||||
{
|
||||
fav.Reload(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user