# Todo / Notes / Changelog

### Personal&#x20;

* Transfer blogs to HashNode for time being
* Setup forums with identity

## Check out Progress - Work IN Progress

{% embed url="https://sharing.clickup.com/20562778/l/h/6-192142336-1/9af5e2b9bcaa305" %}
Progress on Todo List
{% endembed %}



### Todo List / Changelog

_**This does not reflect****&#x20;**<mark style="color:orange;">**what will or wont**</mark>**&#x20;****be in EasyCodeForVivox officially**_



* ~~Figure out where to Unsubscribe events~~  ~~**\*\*Update\*\*** <mark style="color:orange;">I originally was unsubscribing from the event reference that was passed in when invoking event handlers but realized after messing with the UI that it was not properly unsubscribing because I would have duplicate values when re-logging in. Have realized that you need to Unsubscribe using the original object (ex. loginSession, channelSession) and it is best to do so when Loggin out or leaving a channel for example and not from the invoked method called by event delegates</mark>~~
* ~~Delete LocalUserUnmuted or remove bool parameter~~
* <mark style="color:orange;">Handle Failed direct messages (</mark><mark style="color:red;">**should be handled server side so maybe not,**</mark>**&#x20;**<mark style="color:orange;">**provide easy way for users to access these**</mark> <mark style="color:orange;">)</mark>
* <mark style="color:red;">audio injection \*\* not working right now. posted question</mark> [**Unity Vivox Forum**](https://forum.unity.com/threads/how-to-properly-inject-audio-in-vivox-unity.1347467/)
* add Login Properties changed methods
* add CloudCode support so EasyCode calls users cloud function url and gets access token instead of creating token on client
* add lobby support to auto create channels&#x20;
* add unity authentication support so player name is PlayerId from authentication
* Add Server example of getting access token from server (not cloud code)&#x20;
* ~~<mark style="color:purple;">add events for detecting audio device change</mark>~~
* <mark style="color:purple;">add events for LoginSessions added - dynamic, normal & async</mark>
* <mark style="color:purple;">add errors /warnings for mismatched parameter types in dynamic events</mark>
* If are using Zenject project context in your project this may cause conflicts. I will test this and see if it's a problem
* add DisplayName optional parameter for Login method
* Dynamic events don't work on internal classes (test it out)
* Decide if it's worth keeping the **SendEventMessage** because it is **bad practice IMO. Keep an example for the archive for users who dont use a networking stack**
* <mark style="color:purple;">remove unused casts/unboxing in Event callbacks in backend scripts and  EasyEvents</mark>
* <mark style="color:purple;">add validation option in editor and at runtime to see if Dynamic events have matching parameters since i dont know how to use Linters/Code Analysis/Rosylin. Maybe use Mono.Cecil</mark>
* <mark style="color:purple;">test new multiple login sessions (</mark><mark style="color:orange;">it works but can't switch between login sessions they are all active, custom logic must be implemented to handle this</mark><mark style="color:purple;">)</mark>
* <mark style="color:purple;">Add unity authentication</mark>
* <mark style="color:orange;">add EasySettings for Logging, APi keys, Dynamic events and other config settings. Use Scriptable objects for settings/config instead of static variables. Can dependency inject settings</mark>
* <mark style="color:purple;">use epoch for VivoxAccessToken unique identifier?</mark>
* <mark style="color:purple;">Test channel name for regions and squad matches (large scale channel identifiers, probably not needed but I want to provide as production as ready as possible)</mark>
* <mark style="color:orange;">Move</mark> <mark style="color:orange;"></mark><mark style="color:orange;">**UserMuted**</mark> <mark style="color:orange;"></mark><mark style="color:orange;">events from</mark> <mark style="color:orange;"></mark><mark style="color:orange;">**EasyUsers**</mark> <mark style="color:orange;"></mark><mark style="color:orange;">to</mark> <mark style="color:orange;"></mark><mark style="color:orange;">**EasyMute**</mark>
* ~~<mark style="color:green;">3d demo scene</mark>~~
* add Lobby and matchmaking to 3d demo scene. Maybe seperate scene
* ~~<mark style="color:purple;">Test 3d positional audio with Human Models</mark>~~
* <mark style="color:green;">EasyManager singleton pattern Demo scene (Using Static EasySession)</mark>
* <mark style="color:green;">Easy Manager Dependency Injection split into different game objects/scripts based on functionality with wrapper classes to make using buttons (they require void methods) easier</mark>
* <mark style="color:green;">Easy Manager Dependency Injection without wrapper class that still has wrapper methods for using buttons</mark>
* <mark style="color:green;">Add Squad and server naming for large scale matches to demo scene</mark>
* <mark style="color:green;">Set transmission mode is for unsecured channels. how to do with VivoxAccesTokens??</mark>
* ~~<mark style="color:orange;">see if Cross mute works</mark>~~&#x20;
* add events for audio devices, ~~cross mute communications~~
* ~~<mark style="color:orange;">make sure TTS works</mark>~~<mark style="color:orange;">,</mark> <mark style="color:orange;"></mark><mark style="color:orange;">**handle full queue for TTS**</mark>
* ~~<mark style="color:orange;">add TTS options dropdown to demo scene</mark>~~
* ~~<mark style="color:orange;">Transfer OldExtensions to new EasyExtensions</mark>~~
* ~~<mark style="color:orange;">add option to set</mark>~~ [~~<mark style="color:orange;">mic sensitivity and Noise Floor</mark>~~ ](https://forum.unity.com/threads/is-there-any-noise-cancellation-feature-in-vivox.1326672/)~~<mark style="color:orange;">(VAD)</mark>~~
* <mark style="color:orange;">add option to switch transmission for logged in user in the demo scene</mark>
* <mark style="color:orange;">add option to set 3d audio settings for positional channel in demo scene</mark>
* <mark style="color:orange;">test android audio/speakers with Bluetooth headphones</mark>&#x20;
* ~~<mark style="color:orange;">add opt-in for EasyCode Debug.Logs for Vivox Events</mark>~~<mark style="color:orange;">, use Log Levels like Serilog and Unity's NetCode for Gameobjects</mark>
* ~~<mark style="color:orange;">test importing EasyCode with an emptyish project that already has</mark> <mark style="color:orange;"></mark><mark style="color:orange;">**zenject to see if there are assembly/naming conflicts, \*\* Update \*\* Unity will detect if the same files exist in a project and therefor not import them. A user would have to force import and that would create naming conflicts**</mark>~~
* As of right now using **DynamicEvents** will work on public, private, and static methods. **Gotcha -** <mark style="color:red;">If the method and class is static an exception may be thrown</mark>. I have yet to test this out but <mark style="color:red;">be warned</mark>.&#x20;
* **remotePlayerinChannelDropdown** - Selected player can be muted/unmuted using the Admin Panel (Will be added in future version. Version 2.0 will not have it)
* Add EasyServer for Server2Server moderation / Create ready to go examples for Cloud Code/Lambda/Functions
* Tried removing dependencies from EasyManager.cs but ended up still injecting everything. It is basically a super class. I plan on making examples on how to break apart easy manager for more modular design
* **Project Context** - Loaded by empty Zenject Scene Context (**EasyManager requires it and will add automatically**). When loaded it uses Zenject to create a Project Level Context so dependencies will be stored/available across scenes. If are using Zenject project context in your project this may cause conflicts. I will test this eventually and see if it's a problem. You can always [report an issue here](https://github.com/FullStackIndie/EasyCodeForVivox/issues)
* <mark style="color:red;">Zenject is a 3rd party dependency that I may not be able to use because of licensing and Unity Asset Store Guidelines.</mark> <mark style="color:red;"></mark><mark style="color:red;">**Add Zenject license in my asset and specify in new release**</mark>
* _<mark style="color:red;">**Update Offline Documentation, can't publish to Unity Asset Store without it**</mark>_
* xml docs
* go thru and search for <mark style="color:green;">`// todo`</mark> comments and fix/handle them
* <mark style="color:green;">Go thru discord and look at all the errors and code snippets and questions that are asked to update the FAQ, get YouTube video ideas and create an Error Solution page that shows common fixes to common errors</mark>&#x20;
* <mark style="color:green;">If I update asset to only use Unity 2020+ consider using interfaces with public and private members and consider bringing back Michael Milton's custom chat scene (ask him if it's okay to remove editor coroutines and his custom versioning scripts)</mark>
* <mark style="color:red;">Have someone test EasyCode on IOS, Mac, Consoles</mark>
* provide examples on how to have different Project context for Zenject and have multiple EasySettings for different scenes, game types, or prod/dev environments
