Compare commits
2 Commits
main
...
e4d856c4b1
| Author | SHA1 | Date | |
|---|---|---|---|
| e4d856c4b1 | |||
| 61b3d5e25b |
@@ -0,0 +1,91 @@
|
|||||||
|
name: Bug Report
|
||||||
|
description: Report a problem with Palladium Wallet
|
||||||
|
labels: ["bug"]
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for taking the time to report a bug.
|
||||||
|
Please fill in every section — incomplete reports are hard to reproduce and may be closed.
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
id: version
|
||||||
|
attributes:
|
||||||
|
label: Wallet version
|
||||||
|
description: Shown in Help → Info (e.g. `1.0.0`).
|
||||||
|
placeholder: "1.0.0"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: platform
|
||||||
|
attributes:
|
||||||
|
label: Platform
|
||||||
|
options:
|
||||||
|
- Windows
|
||||||
|
- Linux
|
||||||
|
- Android
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: network
|
||||||
|
attributes:
|
||||||
|
label: Network
|
||||||
|
options:
|
||||||
|
- Mainnet
|
||||||
|
- Testnet
|
||||||
|
- Regtest
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
label: What happened?
|
||||||
|
description: Describe the bug clearly and concisely. What did you see? What did you expect?
|
||||||
|
placeholder: "When I click … the wallet shows … instead of …"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: steps
|
||||||
|
attributes:
|
||||||
|
label: Steps to reproduce
|
||||||
|
description: Numbered steps that reliably trigger the bug.
|
||||||
|
placeholder: |
|
||||||
|
1. Open the wallet
|
||||||
|
2. Go to …
|
||||||
|
3. Click …
|
||||||
|
4. Observe …
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: expected
|
||||||
|
attributes:
|
||||||
|
label: Expected behavior
|
||||||
|
description: What should have happened instead?
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: logs
|
||||||
|
attributes:
|
||||||
|
label: Logs / error messages
|
||||||
|
description: |
|
||||||
|
Paste any error dialogs, crash messages, or relevant log output.
|
||||||
|
Leave blank if none.
|
||||||
|
render: text
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
|
||||||
|
- type: checkboxes
|
||||||
|
id: checklist
|
||||||
|
attributes:
|
||||||
|
label: Before submitting
|
||||||
|
options:
|
||||||
|
- label: I searched existing issues and this is not a duplicate
|
||||||
|
required: true
|
||||||
|
- label: I reproduced this on the latest available version
|
||||||
|
required: false
|
||||||
@@ -62,6 +62,7 @@ public sealed class Loc
|
|||||||
"SPV-Wallet für die Kryptowährung Palladium (PLM)."],
|
"SPV-Wallet für die Kryptowährung Palladium (PLM)."],
|
||||||
["help.tab.info"] = ["Info", "Info", "Info", "Info", "Info", "Info"],
|
["help.tab.info"] = ["Info", "Info", "Info", "Info", "Info", "Info"],
|
||||||
["help.tab.donate"] = ["Dona", "Donate", "Donar", "Faire un don", "Doar", "Spenden"],
|
["help.tab.donate"] = ["Dona", "Donate", "Donar", "Faire un don", "Doar", "Spenden"],
|
||||||
|
["help.bug.report"] = ["Segnala un bug", "Report a bug", "Informar un error", "Signaler un bug", "Reportar um bug", "Fehler melden"],
|
||||||
["donate.desc"] = [
|
["donate.desc"] = [
|
||||||
"Se questo wallet ti è utile, considera una piccola donazione allo sviluppatore.",
|
"Se questo wallet ti è utile, considera una piccola donazione allo sviluppatore.",
|
||||||
"If you find this wallet useful, consider a small donation to the developer.",
|
"If you find this wallet useful, consider a small donation to the developer.",
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public sealed class TransactionDetailsViewModel
|
|||||||
LockTimeText = d.LockTime.ToString();
|
LockTimeText = d.LockTime.ToString();
|
||||||
RbfText = loc[d.RbfSignaled ? "tx.yes" : "tx.no"];
|
RbfText = loc[d.RbfSignaled ? "tx.yes" : "tx.no"];
|
||||||
Inputs = new ObservableCollection<TxIoRow>(d.Inputs.Select((i, n) => new TxIoRow(
|
Inputs = new ObservableCollection<TxIoRow>(d.Inputs.Select((i, n) => new TxIoRow(
|
||||||
i.IsCoinbase ? loc["tx.coinbase"] : $"{Shorten(i.PrevTxid)}:{i.PrevIndex}",
|
i.IsCoinbase ? loc["tx.coinbase"] : $"{i.PrevTxid}:{i.PrevIndex}",
|
||||||
i.IsCoinbase ? loc["tx.coinbase.newcoins"] : i.Address ?? "—",
|
i.IsCoinbase ? loc["tx.coinbase.newcoins"] : i.Address ?? "—",
|
||||||
i.AmountSats is { } a ? CoinAmount.FormatIn(a, unit) : "—",
|
i.AmountSats is { } a ? CoinAmount.FormatIn(a, unit) : "—",
|
||||||
i.IsMine)));
|
i.IsMine)));
|
||||||
@@ -108,7 +108,4 @@ public sealed class TransactionDetailsViewModel
|
|||||||
}
|
}
|
||||||
|
|
||||||
private string Abs(long sats) => CoinAmount.FormatIn(Math.Abs(sats), _unit);
|
private string Abs(long sats) => CoinAmount.FormatIn(Math.Abs(sats), _unit);
|
||||||
|
|
||||||
private static string Shorten(string txid) =>
|
|
||||||
txid.Length > 16 ? $"{txid[..8]}…{txid[^4..]}" : txid;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1014,7 +1014,7 @@
|
|||||||
IsVisible="{Binding IsTxDetailsOpen}">
|
IsVisible="{Binding IsTxDetailsOpen}">
|
||||||
<Border Background="{DynamicResource OverlayCardBrush}"
|
<Border Background="{DynamicResource OverlayCardBrush}"
|
||||||
BorderBrush="{DynamicResource BorderSubtleBrush}" BorderThickness="1" CornerRadius="8"
|
BorderBrush="{DynamicResource BorderSubtleBrush}" BorderThickness="1" CornerRadius="8"
|
||||||
MaxWidth="540" MaxHeight="600" Margin="16" Padding="0"
|
MaxWidth="660" MaxHeight="800" Margin="16" Padding="0"
|
||||||
HorizontalAlignment="Center" VerticalAlignment="Center">
|
HorizontalAlignment="Center" VerticalAlignment="Center">
|
||||||
<Panel Margin="24">
|
<Panel Margin="24">
|
||||||
|
|
||||||
@@ -1135,38 +1135,48 @@
|
|||||||
</Border>
|
</Border>
|
||||||
|
|
||||||
<TextBlock Classes="section" Text="{Binding Loc[tx.inputs]}"/>
|
<TextBlock Classes="section" Text="{Binding Loc[tx.inputs]}"/>
|
||||||
<Border Classes="card" Padding="14,6">
|
<Border Classes="card" Padding="14,4">
|
||||||
<ItemsControl ItemsSource="{Binding Inputs}">
|
<ItemsControl ItemsSource="{Binding Inputs}">
|
||||||
<ItemsControl.ItemTemplate>
|
<ItemsControl.ItemTemplate>
|
||||||
<DataTemplate x:DataType="vm:TxIoRow">
|
<DataTemplate x:DataType="vm:TxIoRow">
|
||||||
<Grid ColumnDefinitions="160,*,Auto" Margin="0,4">
|
<!-- Two-line layout: txid ref on first line, address+amount on second -->
|
||||||
<TextBlock Grid.Column="0" Text="{Binding Position}"
|
<StackPanel Margin="0,6,0,4">
|
||||||
FontFamily="monospace" FontSize="11" Foreground="{DynamicResource TextMutedBrush}"
|
<SelectableTextBlock Text="{Binding Position}"
|
||||||
TextTrimming="CharacterEllipsis" Margin="0,0,8,0"/>
|
FontFamily="monospace" FontSize="10"
|
||||||
<TextBlock Grid.Column="1" Text="{Binding Address}"
|
Foreground="{DynamicResource TextMutedBrush}"
|
||||||
FontFamily="monospace" FontSize="11" TextTrimming="CharacterEllipsis"
|
TextWrapping="Wrap"/>
|
||||||
Foreground="{Binding IsMine, Converter={x:Static vm:MineColorConverter.Instance}}"/>
|
<Grid ColumnDefinitions="*,Auto" Margin="0,2,0,0">
|
||||||
<TextBlock Grid.Column="2" Text="{Binding Amount}"
|
<SelectableTextBlock Grid.Column="0" Text="{Binding Address}"
|
||||||
FontFamily="monospace" FontFeatures="+tnum" FontSize="11" Margin="8,0,0,0"/>
|
FontFamily="monospace" FontSize="11"
|
||||||
</Grid>
|
TextWrapping="Wrap" VerticalAlignment="Top"
|
||||||
|
Foreground="{Binding IsMine, Converter={x:Static vm:MineColorConverter.Instance}}"/>
|
||||||
|
<SelectableTextBlock Grid.Column="1" Text="{Binding Amount}"
|
||||||
|
FontFamily="monospace" FontFeatures="+tnum" FontSize="11"
|
||||||
|
VerticalAlignment="Top" Margin="12,0,0,0"/>
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ItemsControl.ItemTemplate>
|
</ItemsControl.ItemTemplate>
|
||||||
</ItemsControl>
|
</ItemsControl>
|
||||||
</Border>
|
</Border>
|
||||||
|
|
||||||
<TextBlock Classes="section" Text="{Binding Loc[tx.outputs]}"/>
|
<TextBlock Classes="section" Text="{Binding Loc[tx.outputs]}"/>
|
||||||
<Border Classes="card" Padding="14,6">
|
<Border Classes="card" Padding="14,4">
|
||||||
<ItemsControl ItemsSource="{Binding Outputs}">
|
<ItemsControl ItemsSource="{Binding Outputs}">
|
||||||
<ItemsControl.ItemTemplate>
|
<ItemsControl.ItemTemplate>
|
||||||
<DataTemplate x:DataType="vm:TxIoRow">
|
<DataTemplate x:DataType="vm:TxIoRow">
|
||||||
<Grid ColumnDefinitions="44,*,Auto" Margin="0,4">
|
<Grid ColumnDefinitions="44,*,Auto" Margin="0,6">
|
||||||
<TextBlock Grid.Column="0" Text="{Binding Position}"
|
<TextBlock Grid.Column="0" Text="{Binding Position}"
|
||||||
FontFamily="monospace" FontSize="11" Foreground="{DynamicResource TextMutedBrush}"/>
|
FontFamily="monospace" FontSize="11"
|
||||||
<TextBlock Grid.Column="1" Text="{Binding Address}"
|
Foreground="{DynamicResource TextMutedBrush}"
|
||||||
FontFamily="monospace" FontSize="11" TextTrimming="CharacterEllipsis"
|
VerticalAlignment="Top"/>
|
||||||
Foreground="{Binding IsMine, Converter={x:Static vm:MineColorConverter.Instance}}"/>
|
<SelectableTextBlock Grid.Column="1" Text="{Binding Address}"
|
||||||
<TextBlock Grid.Column="2" Text="{Binding Amount}"
|
FontFamily="monospace" FontSize="11"
|
||||||
FontFamily="monospace" FontFeatures="+tnum" FontSize="11" Margin="8,0,0,0"/>
|
TextWrapping="Wrap" VerticalAlignment="Top"
|
||||||
|
Foreground="{Binding IsMine, Converter={x:Static vm:MineColorConverter.Instance}}"/>
|
||||||
|
<SelectableTextBlock Grid.Column="2" Text="{Binding Amount}"
|
||||||
|
FontFamily="monospace" FontFeatures="+tnum" FontSize="11"
|
||||||
|
VerticalAlignment="Top" Margin="12,0,0,0"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ItemsControl.ItemTemplate>
|
</ItemsControl.ItemTemplate>
|
||||||
@@ -1545,6 +1555,9 @@
|
|||||||
Foreground="{DynamicResource TextSecondaryBrush}"/>
|
Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBlock Text="{Binding Loc[help.info]}" TextWrapping="Wrap"/>
|
<TextBlock Text="{Binding Loc[help.info]}" TextWrapping="Wrap"/>
|
||||||
|
<Button Content="{Binding Loc[help.bug.report]}"
|
||||||
|
Click="OnOpenBugReportClick"
|
||||||
|
HorizontalAlignment="Left"/>
|
||||||
<Border BorderBrush="{DynamicResource BorderSubtleBrush}"
|
<Border BorderBrush="{DynamicResource BorderSubtleBrush}"
|
||||||
BorderThickness="0,1,0,0" Margin="0,4,0,0"/>
|
BorderThickness="0,1,0,0" Margin="0,4,0,0"/>
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
@@ -128,6 +129,14 @@ public partial class MainView : UserControl
|
|||||||
vm.IsHelpOpen = false;
|
vm.IsHelpOpen = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async void OnOpenBugReportClick(object? sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var launcher = TopLevel.GetTopLevel(this)?.Launcher;
|
||||||
|
if (launcher is not null)
|
||||||
|
await launcher.LaunchUriAsync(new Uri(
|
||||||
|
"https://github.com/davide3011/PalladiumWallet/issues/new?assignees=&labels=bug&template=bug_report.yml"));
|
||||||
|
}
|
||||||
|
|
||||||
// Esc (desktop) or Back (Android) closes the topmost open overlay.
|
// Esc (desktop) or Back (Android) closes the topmost open overlay.
|
||||||
protected override void OnKeyDown(KeyEventArgs e)
|
protected override void OnKeyDown(KeyEventArgs e)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user