using System; using System.Collections.ObjectModel; using DynamicData.Binding; using Flawless.Client.Remote; using ReactiveUI.SourceGenerators; namespace Flawless.Client.Models; public enum WebhookEventType { Push, IssueCreated, IssueUpdate } public partial class RepositoryModel : ReactiveModel { public static string GetStandaloneName(string name, string ownerName) { return $"{ownerName}/{name}"; } [Reactive] private string _standaloneName; [Reactive] private string _ownerName; [Reactive] private string _name; [Reactive] private bool _archived; [Reactive] private string _description; [Reactive] private bool _ownByCurrentUser; [Reactive] private bool _isDownloaded; public ObservableCollection Members { get; } = new(); public ObservableCollection Commits { get; } = new(); public ObservableCollection Webhooks { get; } = new(); public ObservableCollection Issues { get; } = new(); public enum RepositoryRole : byte { Guest = 0, Reporter = 1, Developer = 2, Owner = 3, } public partial class Webhook : ReactiveModel { [Reactive] private int _id; [Reactive] private string _targetUrl; [Reactive] private bool _active; [Reactive] private DateTime _createdAt; [Reactive] private WebhookEventType _eventType; } public partial class Issue : ReactiveModel { [Reactive] private int _id; [Reactive] private string _title; [Reactive] private string? _description; [Reactive] private string _author; [Reactive] private DateTime _createdAt; [Reactive] private DateTime? _lastUpdatedAt; [Reactive] private bool _closed; public ObservableCollection Tags { get; } = new(); public ObservableCollection Comments { get; } = new(); } public partial class Comment : ReactiveModel { [Reactive] private int _id; [Reactive] private string _content; [Reactive] private string _author; [Reactive] private DateTime _createdAt; [Reactive] private int? _replyTo; } public partial class Member : ReactiveModel { [Reactive] private string _username; [Reactive] private RepositoryRole _role; [Reactive] private bool _canEdit; } public partial class Commit : ReactiveModel { [Reactive] private Guid _commitId; [Reactive] private string _author; [Reactive] private DateTime _committedOn; [Reactive] private string _message; [Reactive] private Guid _depotId; } }