cli: Track and use conversation active state properly
This commit is contained in:
		
							parent
							
								
									db6295d5c8
								
							
						
					
					
						commit
						ffe15e6f0c
					
				|  | @ -28,6 +28,7 @@ type Conversation struct { | ||||||
| 
 | 
 | ||||||
| 	messages  []*ricochet.Message | 	messages  []*ricochet.Message | ||||||
| 	numUnread int | 	numUnread int | ||||||
|  | 	active    bool | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Send an outbound message to the contact and add that message into the
 | // Send an outbound message to the contact and add that message into the
 | ||||||
|  | @ -68,11 +69,10 @@ func (c *Conversation) AddMessage(msg *ricochet.Message, populating bool) { | ||||||
| 	} | 	} | ||||||
| 	c.trimBacklog() | 	c.trimBacklog() | ||||||
| 	if !populating { | 	if !populating { | ||||||
| 		// XXX Need to do mark-as-read when displaying received messages in
 |  | ||||||
| 		// an active conversation.
 |  | ||||||
| 		// XXX Also, need to limit prints to the active conversation.
 |  | ||||||
| 		// XXX Quite possibly, more of the active conversation logic belongs here.
 |  | ||||||
| 		c.printMessage(msg) | 		c.printMessage(msg) | ||||||
|  | 		if c.active { | ||||||
|  | 			c.MarkAsReadBefore(msg) | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -239,6 +239,15 @@ func (c *Conversation) validateMessage(msg *ricochet.Message) error { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (c *Conversation) printMessage(msg *ricochet.Message) { | func (c *Conversation) printMessage(msg *ricochet.Message) { | ||||||
|  | 	if !c.active { | ||||||
|  | 		messages := fmt.Sprintf("%d new message", c.numUnread) | ||||||
|  | 		if c.numUnread > 1 { | ||||||
|  | 			messages += "s" | ||||||
|  | 		} | ||||||
|  | 		fmt.Fprintf(Ui.Stdout, "\r\x1b[31m[[ \x1b[1;34m%s\x1b[0m from \x1b[1m%s\x1b[0m (\x1b[1m%d\x1b[0m) \x1b[31m]]\x1b[39m\n", messages, c.Contact.Data.Nickname, c.Contact.Data.Id) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	// XXX actual timestamp
 | 	// XXX actual timestamp
 | ||||||
| 	ts := "\x1b[90m" + time.Now().Format("15:04") + "\x1b[39m" | 	ts := "\x1b[90m" + time.Now().Format("15:04") + "\x1b[39m" | ||||||
| 
 | 
 | ||||||
|  | @ -255,10 +264,6 @@ func (c *Conversation) printMessage(msg *ricochet.Message) { | ||||||
| 		c.Contact.Data.Nickname, | 		c.Contact.Data.Nickname, | ||||||
| 		direction, | 		direction, | ||||||
| 		msg.Text) | 		msg.Text) | ||||||
| 
 |  | ||||||
| 	/* |  | ||||||
| 		fmt.Fprintf(ui.Input.Stdout(), "\r\x1b[31m( \x1b[39mNew message from \x1b[31m%s\x1b[39m -- \x1b[1m/%d\x1b[0m to view \x1b[31m)\x1b[39m\n", contact.Data.Nickname, contact.Data.Id) |  | ||||||
| 	*/ |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (c *Conversation) UnreadCount() int { | func (c *Conversation) UnreadCount() int { | ||||||
|  | @ -273,3 +278,15 @@ func (c *Conversation) recountUnread() { | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func (c *Conversation) SetActive(active bool) { | ||||||
|  | 	if active == c.active { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	c.active = active | ||||||
|  | 	if active { | ||||||
|  | 		c.PrintContext() | ||||||
|  | 		c.MarkAsRead() | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -282,12 +282,15 @@ func (ui *UI) SetCurrentContact(contact *Contact) { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if ui.CurrentContact != nil { | ||||||
|  | 		ui.CurrentContact.Conversation.SetActive(false) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	ui.CurrentContact = contact | 	ui.CurrentContact = contact | ||||||
| 	if ui.CurrentContact != nil { | 	if ui.CurrentContact != nil { | ||||||
| 		ui.setupConversationPrompt() | 		ui.setupConversationPrompt() | ||||||
| 		fmt.Fprintf(ui.Stdout, "------- \x1b[1m%s\x1b[0m is %s -------\n", contact.Data.Nickname, ColoredContactStatus(contact.Data.Status)) | 		fmt.Fprintf(ui.Stdout, "------- \x1b[1m%s\x1b[0m is %s -------\n", contact.Data.Nickname, ColoredContactStatus(contact.Data.Status)) | ||||||
| 		contact.Conversation.PrintContext() | 		ui.CurrentContact.Conversation.SetActive(true) | ||||||
| 		contact.Conversation.MarkAsRead() |  | ||||||
| 	} else { | 	} else { | ||||||
| 		ui.Input.Config.Listener.(*conversationInputConfig).Remove() | 		ui.Input.Config.Listener.(*conversationInputConfig).Remove() | ||||||
| 		ui.Input.SetConfig(ui.baseConfig) | 		ui.Input.SetConfig(ui.baseConfig) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue