Skip to content

UniScan Client v0.1.0

Choose a tag to compare

@github-actions github-actions released this 28 Aug 04:44
· 22 commits to main since this release
791a302

What's Changed

  • Remotes are now stored per file instead of one large file.
  • UI has been neatened up.
  • The server now sends metadata containing a logo, various information, an MOTD, links, etc.
    • The UI has been updated to display this information too.
    • This information is also cached by the client

UniScan.Client.App.Platform.Android

  • Added cache path
  • Added UniScanPlatformAttribute to assembly

UniScan.Client.App.Platform.Browser

  • Added cache path
  • Added UniScanPlatformAttribute to assembly

UniScan.Client.App.Platform.Desktop

  • Added cache path
  • Added UniScanPlatformAttribute to assembly

UniScan.Client.App

  • RemoteInfo is now used

  • Added several remote controls:

    • RemoteInfoControl: Displays the remote logo, title, description, and a set of links
    • RemoteLinkControl: Displays the link's logo, title, and url
  • RemoteInfoView now shows RemoteInfoControl in addition to a bottom area for an optional MOTD that the server may provide.

  • RemoteInfoView is now tabbed, with an Announcements tab for viewing server announcements

  • Improved the look of several views:

    • NotConnectedRemotePageView now shows the remote logo and name, and is now centered
    • DisconnectedRemotePageView now shows the remote logo and name, and is now centered
    • The sidebar in MainView has been expanded to properly show remote logos
    • HomePageView now shows a message when not connected to any remotes
    • HomePageView now shows a logo in each remote expander when available
  • Improved the look of several controls:

    • DeviceListControl now properly fills its available space with devices
    • SidebarRemoteItemControl now displays a logo next to the name if available
  • LoadingViewModel now accepts any TaskPipeline to listen to

  • A loading screen is now shown when connecting to a Remote

  • Added UniScanPlatformAttribute

    • Fixes Android crashing due to GetEntryAssembly() failing due to JNI

Breaking Changes

  • Large restructuring
    • Among the changes, all views and viewmodels were merged into one folder and renamed
  • Moved task context stuff to a new Shiki project

UniScan.Client.Core

  • Added RemoteCacheDto for caching RemoteInfo

  • Added RemoteInfoPacketHandler for handling and setting RemoteInfo

  • Created a new remote connection pipeline (RemoteConnectionPipeline)

  • Added IRemoteServerMutationProxy for mutating RemoteServer without explicitly allowing mutation in the original class definition

  • Added a large storage system (from another project I was working on)

    • Will likely be moved to Shiki in the future along with platform abstractions

Breaking Changes

  • Packet registration and remote loading have been moved out of UniScanClient and into our app initialization pipeline
  • App initialization task contexts no longer store UniScanClient
  • Dissolved most of UniScanClient in favor of a method that adds its services to DI.
    • This means that UniScanClient now doesn't do much; however, it will not be removed incase it needs to store anything that isn't a service.
  • Added UniScanClientDependencyInjection.AddUniScanClient
    • This method performs most of the functions of the old UniScanClient's CreateInstanceAsync, but on an existing DI container.
  • RemoteDto no longer holds a display name
  • Removed RemotesListFile in favor of RemoteStorage which observes a list of Remotes inside IRemoteManager to determine when to save
  • IRemoteFactory now requires a GUID in both Create method definitions
  • RemoteServer constructors now require a GUID and IClientSocketFactory instance

UniScan.Device

Breaking Changes

  • Removed DeviceState.Lock and DeviceState.Attributes
  • Removed IScannerEvents.OnStateUpdated
  • Scanner.State is now a IReadOnlyBindableReactiveProperty

UniScan.Network.Client

  • Added IRemoteConnectionMethod.ToDisplayString()
    • Used primarily to get the display string for a remote that does not have a cached name
  • Added IClientSocketFactory and ClientSocketFactory
    • Used to cut down on constructor parameters by providing a singleton passable object that can create a ClientSocket

UniScan.Network.Server

  • Added ClientsManager
    • Used to hold a global list of currently connected clients and provide a way to broadcast a packet to each one.
  • Added ServerSocket.ClientManager
  • Added SubscribableGroup.Contains(IChannel)

UniScan.Network

  • Added RemoteAnnouncementAuthor
    • This will be replaced by a list of user ids in the future that refer to registered users once an auth and user system is in place

Breaking Changes

  • The protocol version is now 4

  • ISocket.SendRequestAsync now accepts a CancellationToken

  • RemoteAnnouncement now stores a list of authors

  • RemoteLink.Url is now a Uri

  • RemoteInfoPacket is no longer a request packet, and is instead sent by the server whenever desired and consumed by the client

  • Removed GetRemoteInfoPacket

  • SubscribePacket is now a proper MessagePackObject

UniScan.Platform

  • Added IPlatformDirectoryManager.DeleteAsync
  • Added IPlatformDirectoryManager.EnumerateAsync

Breaking Changes

  • Added IPlatformFileSystemManager
    • Used to share method signatures between the file and directory managers
  • Removed IPlatformFileManager.ExistsAsync in favor of IPlatformFileSystemManager.ExistsAsync
  • Removed IPlatformDirectoryManager.ExistsAsync in favor of IPlatformFileSystemManager.ExistsAsync
  • Renamed PlatformDirectoryManager.cs to IPlatformDirectoryManager.cs

UniScan.Platform.Implementations.Native

  • Updated implementations according to UniScan.Platform changes

UniScan.Platform.Implementations.Web

  • Updated implementations according to UniScan.Platform changes

Breaking Changes

  • Moved UniScan.Platform.Implementations.Web.BrowserPaths to UniScan.Client.App.Platform.Browser
  • BrowserFileManager.TransferAsync now creates all subfolders leading up to the destination file

UniScan.Server.Core

  • HostClientsHandler now listens to Scanner.State as an Observable
  • Added some more logging to SubscribePacketHandler
  • Added a temporary static RemoteInfo instance in UniScanServer
  • The server now sends a DisconnectPacket to all clients on shutdown

Breaking Changes

  • ClientSoftwareInfoPacketHandler now sends a RemoteInfoPacket after being accepted
  • Removed GetRemoteInfoPacketHandler
  • SubscribePacketHandler no longer allows subscribing to the same device twice
  • SubscribePacketHandler no longer attempts to send the scanner state when it is null
  • UniScanServer._networkGroupManager now uses MultithreadedGroupManager
    • This is hopefully a fix to some weird bug that macOS users were encountering that would cause UniScan to crash.

UniScan.Server.Host

  • ScannerMeta.SaveAsync now properly disposes of the filestream
  • Now prints when exiting

Fixes #12
Fixes #25

New Contributors

Full Changelog: UniScan.Client.App/0.0.8...UniScan.Client.App/0.1.0