Compare commits
2 commits
908f126987
...
fd0300fccb
Author | SHA1 | Date | |
---|---|---|---|
fd0300fccb | |||
1b0155d064 |
52 changed files with 134 additions and 182 deletions
|
@ -1,8 +1,5 @@
|
|||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using Neighbourhood.omg.lol.Models;
|
||||
using System.Security.Claims;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Neighbourhood.omg.lol {
|
||||
public class CustomAuthenticationStateProvider : AuthenticationStateProvider {
|
5
Classes/FeatureFlags.cs
Normal file
5
Classes/FeatureFlags.cs
Normal file
|
@ -0,0 +1,5 @@
|
|||
namespace Neighbourhood.omg.lol {
|
||||
public static class FeatureFlags {
|
||||
public static bool Following { get; } = false;
|
||||
}
|
||||
}
|
7
Classes/NavigatorService.cs
Normal file
7
Classes/NavigatorService.cs
Normal file
|
@ -0,0 +1,7 @@
|
|||
using Microsoft.AspNetCore.Components;
|
||||
|
||||
namespace Neighbourhood.omg.lol {
|
||||
public class NavigatorService {
|
||||
internal NavigationManager? NavigationManager { get; set; }
|
||||
}
|
||||
}
|
|
@ -1,17 +1,15 @@
|
|||
using Markdig;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components.Forms;
|
||||
using Neighbourhood.omg.lol.Models;
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
using System.Net.Http.Json;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace Neighbourhood.omg.lol {
|
||||
public class RestService {
|
||||
namespace Neighbourhood.omg.lol
|
||||
{
|
||||
public class RestService {
|
||||
HttpClient _client;
|
||||
JsonSerializerOptions _serializerOptions;
|
||||
public const string BaseUrl = "https://api.omg.lol";
|
|
@ -2,11 +2,21 @@
|
|||
using System.ComponentModel;
|
||||
using System.Globalization;
|
||||
using System.Text.Json;
|
||||
using Neighbourhood.omg.lol.Models;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
namespace Neighbourhood.omg.lol.Models {
|
||||
namespace Neighbourhood.omg.lol {
|
||||
public class State : INotifyPropertyChanged {
|
||||
// Feature flags
|
||||
public bool FeatureFollowing { get; } = false;
|
||||
|
||||
// Events
|
||||
public event EventHandler<EventArgs>? IntentReceived;
|
||||
public event PropertyChangedEventHandler? PropertyChanged;
|
||||
|
||||
// Create the OnPropertyChanged method to raise the event
|
||||
// The calling member's name will be used as the parameter.
|
||||
protected void OnPropertyChanged([CallerMemberName] string? name = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
|
||||
protected void OnIntentRecieved() => IntentReceived?.Invoke(this, EventArgs.Empty);
|
||||
|
||||
// Main data lists
|
||||
public List<Status>? Statuses { get; set; }
|
||||
public List<Pic>? Pics { get; set; }
|
||||
|
@ -42,6 +52,7 @@ namespace Neighbourhood.omg.lol.Models {
|
|||
else {
|
||||
string selectedAddressJson = JsonSerializer.Serialize(_selectedAddress);
|
||||
Preferences.Default.Set("selectedaddress", selectedAddressJson);
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -68,13 +79,12 @@ namespace Neighbourhood.omg.lol.Models {
|
|||
}
|
||||
|
||||
// share intent stuff
|
||||
public event EventHandler<EventArgs>? IntentReceived;
|
||||
private string? _shareString;
|
||||
public string? ShareString {
|
||||
get => _shareString;
|
||||
set {
|
||||
_shareString = value;
|
||||
IntentReceived?.Invoke(this, EventArgs.Empty);
|
||||
OnIntentRecieved();
|
||||
}
|
||||
}
|
||||
public string? ShareStringSubject { get; set; }
|
||||
|
@ -84,7 +94,7 @@ namespace Neighbourhood.omg.lol.Models {
|
|||
get => _sharePhoto;
|
||||
set {
|
||||
_sharePhoto = value;
|
||||
IntentReceived?.Invoke(this, EventArgs.Empty);
|
||||
OnIntentRecieved();
|
||||
}
|
||||
}
|
||||
public long? SharePhotoSize { get; set; }
|
||||
|
@ -92,13 +102,12 @@ namespace Neighbourhood.omg.lol.Models {
|
|||
public string? SharePhotoText { get; set; }
|
||||
|
||||
// refreshing
|
||||
public event PropertyChangedEventHandler? PropertyChanged;
|
||||
private bool _isRefreshing;
|
||||
public bool IsRefreshing {
|
||||
get => _isRefreshing;
|
||||
private set {
|
||||
_isRefreshing = value;
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsRefreshing)));
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -132,7 +141,7 @@ namespace Neighbourhood.omg.lol.Models {
|
|||
get => _canRefresh;
|
||||
set {
|
||||
_canRefresh = value;
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CanRefresh)));
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -178,12 +187,14 @@ namespace Neighbourhood.omg.lol.Models {
|
|||
}
|
||||
|
||||
public async Task RemoveAccountDetails() {
|
||||
Preferences.Default.Clear();
|
||||
AccountInfo = null;
|
||||
AddressList = null;
|
||||
SelectedAddress = null;
|
||||
Following = null;
|
||||
api.RemoveToken();
|
||||
await Task.Run(() => {
|
||||
Preferences.Default.Clear();
|
||||
AccountInfo = null;
|
||||
AddressList = null;
|
||||
SelectedAddress = null;
|
||||
Following = null;
|
||||
api.RemoveToken();
|
||||
});
|
||||
}
|
||||
|
||||
public bool IsFollowing(string address) => Following?.Contains(address) ?? false;
|
||||
|
@ -217,7 +228,7 @@ namespace Neighbourhood.omg.lol.Models {
|
|||
public async Task<List<string>?> GetDirectory(bool forceRefresh = false) {
|
||||
if (forceRefresh || this.AddressDirectory == null || this.AddressDirectory.Count == 0) {
|
||||
IdnMapping idn = new IdnMapping();
|
||||
this.AddressDirectory = (await api.Directory()).Select(s => {
|
||||
this.AddressDirectory = (await api.Directory())?.Select(s => {
|
||||
if (s.StartsWith("xn--")) return idn.GetUnicode(s);
|
||||
else return s;
|
||||
}).ToList();
|
51
Classes/Utilities.cs
Normal file
51
Classes/Utilities.cs
Normal file
|
@ -0,0 +1,51 @@
|
|||
using Markdig;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
|
||||
namespace Neighbourhood.omg.lol
|
||||
{
|
||||
public static class Utilities
|
||||
{
|
||||
|
||||
private static MarkdownPipeline markdownPipeline { get; }
|
||||
= new MarkdownPipelineBuilder().UseAutoLinks().Build();
|
||||
|
||||
public static string MdToHtml(string markdown) =>
|
||||
Markdown.ToHtml(markdown, markdownPipeline);
|
||||
|
||||
public static MarkupString MdToHtmlMarkup(string markdown) =>
|
||||
(MarkupString)MdToHtml(markdown);
|
||||
|
||||
public static async Task<long> FileSize(FileResult file)
|
||||
{
|
||||
using var fileStream = await file.OpenReadAsync();
|
||||
return fileStream.Length;
|
||||
}
|
||||
|
||||
public static async Task<string> Base64FromFile(FileResult file)
|
||||
{
|
||||
using var memoryStream = new MemoryStream();
|
||||
using var fileStream = await file.OpenReadAsync();
|
||||
await fileStream.CopyToAsync(memoryStream);
|
||||
byte[] bytes = memoryStream.ToArray();
|
||||
return Convert.ToBase64String(bytes);
|
||||
}
|
||||
|
||||
public static string RelativeTimeFromUnix(long unix)
|
||||
{
|
||||
DateTimeOffset createdTime = DateTimeOffset.UnixEpoch.AddSeconds(unix);
|
||||
TimeSpan offset = DateTimeOffset.UtcNow - createdTime;
|
||||
|
||||
var offsetString = string.Empty;
|
||||
if (Math.Floor(offset.TotalDays) == 1) offsetString = $"{Math.Floor(offset.TotalDays)} day ago";
|
||||
else if (offset.TotalDays > 1) offsetString = $"{Math.Floor(offset.TotalDays)} days ago";
|
||||
else if (Math.Floor(offset.TotalHours) == 1) offsetString = $"{Math.Floor(offset.TotalHours)} hour ago";
|
||||
else if (offset.TotalHours > 1) offsetString = $"{Math.Floor(offset.TotalHours)} hours ago";
|
||||
else if (Math.Floor(offset.TotalMinutes) == 1) offsetString = $"{Math.Floor(offset.TotalMinutes)} minute ago";
|
||||
else if (offset.TotalMinutes > 1) offsetString = $"{Math.Floor(offset.TotalMinutes)} minutes ago";
|
||||
else if (Math.Floor(offset.TotalSeconds) == 1) offsetString = $"{Math.Floor(offset.TotalSeconds)} second ago";
|
||||
else offsetString = $"{Math.Floor(offset.TotalSeconds)} seconds ago";
|
||||
|
||||
return offsetString;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -32,7 +32,7 @@
|
|||
</a>
|
||||
}
|
||||
}
|
||||
@if (State.FeatureFollowing && State.IsAuthorized) {
|
||||
@if (FeatureFlags.Following && State.IsAuthorized) {
|
||||
<a class="m s row" href="/feed">
|
||||
<i class="square fa-solid fa-list-timeline"></i>
|
||||
<span>Feed</span>
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<i class="square fa-duotone fa-address-book"></i>
|
||||
<div class="label">Address Directory</div>
|
||||
</NavLink>
|
||||
@if (State.FeatureFollowing) {
|
||||
@if (FeatureFlags.Following) {
|
||||
<AuthorizeView>
|
||||
<Authorized>
|
||||
<NavLink class="l nav-link" href="/feed">
|
||||
|
|
|
@ -11,8 +11,7 @@
|
|||
<div class="row center-align">
|
||||
<img class="profile avatar" src="https://profiles.cache.lol/@Address/picture" alt="@Address" />
|
||||
</div>
|
||||
@if (State.FeatureFollowing)
|
||||
{
|
||||
@if (FeatureFlags.Following) {
|
||||
<div class="row center-align">
|
||||
@if (State.IsFollowing(Address)) {
|
||||
<button id="follow-button" @onclick="() => {State.Unfollow(Address);InvokeAsync(StateHasChanged);}">
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="Neighbourhood.omg.lol.EphemeralWebPage"
|
||||
BackgroundColor="{DynamicResource PageBackgroundColor}">
|
||||
<Grid>
|
||||
<WebView x:Name="webview"
|
||||
Navigating="webview_Navigating"
|
||||
VerticalOptions="Fill"
|
||||
HorizontalOptions="Fill" />
|
||||
</Grid>
|
||||
</ContentPage>
|
|
@ -1,18 +0,0 @@
|
|||
namespace Neighbourhood.omg.lol;
|
||||
|
||||
public partial class EphemeralWebPage : ContentPage
|
||||
{
|
||||
private NavigatorService NavigatorService { get; set; }
|
||||
|
||||
public EphemeralWebPage(NavigatorService navigatorService)
|
||||
{
|
||||
this.NavigatorService = navigatorService;
|
||||
InitializeComponent();
|
||||
this.webview.Source = $"https://home.omg.lol/ephemeral";
|
||||
}
|
||||
|
||||
public async void webview_Navigating(object sender, WebNavigatingEventArgs e) {
|
||||
var cookies = this.webview.Cookies;
|
||||
Uri uri = new Uri(e.Url);
|
||||
}
|
||||
}
|
|
@ -1,9 +1,6 @@
|
|||
using Markdig;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Neighbourhood.omg.lol.Models;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Neighbourhood.omg.lol {
|
||||
public static class MauiProgram {
|
||||
|
@ -17,20 +14,12 @@ namespace Neighbourhood.omg.lol {
|
|||
|
||||
builder.Services.AddMauiBlazorWebView();
|
||||
builder.Services.AddTransient<LoginWebViewPage>();
|
||||
builder.Services.AddTransient<EphemeralWebPage>();
|
||||
|
||||
builder.Services.AddSingleton<RestService>();
|
||||
builder.Services.AddSingleton<State>();
|
||||
builder.Services.AddSingleton<NavigatorService>();
|
||||
|
||||
//ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
|
||||
//builder.Services.AddSingleton<IConfiguration>(configurationBuilder.AddUserSecrets<App>().Build());
|
||||
var assembly = Assembly.GetExecutingAssembly();
|
||||
var details = assembly.GetName();
|
||||
App.Name = details.Name!;
|
||||
App.Version = details.Version!.ToString();
|
||||
var appSettings = $"{App.Name}.appsettings.json";
|
||||
using var stream = assembly.GetManifestResourceStream(appSettings);
|
||||
using Stream stream = App.Assembly.GetManifestResourceStream($"{App.Name}.appsettings.json")!;
|
||||
var config = new ConfigurationBuilder().AddJsonStream(stream).Build();
|
||||
builder.Configuration.AddConfiguration(config);
|
||||
|
||||
|
|
|
@ -1,11 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Neighbourhood.omg.lol.Models {
|
||||
public class NowData {
|
||||
namespace Neighbourhood.omg.lol.Models
|
||||
{
|
||||
public class NowData {
|
||||
public string Address { get; set; }
|
||||
public string Url { get; set; }
|
||||
public TimeData Updated { get; set; }
|
|
@ -1,15 +1,9 @@
|
|||
using Markdig;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Neighbourhood.omg.lol.Models {
|
||||
public class Pic {
|
||||
namespace Neighbourhood.omg.lol.Models
|
||||
{
|
||||
public class Pic {
|
||||
public string Id { get; set; }
|
||||
public string Url { get; set; }
|
||||
public string Address { get; set; }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
using Markdig;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
|
||||
namespace Neighbourhood.omg.lol.Models {
|
||||
public class Status {
|
||||
namespace Neighbourhood.omg.lol.Models
|
||||
{
|
||||
public class Status {
|
||||
public string Id { get; set; }
|
||||
public string Address { get; set; }
|
||||
public string Created { get; set; }
|
||||
|
|
|
@ -1,51 +0,0 @@
|
|||
using Markdig;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Neighbourhood.omg.lol {
|
||||
public static class Utilities {
|
||||
|
||||
private static MarkdownPipeline markdownPipeline { get; }
|
||||
= new MarkdownPipelineBuilder().UseAutoLinks().Build();
|
||||
|
||||
public static string MdToHtml(string markdown) =>
|
||||
Markdown.ToHtml(markdown, markdownPipeline);
|
||||
|
||||
public static MarkupString MdToHtmlMarkup(string markdown) =>
|
||||
(MarkupString)MdToHtml(markdown);
|
||||
|
||||
public static async Task<long> FileSize(FileResult file) {
|
||||
using var fileStream = await file.OpenReadAsync();
|
||||
return fileStream.Length;
|
||||
}
|
||||
|
||||
public static async Task<string> Base64FromFile(FileResult file) {
|
||||
using var memoryStream = new MemoryStream();
|
||||
using var fileStream = await file.OpenReadAsync();
|
||||
await fileStream.CopyToAsync(memoryStream);
|
||||
byte[] bytes = memoryStream.ToArray();
|
||||
return Convert.ToBase64String(bytes);
|
||||
}
|
||||
|
||||
public static string RelativeTimeFromUnix(long unix) {
|
||||
DateTimeOffset createdTime = DateTimeOffset.UnixEpoch.AddSeconds(unix);
|
||||
TimeSpan offset = DateTimeOffset.UtcNow - createdTime;
|
||||
|
||||
var offsetString = string.Empty;
|
||||
if (Math.Floor(offset.TotalDays) == 1) offsetString = $"{Math.Floor(offset.TotalDays)} day ago";
|
||||
else if (offset.TotalDays > 1) offsetString = $"{Math.Floor(offset.TotalDays)} days ago";
|
||||
else if (Math.Floor(offset.TotalHours) == 1) offsetString = $"{Math.Floor(offset.TotalHours)} hour ago";
|
||||
else if (offset.TotalHours > 1) offsetString = $"{Math.Floor(offset.TotalHours)} hours ago";
|
||||
else if (Math.Floor(offset.TotalMinutes) == 1) offsetString = $"{Math.Floor(offset.TotalMinutes)} minute ago";
|
||||
else if (offset.TotalMinutes > 1) offsetString = $"{Math.Floor(offset.TotalMinutes)} minutes ago";
|
||||
else if (Math.Floor(offset.TotalSeconds) == 1) offsetString = $"{Math.Floor(offset.TotalSeconds)} second ago";
|
||||
else offsetString = $"{Math.Floor(offset.TotalSeconds)} seconds ago";
|
||||
|
||||
return offsetString;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
using Microsoft.AspNetCore.Components;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Neighbourhood.omg.lol {
|
||||
public class NavigatorService {
|
||||
internal NavigationManager NavigationManager { get; set; }
|
||||
}
|
||||
}
|
|
@ -241,13 +241,10 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<MauiXaml Update="AppShell.xaml">
|
||||
<MauiXaml Update="XamlComponents\AppShell.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</MauiXaml>
|
||||
<MauiXaml Update="EphemeralWebPage.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</MauiXaml>
|
||||
<MauiXaml Update="LoginWebViewPage.xaml">
|
||||
<MauiXaml Update="XamlComponents\LoginWebViewPage.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</MauiXaml>
|
||||
</ItemGroup>
|
||||
|
|
|
@ -2,10 +2,9 @@
|
|||
using Android.App;
|
||||
using Android.Content;
|
||||
using Android.Content.PM;
|
||||
using Android.Net;
|
||||
using Android.OS;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Neighbourhood.omg.lol.Models;
|
||||
using Android.Views;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Neighbourhood.omg.lol {
|
||||
[Activity(Exported = true, Theme = "@style/Maui.SplashTheme", LaunchMode = LaunchMode.SingleTop, MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
|
||||
|
@ -13,14 +12,13 @@ namespace Neighbourhood.omg.lol {
|
|||
[IntentFilter([Intent.ActionSend], Categories = [Intent.CategoryDefault], DataMimeType = "*/*")]
|
||||
public class MainActivity : MauiAppCompatActivity {
|
||||
|
||||
protected override void OnCreate(Bundle savedInstanceState) {
|
||||
protected override void OnCreate(Bundle? savedInstanceState) {
|
||||
base.OnCreate(savedInstanceState);
|
||||
|
||||
// In case the app was opened (on first load) with an `ActionView` intent
|
||||
OnNewIntent(this.Intent);
|
||||
}
|
||||
|
||||
|
||||
protected override void OnNewIntent(Intent? intent) {
|
||||
base.OnNewIntent(intent);
|
||||
if (intent != null && intent.Type != null) {
|
||||
|
@ -37,9 +35,13 @@ namespace Neighbourhood.omg.lol {
|
|||
else if (intent.Type.StartsWith("image/")) //image
|
||||
{
|
||||
string? shareString = intent.GetStringExtra(Intent.ExtraText);
|
||||
var extra = intent.GetParcelableExtra(Intent.ExtraStream);
|
||||
Java.Lang.Object? extra;
|
||||
if (OperatingSystem.IsAndroidVersionAtLeast(33))
|
||||
extra = intent.GetParcelableExtra(Intent.ExtraStream, Java.Lang.Class.FromType(typeof(Android.Net.Uri)));
|
||||
else extra = intent.GetParcelableExtra(Intent.ExtraStream);
|
||||
|
||||
if (extra is Android.Net.Uri) {
|
||||
Stream? stream = ContentResolver?.OpenInputStream(extra as Android.Net.Uri);
|
||||
Stream? stream = ContentResolver?.OpenInputStream((Android.Net.Uri)extra);
|
||||
byte[] bytes = new byte[stream?.Length ?? 0];
|
||||
stream?.Read(bytes, 0, bytes.Length);
|
||||
string base64String = Convert.ToBase64String(bytes);
|
||||
|
@ -52,9 +54,13 @@ namespace Neighbourhood.omg.lol {
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (intent.Type.Equals(Intent.ActionSendMultiple)) //Multiple file
|
||||
else if (intent.Type.Equals(Intent.ActionSendMultiple)) //Multiple files
|
||||
{
|
||||
var uriList = intent.GetParcelableArrayListExtra(Intent.ExtraStream);
|
||||
// TODO: we don't really support this at the moment.
|
||||
//System.Collections.IList? uriList;
|
||||
//if (OperatingSystem.IsAndroidVersionAtLeast(33))
|
||||
// uriList = intent.GetParcelableArrayListExtra(Intent.ExtraStream, Java.Lang.Class.FromType(typeof(Android.Net.Uri)));
|
||||
//else uriList = intent.GetParcelableArrayListExtra(Intent.ExtraStream);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,15 @@
|
|||
namespace Neighbourhood.omg.lol {
|
||||
using System.Reflection;
|
||||
|
||||
namespace Neighbourhood.omg.lol {
|
||||
public partial class App : Application {
|
||||
|
||||
public static string Name { get; set; }
|
||||
public static string Version { get; set; }
|
||||
public static Assembly Assembly { get; } = Assembly.GetExecutingAssembly();
|
||||
public static string Name { get; } = App.Assembly.GetName().Name!;
|
||||
public static string Version { get; } = App.Assembly.GetName().Version!.ToString();
|
||||
|
||||
public App(NavigatorService navigatorService) {
|
||||
InitializeComponent();
|
||||
|
||||
//MainPage = new AppShell();
|
||||
NavigatorService = navigatorService;
|
||||
}
|
||||
|
|
@ -7,6 +7,5 @@ public partial class AppShell : Shell
|
|||
InitializeComponent();
|
||||
|
||||
Routing.RegisterRoute(nameof(LoginWebViewPage), typeof(LoginWebViewPage));
|
||||
Routing.RegisterRoute(nameof(EphemeralWebPage), typeof(EphemeralWebPage));
|
||||
}
|
||||
}
|
|
@ -1,6 +1,4 @@
|
|||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using System.Diagnostics;
|
||||
using System.Web;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
|
|
@ -1,7 +1,4 @@
|
|||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components.WebView;
|
||||
using Microsoft.AspNetCore.Components.WebView.Maui;
|
||||
using System.Diagnostics;
|
||||
using Microsoft.AspNetCore.Components.WebView;
|
||||
|
||||
namespace Neighbourhood.omg.lol {
|
||||
public partial class MainPage : ContentPage {
|
Loading…
Reference in a new issue