├── .dockerignore
├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
├── dependabot.yml
└── workflows
│ ├── docker-publish.yml
│ ├── dotnet-desktop.yml
│ └── windows-store.yml
├── .gitignore
├── Dockerfile
├── LICENSE
├── Manual.docx
├── Privacy.md
├── README.md
├── SECURITY.md
├── Screenshots
├── connect.png
├── device.png
├── notebooks.png
├── settings.png
├── templates.png
└── tools.png
├── Source
├── .dockerignore
├── .editorconfig
├── .gitignore
├── .idea
│ └── .idea.Slithin
│ │ └── .idea
│ │ ├── .gitignore
│ │ ├── .name
│ │ ├── encodings.xml
│ │ ├── indexLayout.xml
│ │ └── vcs.xml
├── ApiConsole
│ ├── ApiConsole.csproj
│ ├── Commands
│ │ ├── FilesCommand.cs
│ │ ├── LoginCommand.cs
│ │ ├── ScreensCommand.cs
│ │ ├── ScriptsCommand.cs
│ │ └── TemplatesCommand.cs
│ ├── Core
│ │ └── ICommand.cs
│ ├── Program.cs
│ ├── Properties
│ │ └── launchSettings.json
│ └── ServiceLocator.cs
├── New
│ ├── MarketplaceService
│ │ ├── Dockerfile
│ │ ├── JwtTokenValidator.cs
│ │ ├── MarketplaceService.csproj
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── ProtoContoller.cs
│ │ ├── Protos
│ │ │ ├── Authentication.proto
│ │ │ └── Storage.proto
│ │ ├── Services
│ │ │ ├── AuthenticationService.cs
│ │ │ └── StorageService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Models
│ │ ├── Slithin.Entities.Remarkable
│ │ │ ├── Rendering
│ │ │ │ ├── BaseSizes.cs
│ │ │ │ ├── Brushes.cs
│ │ │ │ ├── Colors.cs
│ │ │ │ ├── Layer.cs
│ │ │ │ ├── Line.cs
│ │ │ │ ├── Notebook.cs
│ │ │ │ ├── Page.cs
│ │ │ │ ├── Point.cs
│ │ │ │ └── Ranges.cs
│ │ │ └── Slithin.Entities.Remarkable.csproj
│ │ ├── Slithin.Modules.BaseServices.Models
│ │ │ ├── ICacheService.cs
│ │ │ ├── IDeviceDiscovery.cs
│ │ │ ├── IEventService.cs
│ │ │ ├── IPathManager.cs
│ │ │ └── Slithin.Modules.BaseServices.Models.csproj
│ │ ├── Slithin.Modules.Device.Models
│ │ │ ├── CommandResult.cs
│ │ │ ├── CustomIniSerializer.cs
│ │ │ ├── DevicePathList.cs
│ │ │ ├── FileFetchResult.cs
│ │ │ ├── IRemarkableDevice.cs
│ │ │ ├── IXochitlService.cs
│ │ │ └── Slithin.Modules.Device.Models.csproj
│ │ ├── Slithin.Modules.Diagnostics.Sentry.Models
│ │ │ ├── IDiagnosticService.cs
│ │ │ ├── IFeedbackService.cs
│ │ │ ├── PerformanceMonitor.cs
│ │ │ └── Slithin.Modules.Diagnostics.Sentry.Models.csproj
│ │ ├── Slithin.Modules.Export.Models
│ │ │ ├── ExportDocument.cs
│ │ │ ├── ExportOptions.cs
│ │ │ ├── IExportProvider.cs
│ │ │ ├── IExportProviderFactory.cs
│ │ │ ├── IExportService.cs
│ │ │ ├── IRenderingService.cs
│ │ │ ├── PageRange.cs
│ │ │ └── Slithin.Modules.Export.Models.csproj
│ │ ├── Slithin.Modules.I18N.Models
│ │ │ ├── ILocalisationService.cs
│ │ │ ├── Slithin.Modules.I18N.Models.csproj
│ │ │ └── ValidationExtensions.cs
│ │ ├── Slithin.Modules.Import.Models
│ │ │ ├── IImportProvider.cs
│ │ │ ├── IImportProviderFactory.cs
│ │ │ ├── ImportProviderBaseTypeAttribute.cs
│ │ │ └── Slithin.Modules.Import.Models.csproj
│ │ ├── Slithin.Modules.Menu.Models
│ │ │ ├── ContextualMenu
│ │ │ │ ├── ContextualElement.cs
│ │ │ │ ├── ContextualElements
│ │ │ │ │ ├── ContextualButton.cs
│ │ │ │ │ └── ContextualDropDownButton.cs
│ │ │ │ ├── ContextualRegistrar.cs
│ │ │ │ ├── IContextualMenuBuilder.cs
│ │ │ │ ├── IContextualMenuProvider.cs
│ │ │ │ └── IContextualMenuRegistrar.cs
│ │ │ ├── IContextMenuProvider.cs
│ │ │ ├── ItemContext
│ │ │ │ ├── CommandBasedContextMenu.cs
│ │ │ │ ├── ContextAttribute.cs
│ │ │ │ ├── IContextCommand.cs
│ │ │ │ ├── IContextProvider.cs
│ │ │ │ ├── UIContext.cs
│ │ │ │ └── UIContextMenuBuilder.cs
│ │ │ ├── Menu
│ │ │ │ ├── IPage.cs
│ │ │ │ ├── PageIconAttribute.cs
│ │ │ │ └── PreserveIndexAttribute.cs
│ │ │ ├── Slithin.Modules.Menu.Models.csproj
│ │ │ └── XmlNsDefinitions.cs
│ │ ├── Slithin.Modules.Notebooks.UI.Models
│ │ │ ├── DirectoryModel.cs
│ │ │ ├── FileModel.cs
│ │ │ ├── FilesystemModel.cs
│ │ │ ├── IThumbnailLoader.cs
│ │ │ ├── Slithin.Modules.Notebooks.UI.Models.csproj
│ │ │ ├── TrashModel.cs
│ │ │ └── UpDirectoryModel.cs
│ │ ├── Slithin.Modules.Repository.Models
│ │ │ ├── DatabaseAccessor.cs
│ │ │ ├── IDatabaseService.cs
│ │ │ ├── ILoadingService.cs
│ │ │ ├── ILoginService.cs
│ │ │ ├── IMetadataRepository.cs
│ │ │ ├── IRepository.cs
│ │ │ ├── ITemplateStorage.cs
│ │ │ ├── IVersionService.cs
│ │ │ └── Slithin.Modules.Repository.Models.csproj
│ │ ├── Slithin.Modules.Resources.Models
│ │ │ ├── AssetModel.cs
│ │ │ ├── Grant.cs
│ │ │ ├── IMarketplaceAPIService.cs
│ │ │ ├── MarketplaceUser.cs
│ │ │ ├── Screen.cs
│ │ │ ├── Script.cs
│ │ │ ├── Sharable.cs
│ │ │ ├── Slithin.Modules.Resources.Models.csproj
│ │ │ ├── Template.cs
│ │ │ ├── UploadRequest.cs
│ │ │ └── User.cs
│ │ ├── Slithin.Modules.Settings.Models
│ │ │ ├── Builder
│ │ │ │ ├── Attributes
│ │ │ │ │ ├── DisplaySettingsAttribute.cs
│ │ │ │ │ ├── SelectionAttribute.cs
│ │ │ │ │ ├── SettingsAttribute.cs
│ │ │ │ │ └── ToggleAttribute.cs
│ │ │ │ ├── ISettingsControlProvider.cs
│ │ │ │ └── ISettingsUIBuilder.cs
│ │ │ ├── IScreenRememberService.cs
│ │ │ ├── ISettingsService.cs
│ │ │ ├── SavableSettingsModel.cs
│ │ │ ├── SettingExtension.cs
│ │ │ ├── SettingsModel.cs
│ │ │ └── Slithin.Modules.Settings.Models.csproj
│ │ ├── Slithin.Modules.Sync.Models
│ │ │ ├── ISynchronizeService.cs
│ │ │ ├── NotebooksFilter.cs
│ │ │ ├── Slithin.Modules.Sync.Models.csproj
│ │ │ ├── SyncNotebook.cs
│ │ │ └── TemplateFilter.cs
│ │ ├── Slithin.Modules.Tools.Models
│ │ │ ├── ITool.cs
│ │ │ ├── IToolInvokerService.cs
│ │ │ ├── Slithin.Modules.Tools.Models.csproj
│ │ │ ├── ToolInfo.cs
│ │ │ └── ToolProperties.cs
│ │ └── Slithin.Modules.Updater.Models
│ │ │ ├── IUpdater.cs
│ │ │ ├── Slithin.Modules.Updater.Models.csproj
│ │ │ └── ViewModels
│ │ │ └── ItemViewModel.cs
│ ├── Modules
│ │ ├── Slithin.Modules.Backup
│ │ │ ├── BackUpTool.cs
│ │ │ ├── Models
│ │ │ │ └── BackupModel.cs
│ │ │ ├── Module.cs
│ │ │ ├── Resources
│ │ │ │ ├── backup.png
│ │ │ │ └── restore.png
│ │ │ ├── RestoreTool.cs
│ │ │ ├── SelectBackupModal.axaml
│ │ │ ├── SelectBackupModal.axaml.cs
│ │ │ ├── Slithin.Modules.Backup.csproj
│ │ │ └── ViewModels
│ │ │ │ └── SelectBackupViewModel.cs
│ │ ├── Slithin.Modules.BaseServices
│ │ │ ├── CacheServiceImpl.cs
│ │ │ ├── DeviceDiscoveryImpl.cs
│ │ │ ├── EventServiceImpl.cs
│ │ │ ├── LoggerImpl.cs
│ │ │ ├── Module.cs
│ │ │ ├── PathManagerImpl.cs
│ │ │ └── Slithin.Modules.BaseServices.csproj
│ │ ├── Slithin.Modules.Device.Mock
│ │ │ ├── MockDevice.cs
│ │ │ ├── Module.cs
│ │ │ ├── Slithin.Modules.Device.Mock.csproj
│ │ │ ├── XochitlImpl.cs
│ │ │ └── device.zip
│ │ ├── Slithin.Modules.Device.UI
│ │ │ ├── ContextualMenuProvider.cs
│ │ │ ├── DevicePage.axaml
│ │ │ ├── DevicePage.axaml.cs
│ │ │ ├── Models
│ │ │ │ └── CustomScreen.cs
│ │ │ ├── Module.cs
│ │ │ ├── Resources
│ │ │ │ ├── DefaultScreens
│ │ │ │ │ ├── batteryempty.png
│ │ │ │ │ ├── lowbattery.png
│ │ │ │ │ ├── poweroff.png
│ │ │ │ │ ├── rebooting.png
│ │ │ │ │ ├── splash.png
│ │ │ │ │ ├── starting.png
│ │ │ │ │ └── suspended.png
│ │ │ │ └── Icons.xml
│ │ │ ├── Slithin.Modules.Device.UI.csproj
│ │ │ └── ViewModels
│ │ │ │ └── DevicePageViewModel.cs
│ │ ├── Slithin.Modules.Device
│ │ │ ├── DeviceImplementation.cs
│ │ │ ├── Module.cs
│ │ │ ├── Slithin.Modules.Device.csproj
│ │ │ └── XochitlImpl.cs
│ │ ├── Slithin.Modules.Diagnostics.Sentry
│ │ │ ├── DiagnosticService.cs
│ │ │ ├── FeedbackService.cs
│ │ │ ├── Module.cs
│ │ │ ├── SettingsModel.cs
│ │ │ └── Slithin.Modules.Diagnostics.Sentry.csproj
│ │ ├── Slithin.Modules.Export
│ │ │ ├── Commands
│ │ │ │ └── ExportCommand.cs
│ │ │ ├── ContextualMenuProvider.cs
│ │ │ ├── ExportModal.axaml
│ │ │ ├── ExportModal.axaml.cs
│ │ │ ├── ExportProviderFactoryImpl.cs
│ │ │ ├── ExportServiceImpl.cs
│ │ │ ├── Exporters
│ │ │ │ ├── EpubExporter.cs
│ │ │ │ ├── PdfExporter.cs
│ │ │ │ ├── PngExporter.cs
│ │ │ │ └── SvgExporter.cs
│ │ │ ├── Module.cs
│ │ │ ├── Rendering
│ │ │ │ ├── RenderingServiceImpl.Png.cs
│ │ │ │ └── RenderingServiceImpl.Svg.cs
│ │ │ ├── Slithin.Modules.Export.csproj
│ │ │ ├── Validators
│ │ │ │ └── ExportValidator.cs
│ │ │ └── ViewModels
│ │ │ │ └── ExportModalViewModel.cs
│ │ ├── Slithin.Modules.FirstStart
│ │ │ ├── FirstStartWindow.axaml
│ │ │ ├── FirstStartWindow.axaml.cs
│ │ │ ├── Module.cs
│ │ │ ├── Resources
│ │ │ │ └── Icon.png
│ │ │ ├── Slithin.Modules.FirstStart.csproj
│ │ │ ├── StepManager.cs
│ │ │ ├── Steps
│ │ │ │ ├── DeviceStep.axaml
│ │ │ │ ├── DeviceStep.axaml.cs
│ │ │ │ ├── FinishStep.axaml
│ │ │ │ ├── FinishStep.axaml.cs
│ │ │ │ ├── SettingsStep.axaml
│ │ │ │ ├── SettingsStep.axaml.cs
│ │ │ │ ├── WelcomeStep.axaml
│ │ │ │ └── WelcomeStep.axaml.cs
│ │ │ └── ViewModels
│ │ │ │ ├── DeviceStepViewModel.cs
│ │ │ │ ├── FirstStartViewModel.cs
│ │ │ │ ├── LoginInfoViewModel.cs
│ │ │ │ └── SettingsViewModel.cs
│ │ ├── Slithin.Modules.I18N
│ │ │ ├── LocalisationServiceImpl.cs
│ │ │ ├── Module.cs
│ │ │ ├── Resources
│ │ │ │ └── Locales
│ │ │ │ │ ├── de.json
│ │ │ │ │ ├── en.json
│ │ │ │ │ ├── eo.json
│ │ │ │ │ ├── fi.json
│ │ │ │ │ ├── fr.json
│ │ │ │ │ └── sv.json
│ │ │ ├── Slithin.Modules.I18N.csproj
│ │ │ └── strings.json
│ │ ├── Slithin.Modules.Import
│ │ │ ├── ImportProviderFactoryImpl.cs
│ │ │ ├── Module.cs
│ │ │ ├── Providers
│ │ │ │ ├── ImageImportProvider.cs
│ │ │ │ ├── NotebookImportProvider.cs
│ │ │ │ └── PngImportProvider.cs
│ │ │ └── Slithin.Modules.Import.csproj
│ │ ├── Slithin.Modules.Menu
│ │ │ ├── ContextMenuProviderImpl.cs
│ │ │ ├── ContextualMenuBuilderImpl.cs
│ │ │ ├── Module.cs
│ │ │ ├── Resources
│ │ │ │ └── DataTemplates.xml
│ │ │ ├── Slithin.Modules.Menu.csproj
│ │ │ └── Views
│ │ │ │ ├── DefaultContextualMenu.axaml
│ │ │ │ ├── DefaultContextualMenu.axaml.cs
│ │ │ │ ├── EmptyContextualMenu.axaml
│ │ │ │ └── EmptyContextualMenu.axaml.cs
│ │ ├── Slithin.Modules.Notebooks.UI
│ │ │ ├── Commands
│ │ │ │ ├── ContextCommands
│ │ │ │ │ ├── BackupContextCommand.cs
│ │ │ │ │ ├── ConvertQuicksheetToNotebookContextCommand.cs
│ │ │ │ │ ├── CopyIDContextCommand.cs
│ │ │ │ │ ├── MoveToTrashContextCommand.cs
│ │ │ │ │ └── RestoreNotebookContextCommand.cs
│ │ │ │ ├── EmptyTrashContextCommand.cs
│ │ │ │ ├── MakeFolderCommand.cs
│ │ │ │ ├── PinContextCommand.cs
│ │ │ │ ├── RemoveNotebookCommand.cs
│ │ │ │ ├── RenameCommand.cs
│ │ │ │ └── UnPinCommand.cs
│ │ │ ├── ContextualMenuProvider.cs
│ │ │ ├── Module.cs
│ │ │ ├── Resources
│ │ │ │ ├── Icons.axaml
│ │ │ │ ├── Icons.xml
│ │ │ │ ├── notebook.png
│ │ │ │ └── pdf.png
│ │ │ ├── Slithin.Modules.Notebooks.UI.csproj
│ │ │ ├── UI
│ │ │ │ ├── NotebookDataTemplate.cs
│ │ │ │ ├── NotebooksPage.axaml
│ │ │ │ ├── NotebooksPage.axaml.cs
│ │ │ │ ├── NotebooksView.cs
│ │ │ │ ├── ViewDropDown.axaml
│ │ │ │ └── ViewDropDown.axaml.cs
│ │ │ └── ViewModels
│ │ │ │ └── NotebooksPageViewModel.cs
│ │ ├── Slithin.Modules.PdfNotebookTools
│ │ │ ├── Models
│ │ │ │ ├── NotebookCustomPage.cs
│ │ │ │ └── NotebookPage.cs
│ │ │ ├── Module.cs
│ │ │ ├── NotebookAppendTool.cs
│ │ │ ├── NotebookCreationTool.cs
│ │ │ ├── NotebookPageDataTemplate.cs
│ │ │ ├── Resources
│ │ │ │ ├── Cover.png
│ │ │ │ ├── Covers
│ │ │ │ │ ├── Folder-DBlue.png
│ │ │ │ │ ├── Folder-Green.png
│ │ │ │ │ ├── Folder-Grey.png
│ │ │ │ │ ├── Folder-LBlue.png
│ │ │ │ │ ├── Folder-Lime.png
│ │ │ │ │ ├── Folder-Orange.png
│ │ │ │ │ ├── Folder-Pink.png
│ │ │ │ │ ├── Folder-Purple.png
│ │ │ │ │ ├── Folder-Red.png
│ │ │ │ │ ├── Folder-Turquoise.png
│ │ │ │ │ ├── Folder-White.png
│ │ │ │ │ └── Folder-Yellow.png
│ │ │ │ └── pdf_append.png
│ │ │ ├── Slithin.Modules.PdfNotebookTools.csproj
│ │ │ ├── Validators
│ │ │ │ ├── AppendNotebookValidator.cs
│ │ │ │ └── CreateNotebookValidator.cs
│ │ │ ├── ViewModels
│ │ │ │ ├── AppendNotebookModalViewModel.cs
│ │ │ │ └── CreateNotebookModalViewModel.cs
│ │ │ └── Views
│ │ │ │ ├── AppendNotebookModal.axaml
│ │ │ │ ├── AppendNotebookModal.axaml.cs
│ │ │ │ ├── CreateNotebookModal.axaml
│ │ │ │ └── CreateNotebookModal.axaml.cs
│ │ ├── Slithin.Modules.Repository
│ │ │ ├── DatabaseServiceImpl.cs
│ │ │ ├── LoadingServiceImpl.cs
│ │ │ ├── LocalRepository.cs
│ │ │ ├── LoginServiceImpl.cs
│ │ │ ├── MetadataRepositoryImpl.cs
│ │ │ ├── Module.cs
│ │ │ ├── Slithin.Modules.Repository.csproj
│ │ │ ├── TemplateStorageImpl.cs
│ │ │ ├── ThumbnailLoaderImpl.cs
│ │ │ └── VersionServiceImpl.cs
│ │ ├── Slithin.Modules.Resources.UI
│ │ │ ├── AuthenticationResult.cs
│ │ │ ├── LoginModal.axaml
│ │ │ ├── LoginModal.axaml.cs
│ │ │ ├── MarketplaceAPI.cs
│ │ │ ├── Module.cs
│ │ │ ├── Pages
│ │ │ │ ├── ListPage.axaml
│ │ │ │ ├── ListPage.axaml.cs
│ │ │ │ ├── LoginFramePage.axaml
│ │ │ │ ├── LoginFramePage.axaml.cs
│ │ │ │ ├── RegisterFramePage.axaml
│ │ │ │ ├── RegisterFramePage.axaml.cs
│ │ │ │ ├── ResourcesMainPage.axaml
│ │ │ │ └── ResourcesMainPage.axaml.cs
│ │ │ ├── Resources
│ │ │ │ └── Icons.xml
│ │ │ ├── ResourcesPage.axaml
│ │ │ ├── ResourcesPage.axaml.cs
│ │ │ ├── Slithin.Modules.Resources.UI.csproj
│ │ │ └── ViewModels
│ │ │ │ ├── LoginModalViewModel.cs
│ │ │ │ ├── ResourceListViewModel.cs
│ │ │ │ └── ResourcesPageViewModel.cs
│ │ ├── Slithin.Modules.Settings.UI
│ │ │ ├── Builder
│ │ │ │ ├── ControlProviders
│ │ │ │ │ ├── DateTimeProvider.cs
│ │ │ │ │ ├── EnumProvider.cs
│ │ │ │ │ ├── SelectionProvider.cs
│ │ │ │ │ ├── TextProvider.cs
│ │ │ │ │ ├── TimeProvider.cs
│ │ │ │ │ └── ToggleProvider.cs
│ │ │ │ └── SettingsUIBuilderImpl.cs
│ │ │ ├── Commands
│ │ │ │ ├── AboutCommand.cs
│ │ │ │ ├── BuyCoffeeCommand.cs
│ │ │ │ ├── FeedbackCommand.cs
│ │ │ │ └── ShowDonationButtonsCommand.cs
│ │ │ ├── ContextualMenuProvider.cs
│ │ │ ├── FeedbackWindow.axaml
│ │ │ ├── FeedbackWindow.axaml.cs
│ │ │ ├── Icon.png
│ │ │ ├── Modals
│ │ │ │ ├── AboutModal.axaml
│ │ │ │ ├── AboutModal.axaml.cs
│ │ │ │ ├── SupportModal.axaml
│ │ │ │ └── SupportModal.axaml.cs
│ │ │ ├── Module.cs
│ │ │ ├── Resources
│ │ │ │ └── Icons.xml
│ │ │ ├── ScreenRememberServiceImpl.cs
│ │ │ ├── SettingModels
│ │ │ │ ├── AppeareanceSettingsModel.cs
│ │ │ │ ├── BehaviorSettingsModel.cs
│ │ │ │ └── DeviceSettingsModel.cs
│ │ │ ├── SettingsPage.axaml
│ │ │ ├── SettingsPage.axaml.cs
│ │ │ ├── SettingsServiceImpl.cs
│ │ │ ├── Slithin.Modules.Settings.UI.csproj
│ │ │ └── ViewModels
│ │ │ │ ├── FeedbackViewModel.cs
│ │ │ │ └── SettingsPageViewModel.cs
│ │ ├── Slithin.Modules.Sync
│ │ │ ├── Module.cs
│ │ │ ├── Slithin.Modules.Sync.csproj
│ │ │ └── SynchronizeImpl.cs
│ │ ├── Slithin.Modules.TemplateCreator
│ │ │ ├── Module.cs
│ │ │ ├── NodeZoomBorder.cs
│ │ │ ├── Slithin.Modules.TemplateCreator.csproj
│ │ │ ├── TemplateEditorControl.axaml
│ │ │ ├── TemplateEditorControl.axaml.cs
│ │ │ └── TemplateEditorTool.cs
│ │ ├── Slithin.Modules.Templates.UI
│ │ │ ├── AddTemplateModal.axaml
│ │ │ ├── AddTemplateModal.axaml.cs
│ │ │ ├── Commands
│ │ │ │ └── RemoveTemplateCommand.cs
│ │ │ ├── ContextualMenuProvider.cs
│ │ │ ├── FilterPopup.axaml
│ │ │ ├── FilterPopup.axaml.cs
│ │ │ ├── Models
│ │ │ │ └── IconCodeItem.cs
│ │ │ ├── Module.cs
│ │ │ ├── Resources
│ │ │ │ ├── IconTiles
│ │ │ │ │ ├── e970.png
│ │ │ │ │ ├── e975.png
│ │ │ │ │ ├── e976.png
│ │ │ │ │ ├── e977.png
│ │ │ │ │ ├── e978.png
│ │ │ │ │ ├── e979.png
│ │ │ │ │ ├── e97b.png
│ │ │ │ │ ├── e982.png
│ │ │ │ │ ├── e98c.png
│ │ │ │ │ ├── e98d.png
│ │ │ │ │ ├── e98e.png
│ │ │ │ │ ├── e98f.png
│ │ │ │ │ ├── e990.png
│ │ │ │ │ ├── e991.png
│ │ │ │ │ ├── e993.png
│ │ │ │ │ ├── e994.png
│ │ │ │ │ ├── e995.png
│ │ │ │ │ ├── e996.png
│ │ │ │ │ ├── e997.png
│ │ │ │ │ ├── e999.png
│ │ │ │ │ ├── e99a.png
│ │ │ │ │ ├── e99b.png
│ │ │ │ │ ├── e99c.png
│ │ │ │ │ ├── e99d.png
│ │ │ │ │ ├── e99e.png
│ │ │ │ │ ├── e99f.png
│ │ │ │ │ ├── e9a0.png
│ │ │ │ │ ├── e9a1.png
│ │ │ │ │ ├── e9a5.png
│ │ │ │ │ ├── e9a6.png
│ │ │ │ │ ├── e9a7.png
│ │ │ │ │ ├── e9a8.png
│ │ │ │ │ ├── e9a9.png
│ │ │ │ │ ├── e9aa.png
│ │ │ │ │ ├── e9ab.png
│ │ │ │ │ ├── e9ac.png
│ │ │ │ │ ├── e9ad.png
│ │ │ │ │ ├── e9b2.png
│ │ │ │ │ ├── e9b4.png
│ │ │ │ │ ├── e9b5.png
│ │ │ │ │ ├── e9b6.png
│ │ │ │ │ ├── e9b7.png
│ │ │ │ │ ├── e9b8.png
│ │ │ │ │ ├── e9b9.png
│ │ │ │ │ ├── e9ba.png
│ │ │ │ │ ├── e9bb.png
│ │ │ │ │ ├── e9bc.png
│ │ │ │ │ ├── e9c0.png
│ │ │ │ │ ├── e9c5.png
│ │ │ │ │ ├── e9c8.png
│ │ │ │ │ ├── e9c9.png
│ │ │ │ │ ├── e9ca.png
│ │ │ │ │ ├── e9cb.png
│ │ │ │ │ ├── e9cc.png
│ │ │ │ │ ├── e9cd.png
│ │ │ │ │ ├── e9ce.png
│ │ │ │ │ ├── e9cf.png
│ │ │ │ │ ├── e9d0.png
│ │ │ │ │ ├── e9d1.png
│ │ │ │ │ ├── e9d2.png
│ │ │ │ │ ├── e9d3.png
│ │ │ │ │ ├── e9d4.png
│ │ │ │ │ ├── e9d5.png
│ │ │ │ │ ├── e9d6.png
│ │ │ │ │ ├── e9d7.png
│ │ │ │ │ ├── e9d8.png
│ │ │ │ │ ├── e9d9.png
│ │ │ │ │ ├── e9da.png
│ │ │ │ │ ├── e9db.png
│ │ │ │ │ ├── e9dc.png
│ │ │ │ │ ├── e9f8.png
│ │ │ │ │ ├── e9f9.png
│ │ │ │ │ ├── e9fa.png
│ │ │ │ │ ├── e9fb.png
│ │ │ │ │ ├── e9fc.png
│ │ │ │ │ ├── e9fd.png
│ │ │ │ │ ├── e9fe.png
│ │ │ │ │ ├── e9ff.png
│ │ │ │ │ └── ea00.png
│ │ │ │ ├── Icons.axaml
│ │ │ │ └── Icons.xml
│ │ │ ├── Slithin.Modules.Templates.UI.csproj
│ │ │ ├── TemplatesPage.axaml
│ │ │ ├── TemplatesPage.axaml.cs
│ │ │ ├── Validators
│ │ │ │ └── AddTemplateValidator.cs
│ │ │ └── ViewModels
│ │ │ │ ├── AddTemplateModalViewModel.cs
│ │ │ │ └── TemplatesPageViewModel.cs
│ │ ├── Slithin.Modules.Tools.UI
│ │ │ ├── ContextualMenuProvider.cs
│ │ │ ├── Models
│ │ │ │ └── ToolsFilter.cs
│ │ │ ├── Module.cs
│ │ │ ├── Resources
│ │ │ │ ├── Icons.axaml
│ │ │ │ └── Icons.xml
│ │ │ ├── Slithin.Modules.Tools.UI.csproj
│ │ │ ├── ToolsContextualMenu.axaml
│ │ │ ├── ToolsContextualMenu.axaml.cs
│ │ │ ├── ToolsPage.axaml
│ │ │ ├── ToolsPage.axaml.cs
│ │ │ └── ViewModels
│ │ │ │ └── ToolsPageViewModel.cs
│ │ ├── Slithin.Modules.Tools
│ │ │ ├── Module.cs
│ │ │ ├── Slithin.Modules.Tools.csproj
│ │ │ └── ToolInvokerServiceImpl.cs
│ │ ├── Slithin.Modules.UI
│ │ │ ├── Implementations
│ │ │ │ ├── DialogServiceImpl.cs
│ │ │ │ └── NotificationServiceImpl.cs
│ │ │ ├── Modals
│ │ │ │ ├── PromptModal.axaml
│ │ │ │ ├── PromptModal.axaml.cs
│ │ │ │ ├── ShowDialogModal.axaml
│ │ │ │ ├── ShowDialogModal.axaml.cs
│ │ │ │ ├── StatusModal.axaml
│ │ │ │ └── StatusModal.axaml.cs
│ │ │ ├── Module.cs
│ │ │ ├── Slithin.Modules.UI.csproj
│ │ │ ├── StatusController.cs
│ │ │ ├── ViewModels
│ │ │ │ ├── PromptModalViewModel.cs
│ │ │ │ └── ShowDialogModalViewModel.cs
│ │ │ └── loading_animation.json
│ │ └── Slithin.Modules.Updater
│ │ │ ├── Module.cs
│ │ │ ├── ObservableQueue.cs
│ │ │ ├── Resources
│ │ │ └── Icons.xml
│ │ │ ├── Slithin.Modules.Updater.csproj
│ │ │ ├── UpdateRepository.cs
│ │ │ ├── UpdaterImplementation.cs
│ │ │ ├── UpdaterWindow.axaml
│ │ │ ├── UpdaterWindow.axaml.cs
│ │ │ └── ViewModels
│ │ │ └── UpdaterViewModel.cs
│ ├── Slithin.Core
│ │ ├── Debouncer.cs
│ │ ├── FeatureToggle
│ │ │ ├── Feature.cs
│ │ │ ├── FeatureEnabledExtension.cs
│ │ │ ├── Features.cs
│ │ │ └── IFeature.cs
│ │ ├── FilterBase.cs
│ │ ├── IFilterable.cs
│ │ ├── KeyGenerator.cs
│ │ ├── LocalisationExtension.cs
│ │ ├── MVVM
│ │ │ ├── BaseViewModel.cs
│ │ │ ├── DelegateCommand.cs
│ │ │ ├── ModalBaseViewModel.cs
│ │ │ └── NotifyObject.cs
│ │ ├── OpenLinkExtension.cs
│ │ ├── Slithin.Core.csproj
│ │ ├── Utils.cs
│ │ └── ValidationExtensions.cs
│ ├── Slithin.Entities
│ │ ├── Features
│ │ │ ├── DarkModeFeature.cs
│ │ │ ├── ExportEpubFeature.cs
│ │ │ ├── ListViewFeature.cs
│ │ │ ├── ResourcesFeature.cs
│ │ │ └── TemplateEditorFeature.cs
│ │ ├── IPAddress.cs
│ │ ├── LoginInfo.cs
│ │ ├── Page.cs
│ │ ├── Remarkable
│ │ │ ├── ContentFile.cs
│ │ │ ├── Metadata.cs
│ │ │ ├── PageData.cs
│ │ │ └── Template.cs
│ │ └── Slithin.Entities.csproj
│ ├── Slithin.UpdateInstaller
│ │ ├── .gitignore
│ │ ├── Program.cs
│ │ └── Slithin.UpdateInstaller.csproj
│ └── Slithin
│ │ ├── App.axaml
│ │ ├── App.axaml.cs
│ │ ├── Assets
│ │ └── Icons.axaml
│ │ ├── Changelog.txt
│ │ ├── Icon.ico
│ │ ├── Icon.png
│ │ ├── MainWindow.axaml
│ │ ├── MainWindow.axaml.cs
│ │ ├── Module.cs
│ │ ├── Program.cs
│ │ ├── Resources
│ │ ├── Cover.png
│ │ ├── Icon.ico
│ │ ├── Icon.png
│ │ ├── copy.png
│ │ ├── cubes.png
│ │ ├── data-transfer.png
│ │ ├── epub.png
│ │ ├── error.png
│ │ ├── nav.png
│ │ └── new_logo.png
│ │ ├── Slithin.csproj
│ │ ├── Validators
│ │ └── LoginInfoValidator.cs
│ │ ├── ViewModels
│ │ ├── AddDeviceWindowViewModel.cs
│ │ ├── ConnectWindowViewModel.cs
│ │ └── MainWindowViewModel.cs
│ │ ├── Views
│ │ ├── AddDeviceWindow.axaml
│ │ ├── AddDeviceWindow.axaml.cs
│ │ ├── ConnectWindow.axaml
│ │ ├── ConnectWindow.axaml.cs
│ │ └── ContextualMenus
│ │ │ ├── EmptyContextualMenu.axaml
│ │ │ └── EmptyContextualMenu.axaml.cs
│ │ └── linux.desktop
├── Slithin.Controls
│ ├── CommandTextBox.cs
│ ├── ContentDialog.cs
│ ├── DialogControl.cs
│ ├── FileChooser.cs
│ ├── GalleryControl.cs
│ ├── ImageButton.cs
│ ├── ImagePopupButton.cs
│ ├── KryptoDonateButton.cs
│ ├── Link.cs
│ ├── LottieViewer.cs
│ ├── Navigation
│ │ ├── EntranceNavigationTransitionInfo.cs
│ │ ├── Frame.cs
│ │ ├── Frame.properties.cs
│ │ ├── FrameNavigationOptions.cs
│ │ ├── NavigatingCancelEventArgs.cs
│ │ ├── NavigationEventArgs.cs
│ │ ├── NavigationFailedEventArgs.cs
│ │ ├── NavigationMode.cs
│ │ ├── NavigationTransitionInfo.cs
│ │ └── PageStackEntry.cs
│ ├── NodeZoomBorder.cs
│ ├── Notifications
│ │ ├── ActionNotificationControl.axaml
│ │ ├── ActionNotificationControl.axaml.cs
│ │ ├── StatusNotificationControl.axaml
│ │ └── StatusNotificationControl.axaml.cs
│ ├── Ports
│ │ ├── Extensions
│ │ │ ├── TreeExtensions.cs
│ │ │ └── VectorExtension.cs
│ │ ├── Panels
│ │ │ ├── RegularItemsControl.cs
│ │ │ ├── SimpleItemsControl.cs
│ │ │ └── SimplePanel.cs
│ │ ├── RatingControl
│ │ │ ├── RateItem.cs
│ │ │ └── RatingControl.cs
│ │ ├── ResizeRotateControl
│ │ │ ├── DoubleFormatConverter.cs
│ │ │ ├── MoveThumb.cs
│ │ │ ├── PositionChangedEventArgs.cs
│ │ │ ├── ResizeRotateControl.Attributes.cs
│ │ │ ├── ResizeRotateControl.cs
│ │ │ ├── ResizeThumb.cs
│ │ │ ├── RotateThumb.cs
│ │ │ └── RotatedEventArgs.cs
│ │ ├── RoutedEventArgsOfT.cs
│ │ ├── RoutedPropertyChangedEventArgs.cs
│ │ └── StepBar
│ │ │ ├── StepBar.cs
│ │ │ ├── StepBarItem.cs
│ │ │ └── StepStatus.cs
│ ├── PreviewImageControl.cs
│ ├── RadioButtonGroup.cs
│ ├── RadioImage.cs
│ ├── Settings
│ │ └── SettingsGroup.cs
│ ├── Slithin.Controls.csproj
│ ├── Step.cs
│ ├── StepManager.cs
│ ├── StoreCardCollection.cs
│ ├── TagControl.cs
│ ├── Theme
│ │ ├── Generic.axaml
│ │ └── Styles
│ │ │ ├── CommandTextBox.axaml
│ │ │ ├── ContentDialogStyle.axaml
│ │ │ ├── DialogControlStyle.axaml
│ │ │ ├── FileChooser.axaml
│ │ │ ├── FirstWindowCardStyle.axaml
│ │ │ ├── FrameStyles.axaml
│ │ │ ├── ImageButton.axaml
│ │ │ ├── ImagePopupButtonStyle.axaml
│ │ │ ├── Marketplace
│ │ │ ├── GalleryControl.axaml
│ │ │ └── StoreCardCollection.axaml
│ │ │ ├── Ports
│ │ │ ├── RateItem.axaml
│ │ │ ├── RatingControl.axaml
│ │ │ ├── StepBar.axaml
│ │ │ └── StepBarItem.axaml
│ │ │ ├── PreviewImageControl.axaml
│ │ │ ├── RadioButtonGroup.axaml
│ │ │ ├── RadioButtonGroup.axaml.cs
│ │ │ ├── RadioImage.axaml
│ │ │ ├── Settings
│ │ │ ├── KryptoDonateButton.axaml
│ │ │ └── SettingsGroup.axaml
│ │ │ ├── System
│ │ │ ├── ButtonStyle.axaml
│ │ │ ├── IndicatorStyle.axaml
│ │ │ ├── LinkStyle.axaml
│ │ │ ├── NotificationCard.axaml
│ │ │ └── SplitViewStyle.axaml
│ │ │ └── TagControl.axaml
│ └── XmlNsDefinition.cs
├── Slithin.Modules.UI
│ ├── DialogHost.cs
│ ├── DialogServiceExtensions.cs
│ ├── IDialogService.cs
│ ├── INotificationService.cs
│ ├── IStatusController.cs
│ └── Slithin.Modules.UI.Models.csproj
├── Slithin.sln
├── Slithin
│ ├── .gitignore
│ ├── Core
│ │ └── Sync
│ │ │ ├── IRepository.cs
│ │ │ └── Repositorys
│ │ │ ├── DeviceRepository.cs
│ │ │ └── LocalRepository.cs
│ ├── Icon.png
│ ├── Properties
│ │ └── launchSettings.json
│ ├── Slithin.csproj
│ └── Validators
│ │ ├── AddTemplateValidator.cs
│ │ ├── AppendNotebookValidator.cs
│ │ ├── CreateNotebookValidator.cs
│ │ ├── ExportValidator.cs
│ │ └── LoginInfoValidator.cs
├── SlithinMarketplace
│ ├── AuthorizationServerProvider.cs
│ ├── Content
│ │ ├── favicon-16x16.png
│ │ ├── favicon-32x32.png
│ │ ├── index.css
│ │ ├── index.html
│ │ ├── oauth2-redirect.html
│ │ ├── swagger-initializer.js
│ │ ├── swagger-ui-bundle.js
│ │ ├── swagger-ui-bundle.js.map
│ │ ├── swagger-ui-es-bundle-core.js
│ │ ├── swagger-ui-es-bundle-core.js.map
│ │ ├── swagger-ui-es-bundle.js
│ │ ├── swagger-ui-es-bundle.js.map
│ │ ├── swagger-ui-standalone-preset.js
│ │ ├── swagger-ui-standalone-preset.js.map
│ │ ├── swagger-ui.css
│ │ ├── swagger-ui.css.map
│ │ ├── swagger-ui.js
│ │ ├── swagger-ui.js.map
│ │ └── theme-newspaper.css
│ ├── Controller
│ │ ├── FilesController.cs
│ │ ├── RegisterUserController.cs
│ │ ├── ScreenController.cs
│ │ └── TemplatesController.cs
│ ├── Extensions.cs
│ ├── Program.cs
│ ├── Properties
│ │ └── launchSettings.json
│ ├── Repository.cs
│ ├── S3Wrapper.cs
│ ├── ServiceLocator.cs
│ ├── SlithinMarketplace.csproj
│ └── Utils.cs
└── Windows-Store
│ ├── Images
│ ├── LargeTile.scale-100.png
│ ├── LargeTile.scale-125.png
│ ├── LargeTile.scale-150.png
│ ├── LargeTile.scale-200.png
│ ├── LargeTile.scale-400.png
│ ├── LockScreenLogo.scale-200.png
│ ├── SmallTile.scale-100.png
│ ├── SmallTile.scale-125.png
│ ├── SmallTile.scale-150.png
│ ├── SmallTile.scale-200.png
│ ├── SmallTile.scale-400.png
│ ├── SplashScreen.scale-100.png
│ ├── SplashScreen.scale-125.png
│ ├── SplashScreen.scale-150.png
│ ├── SplashScreen.scale-200.png
│ ├── SplashScreen.scale-400.png
│ ├── Square150x150Logo.scale-100.png
│ ├── Square150x150Logo.scale-125.png
│ ├── Square150x150Logo.scale-150.png
│ ├── Square150x150Logo.scale-200.png
│ ├── Square150x150Logo.scale-400.png
│ ├── Square44x44Logo.altform-lightunplated_targetsize-16.png
│ ├── Square44x44Logo.altform-lightunplated_targetsize-24.png
│ ├── Square44x44Logo.altform-lightunplated_targetsize-256.png
│ ├── Square44x44Logo.altform-lightunplated_targetsize-32.png
│ ├── Square44x44Logo.altform-lightunplated_targetsize-48.png
│ ├── Square44x44Logo.altform-unplated_targetsize-16.png
│ ├── Square44x44Logo.altform-unplated_targetsize-256.png
│ ├── Square44x44Logo.altform-unplated_targetsize-32.png
│ ├── Square44x44Logo.altform-unplated_targetsize-48.png
│ ├── Square44x44Logo.scale-100.png
│ ├── Square44x44Logo.scale-125.png
│ ├── Square44x44Logo.scale-150.png
│ ├── Square44x44Logo.scale-200.png
│ ├── Square44x44Logo.scale-400.png
│ ├── Square44x44Logo.targetsize-16.png
│ ├── Square44x44Logo.targetsize-24.png
│ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ ├── Square44x44Logo.targetsize-256.png
│ ├── Square44x44Logo.targetsize-32.png
│ ├── Square44x44Logo.targetsize-48.png
│ ├── StoreLogo.backup.png
│ ├── StoreLogo.scale-100.png
│ ├── StoreLogo.scale-125.png
│ ├── StoreLogo.scale-150.png
│ ├── StoreLogo.scale-200.png
│ ├── StoreLogo.scale-400.png
│ ├── Wide310x150Logo.scale-100.png
│ ├── Wide310x150Logo.scale-125.png
│ ├── Wide310x150Logo.scale-150.png
│ ├── Wide310x150Logo.scale-200.png
│ └── Wide310x150Logo.scale-400.png
│ ├── Package.appxmanifest
│ └── Windows-Store.wapproj
├── Tools
└── LocalisationSearcher
│ ├── LocalisationSearcher.csproj
│ ├── Program.cs
│ └── Properties
│ └── launchSettings.json
├── crowdin.yml
└── docker-compose.yml
/.dockerignore:
--------------------------------------------------------------------------------
1 | **/.classpath
2 | **/.dockerignore
3 | **/.env
4 | **/.git
5 | **/.gitignore
6 | **/.project
7 | **/.settings
8 | **/.toolstarget
9 | **/.vs
10 | **/.vscode
11 | **/*.*proj.user
12 | **/*.dbmdl
13 | **/*.jfm
14 | **/azds.yaml
15 | **/bin
16 | **/charts
17 | **/docker-compose*
18 | **/Dockerfile*
19 | **/node_modules
20 | **/npm-debug.log
21 | **/obj
22 | **/secrets.dev.yaml
23 | **/values.dev.yaml
24 | LICENSE
25 | README.md
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: Slithin
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: # Replace with a single Ko-fi username
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: # Replace with a single Liberapay username
10 | issuehunt: furesoft
11 | otechie: # Replace with a single Otechie username
12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
13 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
14 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: "[Feature]"
5 | labels: Feature
6 | assignees: furesoft
7 | projecta: "Slithin Beta"
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | # Set update schedule for each package manager
2 |
3 | version: 2
4 | updates:
5 | - package-ecosystem: "github-actions"
6 | directory: "/"
7 | schedule:
8 | # Check for updates to GitHub Actions every weekday
9 | interval: "daily"
10 | open-pull-requests-limit: 15
11 |
12 | - package-ecosystem: "nuget"
13 | directory: "/"
14 | schedule:
15 | # Check for updates managed by NuGet once a week
16 | interval: "daily"
17 | open-pull-requests-limit: 15
18 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM mcr.microsoft.com/dotnet/sdk:7.0 AS base
2 | WORKDIR /srv
3 |
4 | COPY . /srv
5 |
6 | RUN dotnet restore "./Source/New/MarketplaceService/MarketplaceService.csproj"
7 | RUN dotnet build "./Source/New/MarketplaceService/MarketplaceService.csproj" -c Release -o /srv/build && \
8 | dotnet publish "./Source/New/MarketplaceService/MarketplaceService.csproj" -c Release -o /srv/publish
9 |
10 | FROM mcr.microsoft.com/dotnet/runtime:7.0
11 | WORKDIR /app
12 |
13 | COPY --from=base /srv/publish /app
14 | EXPOSE 9696
15 | ENTRYPOINT ["dotnet", "/app/MarketplaceService.dll"]
16 |
--------------------------------------------------------------------------------
/Manual.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/furesoft/Slithin/da03d680181bc1282dacb7cd03e916128ad0bc7a/Manual.docx
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | ## Supported Versions
4 |
5 | Use this section to tell people about which versions of your project are
6 | currently being supported with security updates.
7 |
8 | | Version | Supported |
9 | | ------- | ------------------ |
10 | | > 1.0.16 | :white_check_mark: |
11 | | < 1.0.16 | :x: |
12 |
13 |
--------------------------------------------------------------------------------
/Screenshots/connect.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/furesoft/Slithin/da03d680181bc1282dacb7cd03e916128ad0bc7a/Screenshots/connect.png
--------------------------------------------------------------------------------
/Screenshots/device.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/furesoft/Slithin/da03d680181bc1282dacb7cd03e916128ad0bc7a/Screenshots/device.png
--------------------------------------------------------------------------------
/Screenshots/notebooks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/furesoft/Slithin/da03d680181bc1282dacb7cd03e916128ad0bc7a/Screenshots/notebooks.png
--------------------------------------------------------------------------------
/Screenshots/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/furesoft/Slithin/da03d680181bc1282dacb7cd03e916128ad0bc7a/Screenshots/settings.png
--------------------------------------------------------------------------------
/Screenshots/templates.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/furesoft/Slithin/da03d680181bc1282dacb7cd03e916128ad0bc7a/Screenshots/templates.png
--------------------------------------------------------------------------------
/Screenshots/tools.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/furesoft/Slithin/da03d680181bc1282dacb7cd03e916128ad0bc7a/Screenshots/tools.png
--------------------------------------------------------------------------------
/Source/.dockerignore:
--------------------------------------------------------------------------------
1 | **/.classpath
2 | **/.dockerignore
3 | **/.env
4 | **/.git
5 | **/.gitignore
6 | **/.project
7 | **/.settings
8 | **/.toolstarget
9 | **/.vs
10 | **/.vscode
11 | **/*.*proj.user
12 | **/*.dbmdl
13 | **/*.jfm
14 | **/azds.yaml
15 | **/bin
16 | **/charts
17 | **/docker-compose*
18 | **/Dockerfile*
19 | **/node_modules
20 | **/npm-debug.log
21 | **/obj
22 | **/secrets.dev.yaml
23 | **/values.dev.yaml
24 | LICENSE
25 | README.md
--------------------------------------------------------------------------------
/Source/.idea/.idea.Slithin/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Rider ignored files
5 | /modules.xml
6 | /.idea.Slithin.iml
7 | /contentModel.xml
8 | /projectSettingsUpdater.xml
9 | # Editor-based HTTP Client requests
10 | /httpRequests/
11 | # Datasource local storage ignored files
12 | /dataSources/
13 | /dataSources.local.xml
14 |
--------------------------------------------------------------------------------
/Source/.idea/.idea.Slithin/.idea/.name:
--------------------------------------------------------------------------------
1 | Slithin
--------------------------------------------------------------------------------
/Source/.idea/.idea.Slithin/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/Source/.idea/.idea.Slithin/.idea/indexLayout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Source/.idea/.idea.Slithin/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/Source/ApiConsole/ApiConsole.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | net6.0
6 | enable
7 | enable
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/Source/ApiConsole/Commands/FilesCommand.cs:
--------------------------------------------------------------------------------
1 | using ApiConsole.Core;
2 | using CommandLine;
3 |
4 | namespace ApiConsole.Commands;
5 |
6 | [Verb("files", HelpText = "Act with files")]
7 | public class FilesCommand : ICommand
8 | {
9 | [Option('d', "download", HelpText = "Flag for downloading a file")]
10 | public bool Download { get; set; }
11 |
12 | [Option('f', "fiilename", HelpText = "filename and path to save the file to")]
13 | public string Filename { get; set; }
14 |
15 | [Option('i', "id", HelpText = "File ID to download")]
16 | public string ID { get; set; }
17 |
18 | public void Execute()
19 | {
20 | if (Download)
21 | {
22 | ServiceLocator.API.DownloadFile(ID, Filename);
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Source/ApiConsole/Commands/LoginCommand.cs:
--------------------------------------------------------------------------------
1 | using ApiConsole.Core;
2 | using CommandLine;
3 |
4 | namespace ApiConsole.Commands;
5 |
6 | [Verb("login", true, HelpText = "Login to the marketplace api")]
7 | public class LoginCommand : ICommand
8 | {
9 | [Option('p', "password", Required = true, HelpText = "The password to login with")]
10 | public string Password { get; set; }
11 |
12 | [Option('u', "username", Required = true, HelpText = "The username to login with")]
13 | public string Username { get; set; }
14 |
15 | public void Execute()
16 | {
17 | ServiceLocator.API.Authenticate(Username, Password);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Source/ApiConsole/Core/ICommand.cs:
--------------------------------------------------------------------------------
1 | namespace ApiConsole.Core;
2 |
3 | public interface ICommand
4 | {
5 | void Execute();
6 | }
7 |
--------------------------------------------------------------------------------
/Source/ApiConsole/Properties/launchSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "profiles": {
3 | "ApiConsole": {
4 | "commandName": "Project",
5 | "commandLineArgs": "-i"
6 | }
7 | }
8 | }
--------------------------------------------------------------------------------
/Source/ApiConsole/ServiceLocator.cs:
--------------------------------------------------------------------------------
1 | namespace ApiConsole;
2 |
3 | public static class ServiceLocator
4 | {
5 | public static readonly MarketplaceAPI API = new();
6 | }
7 |
--------------------------------------------------------------------------------
/Source/New/MarketplaceService/Properties/launchSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "profiles": {
3 | "http": {
4 | "commandName": "Project",
5 | "environmentVariables": {
6 | "ASPNETCORE_ENVIRONMENT": "Development"
7 | },
8 | "dotnetRunMessages": true,
9 | "applicationUrl": "http://localhost:5039"
10 | },
11 | "https": {
12 | "commandName": "Project",
13 | "environmentVariables": {
14 | "ASPNETCORE_ENVIRONMENT": "Development"
15 | },
16 | "dotnetRunMessages": true,
17 | "applicationUrl": "https://localhost:7200;http://localhost:5039"
18 | },
19 | "Docker": {
20 | "commandName": "Docker",
21 | "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
22 | "publishAllPorts": true
23 | }
24 | }
25 | }
--------------------------------------------------------------------------------
/Source/New/MarketplaceService/ProtoContoller.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 |
3 | namespace MarketplaceService;
4 |
5 | public class ProtoController
6 | {
7 | public Stream Get(string protoName)
8 | {
9 | var assembly = Assembly.GetEntryAssembly();
10 |
11 | return assembly.GetManifestResourceStream($"{assembly.GetName().Name}.Protos.{protoName}.proto");
12 | }
13 |
14 | public IEnumerable GetAvailable()
15 | {
16 | return Assembly.GetEntryAssembly().GetManifestResourceNames().Select(_ => _.Split('.')[^2]);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Source/New/MarketplaceService/Protos/Authentication.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 |
3 | option csharp_namespace = "MarketplaceService.Protos";
4 |
5 | package Marketplace;
6 |
7 | service AuthenticationService {
8 | rpc Authenticate(Grant) returns(AuthResult);
9 | rpc RefreshToken(RefreshTokenRequest) returns(AuthResult);
10 | rpc Register(User) returns(RegistrationResponse);
11 | }
12 |
13 | message Grant {
14 | string username = 1;
15 | string password = 2;
16 | }
17 |
18 | message AuthResult {
19 | string token = 1;
20 | }
21 |
22 | message RegistrationResponse {
23 | bool success = 1;
24 | }
25 |
26 | message RefreshTokenRequest {
27 | string token = 1;
28 | }
29 |
30 | message User {
31 | string username = 1;
32 | string password = 2;
33 | }
--------------------------------------------------------------------------------
/Source/New/MarketplaceService/Protos/Storage.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 |
3 | option csharp_namespace = "MarketplaceService.Protos";
4 |
5 | package Marketplace;
6 |
7 | service StorageService {
8 | rpc GetFileList(FileListRequest) returns(FileListResponse);
9 | }
10 |
11 | message FileListRequest {
12 | string bucket = 1;
13 | }
14 |
15 | message FileListResponse {
16 | repeated string filenames = 1;
17 | }
--------------------------------------------------------------------------------
/Source/New/MarketplaceService/Services/StorageService.cs:
--------------------------------------------------------------------------------
1 | using Grpc.Core;
2 | using MarketplaceService.Protos;
3 | using Microsoft.AspNetCore.Authorization;
4 |
5 | namespace MarketplaceService.Services;
6 |
7 | public class Storage : Protos.StorageService.StorageServiceBase
8 | {
9 | [Authorize]
10 | public override async Task GetFileList(FileListRequest request, ServerCallContext context)
11 | {
12 | var response = new FileListResponse();
13 |
14 | response.Filenames.Add("test.png");
15 |
16 | return response;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Source/New/MarketplaceService/appsettings.Development.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft.AspNetCore": "Warning"
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/Source/New/MarketplaceService/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft.AspNetCore": "Warning"
6 | }
7 | },
8 | "AllowedHosts": "*",
9 | "Kestrel": {
10 | "Endpoints": {
11 | "Grpc": {
12 | "Protocols": "Http2",
13 | "Url": "http://localhost:5039"
14 | },
15 | "webApi": {
16 | "Protocols": "Http1",
17 | "Url": "http://localhost:80"
18 | }
19 | }
20 | }
21 | }
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Entities.Remarkable/Rendering/Colors.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Entities.Remarkable.Rendering;
2 |
3 | public enum Colors
4 | {
5 | Black = 0,
6 |
7 | Gray = 1,
8 |
9 | White = 2,
10 | Yellow = 3,
11 | Green = 4,
12 | Blue = 6,
13 | Red = 7,
14 | Pink = 5
15 | }
16 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Entities.Remarkable/Rendering/Layer.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Entities.Remarkable.Rendering;
2 |
3 | public class Layer
4 | {
5 | public List Lines { get; set; } = new();
6 | }
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Entities.Remarkable/Rendering/Line.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Entities.Remarkable.Rendering;
2 |
3 | public struct Line
4 | {
5 | public BrushBaseSize BrushBaseSize;
6 | public Brushes BrushType;
7 | public Colors Color;
8 | public List Points;
9 | public int unknown_line_attribute;
10 | }
11 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Entities.Remarkable/Rendering/Point.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Entities.Remarkable.Rendering;
2 |
3 | public struct Point
4 | {
5 | public float Direction;
6 | public float Pressure;
7 | public float Speed;
8 | public float Width;
9 | public float X;
10 | public float Y;
11 | }
12 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Entities.Remarkable/Rendering/Ranges.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Entities.Remarkable.Rendering;
2 |
3 | public struct Ranges
4 | {
5 | public const float MaxDirection = (float)(Math.PI * 2.0);
6 | public const float MaxPressure = 1.0f;
7 | public const float MinDirection = 0.0f;
8 | public const float MinPressure = 0.0f;
9 | }
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.BaseServices.Models/ICacheService.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.BaseServices.Models;
2 |
3 | public interface ICacheService
4 | {
5 | void AddObject(string name, T obj);
6 |
7 | T GetObject(string name, Func? objFactory = default);
8 |
9 | bool Contains(string name);
10 | }
11 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.BaseServices.Models/IDeviceDiscovery.cs:
--------------------------------------------------------------------------------
1 | using System.Net;
2 |
3 | namespace Slithin.Modules.BaseServices.Models;
4 |
5 | public interface IDeviceDiscovery
6 | {
7 | IPAddress? Discover();
8 | }
9 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.BaseServices.Models/IEventService.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.BaseServices.Models;
2 |
3 | public interface IEventService
4 | {
5 | void Invoke(string name, T argument);
6 |
7 | void Subscribe(string name, Action action);
8 | }
9 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.BaseServices.Models/IPathManager.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.BaseServices.Models;
2 |
3 | public interface IPathManager
4 | {
5 | public string BackupsDir { get; }
6 | public string ConfigBaseDir { get; set; }
7 | public string CustomScreensDir { get; }
8 | public string DevicesDir { get; }
9 | public string NotebooksDir { get; }
10 | public string SlithinDir { get; }
11 | public string TemplatesDir { get; }
12 |
13 | void Init();
14 |
15 | void InitDeviceDirectory();
16 |
17 | void ReLink(string deviceName);
18 | }
19 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.BaseServices.Models/Slithin.Modules.BaseServices.Models.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net7.0
5 | enable
6 | enable
7 | true
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Device.Models/CommandResult.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.Device.Models;
2 |
3 | public class CommandResult
4 | {
5 | public CommandResult(string error, string result)
6 | {
7 | Error = error;
8 | Result = result;
9 | }
10 |
11 | public CommandResult(string result)
12 | {
13 | Result = result;
14 | Error = string.Empty;
15 | }
16 |
17 | public string Error { get; }
18 | public string Result { get; }
19 | }
20 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Device.Models/DevicePathList.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.Device.Models;
2 |
3 | public class DevicePathList
4 | {
5 | public string Notebooks = "/home/root/.local/share/remarkable/xochitl/";
6 | public string Screens = "/usr/share/remarkable/";
7 | public string Templates = "/usr/share/remarkable/templates/";
8 | }
9 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Device.Models/FileFetchResult.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.Device.Models;
2 |
3 | public readonly record struct FileFetchResult
4 | {
5 | public string ShortPath { get; init; }
6 | public string FullPath { get; init; }
7 | public long LastModified { get; init; }
8 | }
9 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Device.Models/IXochitlService.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.Device.Models;
2 |
3 | public interface IXochitlService
4 | {
5 | bool GetIsBeta();
6 |
7 | string GetProperty(string key, string section);
8 |
9 | string[] GetShareEmailAddresses();
10 |
11 | string GetToken(string key, string section);
12 |
13 | void Init();
14 |
15 | void Save();
16 |
17 | void SetPowerOffDelay(int value);
18 |
19 | void SetProperty(string key, string section, object value);
20 |
21 | void SetShareMailAddresses(IEnumerable mailAddresses);
22 |
23 | void Upload();
24 | }
25 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Device.Models/Slithin.Modules.Device.Models.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net7.0
5 | enable
6 | enable
7 | True
8 | 1.0.21
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Diagnostics.Sentry.Models/IDiagnosticService.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.Diagnostics.Sentry.Models;
2 |
3 | public interface IDiagnosticService
4 | {
5 | void TrackException(Exception exception);
6 |
7 | IDisposable StartPerformanceMonitoring(string name, string operation);
8 | }
9 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Diagnostics.Sentry.Models/IFeedbackService.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.Diagnostics.Sentry.Models;
2 |
3 | public interface IFeedbackService
4 | {
5 | void SendFeedback(string message);
6 | }
7 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Diagnostics.Sentry.Models/PerformanceMonitor.cs:
--------------------------------------------------------------------------------
1 | using Sentry;
2 |
3 | namespace Slithin.Modules.Diagnostics.Sentry.Models;
4 |
5 | public class PerformanceMonitor : IDisposable
6 | {
7 | private ISpan _span;
8 | private ITransaction _transaction;
9 |
10 | public PerformanceMonitor(string name, string operation)
11 | {
12 | _transaction = SentrySdk.StartTransaction(name, operation);
13 | _span = _transaction.StartChild(operation);
14 | }
15 |
16 | public void Dispose()
17 | {
18 | _transaction.Finish();
19 | _span.Finish();
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Diagnostics.Sentry.Models/Slithin.Modules.Diagnostics.Sentry.Models.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net7.0
5 | enable
6 | enable
7 | True
8 | 1.0.21
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Export.Models/ExportDocument.cs:
--------------------------------------------------------------------------------
1 | using EpubSharp;
2 | using OneOf;
3 | using PdfSharpCore.Pdf;
4 | using Slithin.Entities.Remarkable.Rendering;
5 |
6 | namespace Slithin.Modules.Export.Models;
7 |
8 | [GenerateOneOf]
9 | public partial class ExportDocument : OneOfBase
10 | {
11 | }
12 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Export.Models/IExportProvider.cs:
--------------------------------------------------------------------------------
1 | using Slithin.Entities.Remarkable;
2 |
3 | namespace Slithin.Modules.Export.Models;
4 |
5 | public interface IExportProvider
6 | {
7 | bool ExportSingleDocument { get; }
8 | string Title { get; }
9 |
10 | bool CanHandle(Metadata md);
11 |
12 | bool Export(ExportOptions options, Metadata metadata, string outputPath, IProgress progress);
13 | }
14 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Export.Models/IExportProviderFactory.cs:
--------------------------------------------------------------------------------
1 | using Slithin.Entities.Remarkable;
2 |
3 | namespace Slithin.Modules.Export.Models;
4 |
5 | public interface IExportProviderFactory
6 | {
7 | IExportProvider[] GetAvailableProviders(Metadata md);
8 |
9 | IExportProvider GetExportProvider(string type);
10 |
11 | void Init();
12 | }
13 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Export.Models/IExportService.cs:
--------------------------------------------------------------------------------
1 | using Slithin.Entities.Remarkable;
2 |
3 | namespace Slithin.Modules.Export.Models;
4 |
5 | public interface IExportService
6 | {
7 | Task Export(Metadata metadata);
8 | }
9 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Export.Models/IRenderingService.cs:
--------------------------------------------------------------------------------
1 | using Slithin.Entities.Remarkable;
2 | using Slithin.Entities.Remarkable.Rendering;
3 |
4 | namespace Slithin.Modules.Export.Models;
5 |
6 | public interface IRenderingService
7 | {
8 | Stream RenderSvg(Page page, int pageIndex, Metadata md, bool shouldHideTemplates = false, int width = 1404,
9 | int height = 1872);
10 |
11 | Stream RenderPng(Page page, int pageIndex, Metadata md, bool shouldHideTemplates = false, int width = 1404,
12 | int height = 1872);
13 | }
14 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.I18N.Models/ILocalisationService.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.I18N.Models;
2 |
3 | public interface ILocalisationService
4 | {
5 | string GetString(string key);
6 |
7 | public string GetStringFormat(string key, params object[] args)
8 | {
9 | return string.Format(GetString(key), args);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.I18N.Models/Slithin.Modules.I18N.Models.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net7.0
5 | enable
6 | enable
7 | True
8 | 1.0.21
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.I18N.Models/ValidationExtensions.cs:
--------------------------------------------------------------------------------
1 | using AuroraModularis.Core;
2 | using FluentValidation;
3 |
4 | namespace Slithin.Modules.I18N.Models;
5 |
6 | public static class ValidationExtensions
7 | {
8 | public static IRuleBuilderOptions WithLocalisedMessage(this IRuleBuilderOptions rule, string key)
9 | {
10 | var localisatinService = ServiceContainer.Current.Resolve();
11 |
12 | return rule.WithMessage(localisatinService.GetString(key));
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Import.Models/IImportProvider.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.Import.Models;
2 |
3 | public interface IImportProvider
4 | {
5 | bool CanHandle(string filename);
6 |
7 | Stream Import(Stream source);
8 | }
9 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Import.Models/IImportProviderFactory.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.Import.Models;
2 |
3 | public interface IImportProviderFactory
4 | {
5 | IImportProvider? GetImportProvider(string baseExtension, string filename);
6 |
7 | void Init();
8 | }
9 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Import.Models/ImportProviderBaseTypeAttribute.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.Import.Models;
2 |
3 | [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
4 | public class ImportProviderBaseTypeAttribute : Attribute
5 | {
6 | public ImportProviderBaseTypeAttribute(string extension)
7 | {
8 | Extension = extension;
9 | }
10 |
11 | public string Extension { get; set; }
12 | }
13 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Import.Models/Slithin.Modules.Import.Models.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net7.0
5 | enable
6 | enable
7 | True
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Menu.Models/ContextualMenu/ContextualElement.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.Menu.Models.ContextualMenu;
2 |
3 | public abstract class ContextualElement : Slithin.Core.MVVM.NotifyObject
4 | {
5 | private object? _dataContext;
6 | private bool _isVisible = true;
7 |
8 | public object? DataContext
9 | {
10 | get { return _dataContext; }
11 | set { SetValue(ref _dataContext, value); }
12 | }
13 |
14 |
15 | public bool IsVisible
16 | {
17 | get
18 | {
19 | return _isVisible;
20 | }
21 | set
22 | {
23 | this.SetValue(ref _isVisible, value);
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Menu.Models/ContextualMenu/IContextualMenuBuilder.cs:
--------------------------------------------------------------------------------
1 | using Avalonia.Controls;
2 |
3 | namespace Slithin.Modules.Menu.Models.ContextualMenu;
4 |
5 | public interface IContextualMenuBuilder
6 | {
7 | UserControl BuildContextualMenu(string id);
8 |
9 | void Init();
10 | }
11 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Menu.Models/ContextualMenu/IContextualMenuProvider.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.Menu.Models.ContextualMenu;
2 |
3 | public interface IContextualMenuProvider
4 | {
5 | void RegisterContextualMenuElements(ContextualRegistrar registrar);
6 | }
7 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Menu.Models/ContextualMenu/IContextualMenuRegistrar.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.Menu.Models.ContextualMenu;
2 |
3 | public interface IContextualMenuRegistrar
4 | {
5 | void RegisterMenuItems(ContextualRegistrar registrar);
6 | }
7 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Menu.Models/IContextMenuProvider.cs:
--------------------------------------------------------------------------------
1 | using Avalonia.Controls;
2 | using Slithin.Modules.Menu.Models.ItemContext;
3 |
4 | namespace Slithin.Modules.Menu.Models;
5 |
6 | public interface IContextMenuProvider
7 | {
8 | void AddProvider(IContextProvider provider);
9 |
10 | ContextMenu BuildMenu(string pageID, T item, object parent = null);
11 |
12 | void Init();
13 | }
14 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Menu.Models/ItemContext/ContextAttribute.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.Menu.Models.ItemContext;
2 |
3 | [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
4 | public class ContextAttribute : Attribute
5 | {
6 | public ContextAttribute(string context)
7 | {
8 | Context = context;
9 | }
10 |
11 | public string Context { get; }
12 | }
13 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Menu.Models/ItemContext/IContextCommand.cs:
--------------------------------------------------------------------------------
1 | namespace Slithin.Modules.Menu.Models.ItemContext;
2 |
3 | public interface IContextCommand
4 | {
5 | public object ParentViewModel { get; set; }
6 | public string Titel { get; }
7 |
8 | bool CanExecute(object data);
9 |
10 | void Execute(object data);
11 | }
12 |
--------------------------------------------------------------------------------
/Source/New/Models/Slithin.Modules.Menu.Models/ItemContext/IContextProvider.cs:
--------------------------------------------------------------------------------
1 | using Avalonia.Controls;
2 |
3 | namespace Slithin.Modules.Menu.Models.ItemContext;
4 |
5 | public interface IContextProvider
6 | {
7 | object ParentViewModel { get; set; }
8 |
9 | bool CanHandle(object obj);
10 |
11 | ICollection