Coder Social home page Coder Social logo

communi / communi-sailfish Goto Github PK

View Code? Open in Web Editor NEW
36.0 36.0 18.0 3.76 MB

The first and foremost IRC client for Sailfish OS

License: BSD 3-Clause "New" or "Revised" License

C++ 50.11% QML 46.57% QMake 2.11% C 0.78% Shell 0.42%
irc irc-client sailfishos

communi-sailfish's Introduction

communi-sailfish's People

Contributors

f-fr avatar jpnurmi avatar mlehtima avatar razcampagne avatar thaodan avatar venemo avatar vgtw 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

communi-sailfish's Issues

Autocomplete nicknames

Add ability to autocomplete available nick names on a channel. As a bonus, let's do it in a way that the user names are sorted by last activity time, ie. if multiple nicknames are matching, the one that spoke the most recently will be suggested first.

Indication for already read messages

We should provide indication for old messages that the user has already read.

  • Old messages should remain readable
  • Old messages should be visually separated from new ones

The current idea (changing color to grey) might be a good direction, but it's not "there yet". Let's think of something better.

Proper state saving & restoring

Save & restore not only connections but also buffers, but only for non-bouncer connections. Perhaps wait a sec or two after getting connected and restore buffers only if nothing happened?

  • IrcConnection::saveState()
  • IrcConnection::restoreState()
  • IrcBufferModel::saveState()
  • IrcBufferModel::restoreState()

Welcome page

Let's implement a better welcome screen for the app. The welcome screen would serve the following purpose:

  • Let users select which of the configured networks they want to connect to (using a list of check boxes)
  • Let users select a network and edit/delete it
  • Let users add a new network

Of course, these should also be reachable from the chat page, but as a start it'd be nice to have them on the welcome page.

Cannot enter /nick while connecting

The text input is disabled while not fully connected. If a nick is reserved while connecting (and the nick dialog is swiped away) there's no way to enter a new nick.

Open first enabled connection at startup

I noticed that if the first connection is disabled in WelcomeDialog, the corresponding empty server buffer will be also presented after accepting the dialog. It would be better to present something from the first enabled connection. I added BufferProxyModel::model(IrcConnection*) so in QML we can use BufferModel.model(connection).get(0) to get the first buffer from a specific connection.

Recognize and compactify "common" quit messages.

Somewhat related to #33, it would be nice for the client to recognize common quit messages and reformat the notices accordingly, eg.:

x has quit (Ping timeout: NNN seconds) -> x has timed out (NNNs)
x has quit (Read error: Connection reset by peer) -> x disconnected unexpectedly
x has quit (Remote host closed the connection) -> x has disconnected

Don't know about others, but those 3 would make most quit notices less noisy and fit them in a single line. Filtering out client adverts in quit and part messages would be kinda nice, but presumably controversial.

NickDialog

A dialog is needed for changing the nick, and entering a new nick when the initially chosen nick is reserved.

  • IrcConnection::nickNameReserved() [signal]
  • IrcConnection::nickName [property]

Issue with multiple connections to same hostname

When you have multiple connections to the same hostname, trying to join a channel using the dialog for it will result in the first connection joining to the channel (even when you were on the second one).

Test case:

  • Clear settings
  • Create a connection to freenode, connect, join #communi
  • From the PushUpMenu create a second connection to freenode
  • Connect the second connection and try to join #communi

Expected result:

New connection will join the channel so there'll be two buffers

Actual result:

New connection doesn't join the channel but the UI will switch to the already joined channel.

Notification view swamped with notifications

[14:53:05] <Aard> ugh, the notification handling needs to be reworked a bit :)
[15:00:57] <jpnurmi> suggestions welcome :)
[15:01:38] <jpnurmi> is it annoying or insufficient?
[15:24:48] <Aard> jpnurmi: after opening my phone this morning I had my notification view swamped with notifications
[15:28:11] <jpnurmi> oh right, it should use the same notification item if possible

The color of side panel handles

[18:01:04] <Morpog_Jolla> sidepanel pulley handles shouldn't be white, as the scroll decorator is white too. how about secondary color?

Connectivity

Instead of relying on socket timeouts (that can take very long), we should try to get internet connectivity status change notifications from the system. I'm sure SailfishOS provides something similar to org.freedesktop.NetworkManager.

BufferPage: Qt.application.active messes up highlight

We added Qt.application.active here to get highlight info banners even for the current buffer when the application is inactive.

Binding {
    target: storage
    property: "active"
    value: Qt.application.active && page.status === PageStatus.Active
}

The undesired side-effect is that the highlight of "new/unseen" messages gets messed up when the application activity changes.

More descriptive dialogs

When a nick name is reserved or a channel requires a password, a dialog is popped up. Those dialogs could be more descriptive and explain that another nick name is required because it was taken, or that a channel couldn't be joined because it needs a password.

Use different colors for nick names

Currently every nickname has the same color, which makes the channel harder to read.

What's not clear is what colors to use - because not every color might be visible on every ambience.

Simplify ConnectDialog

