[MM-59519] preserve DM/GM unread/read state over export and import (#27707)
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
c2c37cea20
Коммит
4b3de1861f
@@ -815,7 +815,7 @@ func (a *App) exportAllDirectChannels(ctx request.CTX, job *model.Job, writer io
|
||||
afterId = channel.Id
|
||||
|
||||
// Skip if there are no active members in the channel
|
||||
if len(*channel.Members) == 0 {
|
||||
if len(channel.Members) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -829,7 +829,12 @@ func (a *App) exportAllDirectChannels(ctx request.CTX, job *model.Job, writer io
|
||||
return err
|
||||
}
|
||||
|
||||
channelLine := ImportLineFromDirectChannel(channel, favoritedBy)
|
||||
shownBy, err := a.buildShownByList(channel)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
channelLine := ImportLineFromDirectChannel(channel, favoritedBy, shownBy)
|
||||
if err := a.exportWriteLine(writer, channelLine); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -862,6 +867,55 @@ func (a *App) buildFavoritedByList(channelID string) ([]string, *model.AppError)
|
||||
return userIDs, nil
|
||||
}
|
||||
|
||||
func (a *App) buildShownByList(channel *model.DirectChannelForExport) ([]string, *model.AppError) {
|
||||
shownBy := make([]string, 0)
|
||||
switch channel.Type {
|
||||
case model.ChannelTypeGroup:
|
||||
for _, member := range channel.Members {
|
||||
prefs, err := a.Srv().Store().Preference().GetCategory(member.UserId, model.PreferenceCategoryGroupChannelShow)
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("buildShownByList", "app.preference.get_category.app_error", nil, "", http.StatusInternalServerError).Wrap(err)
|
||||
}
|
||||
|
||||
for i := range prefs {
|
||||
if prefs[i].Name == channel.Id && prefs[i].Value == "true" {
|
||||
user, err := a.Srv().Store().User().Get(context.Background(), member.UserId)
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("buildShownByList", "app.user.get.app_error", nil, "", http.StatusInternalServerError).Wrap(err)
|
||||
}
|
||||
|
||||
shownBy = append(shownBy, user.Username)
|
||||
}
|
||||
}
|
||||
}
|
||||
case model.ChannelTypeDirect:
|
||||
for i, member := range channel.Members {
|
||||
otherMember := member // in case it's a channel with self
|
||||
if len(channel.Members) == 2 {
|
||||
// since the are only two members, the other member is should be the remainder of i+1/2
|
||||
otherMember = channel.Members[(i+1)%2]
|
||||
}
|
||||
prefs, err := a.Srv().Store().Preference().GetCategoryAndName(model.PreferenceCategoryDirectChannelShow, otherMember.UserId)
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("buildShownByList", "app.preference.get_category.app_error", nil, "", http.StatusInternalServerError).Wrap(err)
|
||||
}
|
||||
|
||||
for _, pref := range prefs {
|
||||
if pref.Value == "true" && pref.UserId == member.UserId {
|
||||
user, err := a.Srv().Store().User().Get(context.Background(), member.UserId)
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("buildShownByList", "app.user.get.app_error", nil, "", http.StatusInternalServerError).Wrap(err)
|
||||
}
|
||||
|
||||
shownBy = append(shownBy, user.Username)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return shownBy, nil
|
||||
}
|
||||
|
||||
func (a *App) exportAllDirectPosts(ctx request.CTX, job *model.Job, writer io.Writer, withAttachments, includeArchivedChannels bool) ([]imports.AttachmentImportData, *model.AppError) {
|
||||
var attachments []imports.AttachmentImportData
|
||||
afterId := strings.Repeat("0", 26)
|
||||
|
||||
Ссылка в новой задаче
Block a user