Giter VIP home page Giter VIP logo

gitter's People

Contributors

chrissainty avatar jspuij avatar markstega avatar sql-mistermagoo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

gitter's Issues

App hangs when signing in for the first time

When signing in for the first time the app requires a token. Enter the token and then click sign and remember me. App hangs sits with the loading spinner going saying attempting login...

Refresh the page and the app logs straight in without issue.

I've not tested this on server-side only client-side.

Add a method for detecting and responding to user activity

This is a utility enhancement that allows for timeout on message monitoring and eventually for marking messages as read when the user is active.

AppState has a new RecordActivity() method that resets the timeout timer and new Events for when timeout happens and when the timeout time changes.
The timeout event is used in the RoomTitle component to display a paused message and in the RoomMessages component to pause the new messages monitor.

Evaluate getting rid of gulp and npm

Best as I can see, we currently use the gulp (and npm) infrastructure for two reasons:

  • it compiles SCSS to CSS, does some further jiggling, and copies the result to the two target projects
  • it copies the JS* to the two target projects

*) it does not compile TS to JS: the MSBuild toolchain does that instead.

This works, but it's kind of an ugly and brittle fit. We might want to move to things like BuildWebCompiler.

Filter messages by Including/Excluding users temporarily

I'm thinking of a facility to quickly tap/click on a user (or even with a /slash command) to include/exclude them from the messages list - just a quick filter, not a permanent one.

I'm not sure of the best UI for this though.

I like the idea of having a command like "/show chris,shawty,magoo" and it would only show messages from users with chris, shawty or magoo in their name, then "/all" would reset it.

Allow pasting of images

Allow pasting images like in the Gitter client

I've written this in a demo app, just need to turn it into a package.

It will allow you to paste an image, which it then uploads to a CDN, and we can then put the markup in the message box, so the user can write stuff to go with it.

Improve Search Experience

Since the update to the CSS, the search has been unresponsive

We should allow results to display as they come in
We should allow the user to cancel the search at any point and keep the results
We should clear the search text when the Clear button is clicked.

Create a settings page

We are going to need settings before long, so we should decide how to handle it.

I'm going to suggest we keep it simple, with one page that has a few tick boxes and entry fields for now as I don't want to get bogged down in admin :)

What I would like to have control over:

  • the Accent colour.
  • timeout enabled
  • timeout interval
  • room updates interval
  • chatroom updates interval
  • Theme Chooser - only when we have themes and a way to switch them
  • Notification Preferences - when we add notifications

For now we can just use local storage.
Step 2 in the future we can provide download/upload of configuration (like a backup/restore)
Step 3 Wayyyyy in the future we can provide access to cloud storage so settings roam?

Build out DevOps pipeline

It would be good to have master being build on merges and PR requests being built before allowing merges.

Also do we want to think about deploying this somewhere?

Cache room users?

In testing the API, I've found that /v1/rooms/:roomId/users has the same weird query behavior as the regular gitter client — that is, some users simply cannot be found, for whatever reason. For example, querying danro finds Dan Roth, but querying sql doesn't find anyone.

So I don't think we should rely on that exclusively. (Is this considered a known bug on Gitter's end?)

But — we already get some of those users anyway, as part of GetChatMessages.

So, what if we build a repository-esque class that builds a cache that fills as GetChatMessages and GetChatRoomUsers queries come in, and returns a union of those? That should make querying users slightly more reliable.

Needs Ability to Quote A Post

We should be able to quote a previous post (even/especially from the search)

I think Gitter just uses a ">" prefix to indicate a quote, so this should be easy enough.

Small screen layout

I'd love to get this to the point where I can use it on my phone, but I'm not sure how we handle screen layouts with the current structure.

I'd like - but am not fixed on - a simple swipe left and right to reach different pages on mobile.

Mobile
[ Login ] <--> [ Rooms ] <--> [ Room ] <--> [ Search ]

Desktop
[ Login ] <--> [ Rooms ] [ Room ] [ Search ]

Add Search function

We should have a search that works.

I would personally like to be able to

  • Search for all posts from a user
  • Search by selecting some text in a message
  • Filter search results by User(s)
  • Filter search results by Date range
  • Optionally open search results in a new page dedicated to the search
  • Copy a link to a specific search so it can be shared
  • Reply/Quote any message directly from search results

Server-side appears to be broken

I don't generally use it, but tested it for #85.

I get:

System.InvalidOperationException: JavaScript interop calls cannot be issued at this time. This is because the component is being statically rendererd. When prerendering is enabled, JavaScript interop calls can only be performed during the OnAfterRenderAsync lifecycle method.
at Microsoft.AspNetCore.Components.Server.Circuits.RemoteJSRuntime.BeginInvokeJS(Int64 asyncHandle, String identifier, String argsJson)
at Microsoft.JSInterop.JSRuntime.InvokeAsync[TValue](String identifier, CancellationToken cancellationToken, Object[] args)
at Microsoft.JSInterop.JSRuntime.InvokeWithDefaultCancellation[T](String identifier, Object[] args)
at Blazor.Gitter.Core.LocalisationHelper.BuildLocalCulture() in …/src/Blazor.Gitter.Core/Services/LocalisationHelper.cs:line 39

It appears changing @(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered)) to RenderMode.Server fixes this. But maybe there was a purpose in prerendering?

Make the app responsive

When I did the initial styling is was a bit quick and dirty as I didn't want to hold up adding features for too long .

This issue covers the following outstanding items

  • Make the site mobile first/just responsive at a minimum
  • Introduce a good navigation experience to mobile users

Fix the CSS

The CSS is a mess because of stuff...

Needs sorting out so it is themeable and consistent.
Needs accessibility sorting out
Layout needs work

Reply to And Quote Enhancement

I'm wondering if we can plug a gap in Gitter and introduce some sly threading...

It wouldn't be nice, because the API doesn't support it, but I'm thinking that we could maybe stick a little tag in a message when you Reply or Quote it, that we can pick up on later to thread messages.

So, each message has an Id, like this: 5cc9bdc8375bac74703963e2

Maybe we could put "In reply to: 5cc9bdc8375bac74703963e2" at the bottom of the reply/quoted message.
Or a link that when you clicked it, we take you to that message and show a range of messages before/after it (I think there is an API for that)

I don't know - this may be a terrible idea - and obviously wouldn't work for anyone not using our app...

Centralise the SCSS

In order to get the Server Side version working again, we should look to centralise the SCSS - probably into the Core project as that's where components live and the SCSS is related to them.

Auto-scroll messages when list is "at the end/most recent message"

I recently disabled the existing JS call because in use it was annoying - I can't remember what I didn't like, but it just didn't work well.

Maybe the first step would be to put the code back and test it out to see if it was just me !

//bool bottom = false;
//try
//{
// bottom = await JSRuntime.IsScrolledToBottom("blgmessagelist");
//}
//catch
//{
//}
if (Messages?.Any() ?? false)
{
options.AfterId = GetLastMessageId();
}
await FetchNewMessages(options, tokenSource.Token);
//if (Messages?.Any() ?? false)
//{
// if (bottom)
// {
// _ = await JSRuntime.ScrollIntoView(GetLastMessageId());
// }
//}

Mark messages as read

Add feature to mark messages as read when the user is active and the message has been visible for X seconds

User is active - suggest we have something in AppState that records the time of last interaction and define a period of activity that lasts from that time for X seconds, after which the User is Inactive.

Messages are visible when the message item is in the viewable area of the screen and not visible when they scroll out of the visable area.

To be marked as read automatically, a message must be visible for a continuous period, not cumulative.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.