+ index = [i for i, b in enumerate(self.buffers) if b.pointer() == item['__path'][0]]
+ if index:
+ if not item['__path'][0] in buffer_nicklist:
+ self.buffers[index[0]].remove_all_nicks()
+ buffer_nicklist[item['__path'][0]] = True
+ if not item['group'] and item['visible']:
+ self.buffers[index[0]].add_nick(item['prefix'], item['name'])
+ elif message.msgid == '_buffer_opened':
+ for obj in message.objects:
+ if obj.objtype == 'hda' and obj.value['path'][-1] == 'buffer':
+ for item in obj.value['items']:
+ buf = self.create_buffer(item)
+ index = self.find_buffer_index_for_insert(item['next_buffer'])
+ self.insert_buffer(index, buf)
+ elif message.msgid.startswith('_buffer_'):
+ for obj in message.objects:
+ if obj.objtype == 'hda' and obj.value['path'][-1] == 'buffer':
+ for item in obj.value['items']:
+ index = [i for i, b in enumerate(self.buffers) if b.pointer() == item['__path'][0]]
+ if index:
+ index = index[0]
+ if message.msgid == '_buffer_type_changed':
+ self.buffers[index].data['type'] = item['type']
+ elif message.msgid in ('_buffer_moved', '_buffer_merged', '_buffer_unmerged'):
+ buf = self.buffers[index]
+ buf.data['number'] = item['number']
+ self.remove_buffer(index)
+ index2 = self.find_buffer_index_for_insert(item['next_buffer'])
+ self.insert_buffer(index2, buf)
+ elif message.msgid == '_buffer_renamed':
+ self.buffers[index].data['full_name'] = item['full_name']
+ self.buffers[index].data['short_name'] = item['short_name']
+ elif message.msgid == '_buffer_title_changed':
+ self.buffers[index].data['title'] = item['title']
+ self.buffers[index].update_title()
+ elif message.msgid.startswith('_buffer_localvar_'):
+ self.buffers[index].data['local_variables'] = item['local_variables']
+ self.buffers[index].update_prompt()
+ elif message.msgid == '_buffer_closing':
+ self.remove_buffer(index)
+ elif message.msgid == '_upgrade':
+ self.network.desync_weechat()
+ elif message.msgid == '_upgrade_ended':
+ self.network.sync_weechat()
+
+ def create_buffer(self, item):
+ buf = Buffer(item)
+ buf.bufferInput.connect(self.buffer_input)
+ buf.widget.input.bufferSwitchPrev.connect(self.list_buffers.switch_prev_buffer)
+ buf.widget.input.bufferSwitchNext.connect(self.list_buffers.switch_next_buffer)
+ return buf
+
+ def insert_buffer(self, index, buf):
+ self.buffers.insert(index, buf)
+ self.list_buffers.insertItem(index, '%d. %s' % (buf.data['number'], buf.data['full_name']))
+ self.stacked_buffers.insertWidget(index, buf.widget)
+
+ def remove_buffer(self, index):
+ if self.list_buffers.currentRow == index and index > 0:
+ self.list_buffers.setCurrentRow(index - 1)
+ self.list_buffers.takeItem(index)
+ self.stacked_buffers.removeWidget(self.stacked_buffers.widget(index))
+ self.buffers.pop(index)
+
+ def find_buffer_index_for_insert(self, next_buffer):
+ index = -1
+ if next_buffer == '0x0':
+ index = len(self.buffers)
+ else:
+ index = [i for i, b in enumerate(self.buffers) if b.pointer() == next_buffer]
+ if index:
+ index = index[0]
+ if index < 0:
+ print('Warning: unable to find position for buffer, using end of list by default')
+ index = len(self.buffers)
+ return index