[15:12:45] <jpnurmi> Venemo: can we please simplify the connect dialog?
[15:13:03] <jpnurmi> imo there's way too much stuff
[15:14:40] <jpnurmi> it takes quite long to glance through and grok all that
[15:18:44] <jpnurmi> compare to the settings app. all the pages are simple
[15:19:02] <jpnurmi> except the developer mode page, which we don't want to imitate :P
[15:22:05] <Venemo> jpnurmi: yes, I can do that
[15:28:26] <jpnurmi> maybe we could take the channels out completely
[15:29:04] <jpnurmi> how about showing a dialog after getting connected when there are no channels being restored?
[15:29:24] <jpnurmi> modify the existing channel dialog so that user can enter multiple channels instead of just one
[15:30:09] <jpnurmi> that would also make ConnectDialog more suitable for editing a connection
[15:30:52] <jpnurmi> we can even show the dialog meanwhile connecting, for a newly entered connection
[15:31:28] <jpnurmi> it would nicely reduce the waiting time
[15:35:18] <Venemo> okay, I'm convinced
[15:35:29] <Venemo> please create a ticket on github about it

[STORY] Logging Support

We should log the activity in every buffer; with the following considerations:

  • User should be able to turn logging on/off (maybe on a per-network basis)
  • Logging should be disabled for bouncer connections
  • When a user opens a buffer and a log is available; show the last N messages from the log in the buffer
  • Provide an option to display the full buffer log and search in it

Let users rename networks

Multiple connections to the same network can get confusing. To implement this, just set IrcConnection::displayName and it will automatically reflect in the UI and is also saved & restored. The only thing missing is an input field somewhere.

WelcomeDialog: a pressed effect for list items

Currently it's not obvious that a long press will give a context menu, because there's no pressed effect. I think a normal list item pressed effect (ListItem::highlighted I suppose) would give a nice hint for the user.

Messed up total highlight count

[17:54:04] <Venemo_j> jpnurmi: hm, something about this new patch is quite fishy. it says I have 1224487 unread highlights

Settings

Utilizing the settings application currently requires installing a JSON description file to /usr/share/jolla-settings/entries, which is not allowed by Harbour. We could distribute a settings-enabled version on the openrepos, though.

A prototype: https://github.com/jpnurmi/communi-sailfish/commit/cdd18455136604cd782e17a0138e8705d5bbe1aa

Settings:

  • font size
  • nick format
  • scrollback size
  • timestamp format
  • notifications/feedback
  • show/hide joins/parts/quits
  • show/hide user details for joins/parts/quits
  • completion suffix (':' vs. ',')
  • reconnect delay?
  • quit message
  • nick alert case sensitivity
  • ...

Highlight gets stuck

[16:54:17] <Venemo> jpnurmi: new bug I found: if you swipe away from the app while it's connecting and you receive MOTD while the app is in the background, the red glow will never turn back to non-red

Cover page

The cover page needs to be implemented. Not sure what kind of actions if any we could put there.

Unify TextField looks

It would be nice if the TextFields in BufferPage and ConnectingDialog looked the same. Both are similarly located below a ListView, so they could use the same visuals.

Arrows for scrolling to top/bottom

[18:06:23] <Morpog_Jolla> for long conversations, there should be some top/bottom jump arrows, like in cargo dock app
[18:07:00] <Morpog_Jolla> that way you could get rid of top/bottom in pulleys
....
[18:18:20] <Morpog_Jolla> icon-l-down and up or icon-m-down and up, depends which size fits better

Improve side panels

[12:42:01] <Venemo_j> jpnurmi, one slight thing is that it's too easy to accidentally open a panel after closing the other
[12:44:43] <jpnurmi> Venemo_j: ok, we can probably tweak that
[12:45:03] <jpnurmi> by dragging or flicking btw?
[13:10:32] <Venemo_j> well, I'm not sure what the difference is
[13:11:05] <Venemo_j> i just close the channel switcher and if I'm not careful enough the userlist appears
[13:12:12] <Venemo_j> also, I'd expect a single tap on the channel text to close the panels too
[13:12:56] <Venemo_j> also, the gesture should be disabled when done on top of the textfield
[13:15:53] <Venemo_j> IMO closing a panel and opening the other should be two separate gestures
[13:24:20] <jpnurmi> yep, i'll see what i can do to improve it
[13:29:03] <Venemo_j> also, please set a drag threshold or something

Better way to switch channels

Instead of having a page for channels and a separate page for the chat, I suggest the following:

  • Have only one chat page that by default shows the "server buffer"
  • Put a drawer onto the chat page and use that for channel switching
    NOTE: a plain pulley menu is NOT a good solution for channel switching because it is not meant to contain that many items
  • Put a button somewhere on the chat page for showing the drawer
  • Add a pulley menu to the bottom of the chat page for quick options
    NOTE: a pulley menu on the top is infeasible because it would require the user to scroll all the way up

Here's an initial list of quick options that I suggest adding to a bottom pulley menu.

  • User list (if the user is currently on a channel)
  • Part (for channels) / Close (for queries)
  • Disconnect / Reconnect (for the server buffers)
  • Join / Query

This way, all the relevant things that a user would do in an IRC client would be there on a single page.

Landscape support

Enabling landscape support:

Page::allowedOrientations: Orientation.Portrait | Orientation.Landscape

Not yet supported by the Silica components?

UI for adding channels on the connect page

A very prominent feedback I used to receive for the IRC Chatter app was that users disliked the way of setting the initially joined channels. So instead of having to type them separated with commas, I'm adding a UI with a list view to set them.

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.