More reorg, cleaning up some warnings
This commit is contained in:
parent
1b0155d064
commit
fd0300fccb
10 changed files with 50 additions and 48 deletions
|
@ -1,8 +1,5 @@
|
||||||
using Microsoft.AspNetCore.Components.Authorization;
|
using Microsoft.AspNetCore.Components.Authorization;
|
||||||
using Neighbourhood.omg.lol.Models;
|
|
||||||
using System.Security.Claims;
|
using System.Security.Claims;
|
||||||
using System.Text.Json;
|
|
||||||
using System.Text.Json.Serialization;
|
|
||||||
|
|
||||||
namespace Neighbourhood.omg.lol {
|
namespace Neighbourhood.omg.lol {
|
||||||
public class CustomAuthenticationStateProvider : AuthenticationStateProvider {
|
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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,12 +1,7 @@
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Neighbourhood.omg.lol {
|
namespace Neighbourhood.omg.lol {
|
||||||
public class NavigatorService {
|
public class NavigatorService {
|
||||||
internal NavigationManager NavigationManager { get; set; }
|
internal NavigationManager? NavigationManager { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,11 +3,20 @@ using System.ComponentModel;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using Neighbourhood.omg.lol.Models;
|
using Neighbourhood.omg.lol.Models;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
namespace Neighbourhood.omg.lol {
|
namespace Neighbourhood.omg.lol {
|
||||||
public class State : INotifyPropertyChanged {
|
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
|
// Main data lists
|
||||||
public List<Status>? Statuses { get; set; }
|
public List<Status>? Statuses { get; set; }
|
||||||
public List<Pic>? Pics { get; set; }
|
public List<Pic>? Pics { get; set; }
|
||||||
|
@ -43,6 +52,7 @@ namespace Neighbourhood.omg.lol {
|
||||||
else {
|
else {
|
||||||
string selectedAddressJson = JsonSerializer.Serialize(_selectedAddress);
|
string selectedAddressJson = JsonSerializer.Serialize(_selectedAddress);
|
||||||
Preferences.Default.Set("selectedaddress", selectedAddressJson);
|
Preferences.Default.Set("selectedaddress", selectedAddressJson);
|
||||||
|
OnPropertyChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,13 +79,12 @@ namespace Neighbourhood.omg.lol {
|
||||||
}
|
}
|
||||||
|
|
||||||
// share intent stuff
|
// share intent stuff
|
||||||
public event EventHandler<EventArgs>? IntentReceived;
|
|
||||||
private string? _shareString;
|
private string? _shareString;
|
||||||
public string? ShareString {
|
public string? ShareString {
|
||||||
get => _shareString;
|
get => _shareString;
|
||||||
set {
|
set {
|
||||||
_shareString = value;
|
_shareString = value;
|
||||||
IntentReceived?.Invoke(this, EventArgs.Empty);
|
OnIntentRecieved();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public string? ShareStringSubject { get; set; }
|
public string? ShareStringSubject { get; set; }
|
||||||
|
@ -85,7 +94,7 @@ namespace Neighbourhood.omg.lol {
|
||||||
get => _sharePhoto;
|
get => _sharePhoto;
|
||||||
set {
|
set {
|
||||||
_sharePhoto = value;
|
_sharePhoto = value;
|
||||||
IntentReceived?.Invoke(this, EventArgs.Empty);
|
OnIntentRecieved();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public long? SharePhotoSize { get; set; }
|
public long? SharePhotoSize { get; set; }
|
||||||
|
@ -93,13 +102,12 @@ namespace Neighbourhood.omg.lol {
|
||||||
public string? SharePhotoText { get; set; }
|
public string? SharePhotoText { get; set; }
|
||||||
|
|
||||||
// refreshing
|
// refreshing
|
||||||
public event PropertyChangedEventHandler? PropertyChanged;
|
|
||||||
private bool _isRefreshing;
|
private bool _isRefreshing;
|
||||||
public bool IsRefreshing {
|
public bool IsRefreshing {
|
||||||
get => _isRefreshing;
|
get => _isRefreshing;
|
||||||
private set {
|
private set {
|
||||||
_isRefreshing = value;
|
_isRefreshing = value;
|
||||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsRefreshing)));
|
OnPropertyChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,7 +141,7 @@ namespace Neighbourhood.omg.lol {
|
||||||
get => _canRefresh;
|
get => _canRefresh;
|
||||||
set {
|
set {
|
||||||
_canRefresh = value;
|
_canRefresh = value;
|
||||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CanRefresh)));
|
OnPropertyChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,12 +187,14 @@ namespace Neighbourhood.omg.lol {
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task RemoveAccountDetails() {
|
public async Task RemoveAccountDetails() {
|
||||||
|
await Task.Run(() => {
|
||||||
Preferences.Default.Clear();
|
Preferences.Default.Clear();
|
||||||
AccountInfo = null;
|
AccountInfo = null;
|
||||||
AddressList = null;
|
AddressList = null;
|
||||||
SelectedAddress = null;
|
SelectedAddress = null;
|
||||||
Following = null;
|
Following = null;
|
||||||
api.RemoveToken();
|
api.RemoveToken();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsFollowing(string address) => Following?.Contains(address) ?? false;
|
public bool IsFollowing(string address) => Following?.Contains(address) ?? false;
|
||||||
|
@ -218,7 +228,7 @@ namespace Neighbourhood.omg.lol {
|
||||||
public async Task<List<string>?> GetDirectory(bool forceRefresh = false) {
|
public async Task<List<string>?> GetDirectory(bool forceRefresh = false) {
|
||||||
if (forceRefresh || this.AddressDirectory == null || this.AddressDirectory.Count == 0) {
|
if (forceRefresh || this.AddressDirectory == null || this.AddressDirectory.Count == 0) {
|
||||||
IdnMapping idn = new IdnMapping();
|
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);
|
if (s.StartsWith("xn--")) return idn.GetUnicode(s);
|
||||||
else return s;
|
else return s;
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
|
@ -1,10 +1,5 @@
|
||||||
using Markdig;
|
using Markdig;
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Neighbourhood.omg.lol
|
namespace Neighbourhood.omg.lol
|
||||||
{
|
{
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
</a>
|
</a>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@if (State.FeatureFollowing && State.IsAuthorized) {
|
@if (FeatureFlags.Following && State.IsAuthorized) {
|
||||||
<a class="m s row" href="/feed">
|
<a class="m s row" href="/feed">
|
||||||
<i class="square fa-solid fa-list-timeline"></i>
|
<i class="square fa-solid fa-list-timeline"></i>
|
||||||
<span>Feed</span>
|
<span>Feed</span>
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
<i class="square fa-duotone fa-address-book"></i>
|
<i class="square fa-duotone fa-address-book"></i>
|
||||||
<div class="label">Address Directory</div>
|
<div class="label">Address Directory</div>
|
||||||
</NavLink>
|
</NavLink>
|
||||||
@if (State.FeatureFollowing) {
|
@if (FeatureFlags.Following) {
|
||||||
<AuthorizeView>
|
<AuthorizeView>
|
||||||
<Authorized>
|
<Authorized>
|
||||||
<NavLink class="l nav-link" href="/feed">
|
<NavLink class="l nav-link" href="/feed">
|
||||||
|
|
|
@ -11,8 +11,7 @@
|
||||||
<div class="row center-align">
|
<div class="row center-align">
|
||||||
<img class="profile avatar" src="https://profiles.cache.lol/@Address/picture" alt="@Address" />
|
<img class="profile avatar" src="https://profiles.cache.lol/@Address/picture" alt="@Address" />
|
||||||
</div>
|
</div>
|
||||||
@if (State.FeatureFollowing)
|
@if (FeatureFlags.Following) {
|
||||||
{
|
|
||||||
<div class="row center-align">
|
<div class="row center-align">
|
||||||
@if (State.IsFollowing(Address)) {
|
@if (State.IsFollowing(Address)) {
|
||||||
<button id="follow-button" @onclick="() => {State.Unfollow(Address);InvokeAsync(StateHasChanged);}">
|
<button id="follow-button" @onclick="() => {State.Unfollow(Address);InvokeAsync(StateHasChanged);}">
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
using Markdig;
|
using Microsoft.AspNetCore.Components.Authorization;
|
||||||
using Microsoft.AspNetCore.Components.Authorization;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Neighbourhood.omg.lol.Models;
|
|
||||||
using System.Reflection;
|
|
||||||
|
|
||||||
namespace Neighbourhood.omg.lol {
|
namespace Neighbourhood.omg.lol {
|
||||||
public static class MauiProgram {
|
public static class MauiProgram {
|
||||||
|
@ -22,8 +19,6 @@ namespace Neighbourhood.omg.lol {
|
||||||
builder.Services.AddSingleton<State>();
|
builder.Services.AddSingleton<State>();
|
||||||
builder.Services.AddSingleton<NavigatorService>();
|
builder.Services.AddSingleton<NavigatorService>();
|
||||||
|
|
||||||
//ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
|
|
||||||
//builder.Services.AddSingleton<IConfiguration>(configurationBuilder.AddUserSecrets<App>().Build());
|
|
||||||
using Stream stream = App.Assembly.GetManifestResourceStream($"{App.Name}.appsettings.json")!;
|
using Stream stream = App.Assembly.GetManifestResourceStream($"{App.Name}.appsettings.json")!;
|
||||||
var config = new ConfigurationBuilder().AddJsonStream(stream).Build();
|
var config = new ConfigurationBuilder().AddJsonStream(stream).Build();
|
||||||
builder.Configuration.AddConfiguration(config);
|
builder.Configuration.AddConfiguration(config);
|
||||||
|
|
|
@ -2,10 +2,9 @@
|
||||||
using Android.App;
|
using Android.App;
|
||||||
using Android.Content;
|
using Android.Content;
|
||||||
using Android.Content.PM;
|
using Android.Content.PM;
|
||||||
using Android.Net;
|
|
||||||
using Android.OS;
|
using Android.OS;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Android.Views;
|
||||||
using Neighbourhood.omg.lol.Models;
|
using System.Diagnostics;
|
||||||
|
|
||||||
namespace Neighbourhood.omg.lol {
|
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)]
|
[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 = "*/*")]
|
[IntentFilter([Intent.ActionSend], Categories = [Intent.CategoryDefault], DataMimeType = "*/*")]
|
||||||
public class MainActivity : MauiAppCompatActivity {
|
public class MainActivity : MauiAppCompatActivity {
|
||||||
|
|
||||||
protected override void OnCreate(Bundle savedInstanceState) {
|
protected override void OnCreate(Bundle? savedInstanceState) {
|
||||||
base.OnCreate(savedInstanceState);
|
base.OnCreate(savedInstanceState);
|
||||||
|
|
||||||
// In case the app was opened (on first load) with an `ActionView` intent
|
// In case the app was opened (on first load) with an `ActionView` intent
|
||||||
OnNewIntent(this.Intent);
|
OnNewIntent(this.Intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected override void OnNewIntent(Intent? intent) {
|
protected override void OnNewIntent(Intent? intent) {
|
||||||
base.OnNewIntent(intent);
|
base.OnNewIntent(intent);
|
||||||
if (intent != null && intent.Type != null) {
|
if (intent != null && intent.Type != null) {
|
||||||
|
@ -37,9 +35,13 @@ namespace Neighbourhood.omg.lol {
|
||||||
else if (intent.Type.StartsWith("image/")) //image
|
else if (intent.Type.StartsWith("image/")) //image
|
||||||
{
|
{
|
||||||
string? shareString = intent.GetStringExtra(Intent.ExtraText);
|
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) {
|
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];
|
byte[] bytes = new byte[stream?.Length ?? 0];
|
||||||
stream?.Read(bytes, 0, bytes.Length);
|
stream?.Read(bytes, 0, bytes.Length);
|
||||||
string base64String = Convert.ToBase64String(bytes);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue