[FIX] Discussions created from inside DMs were not working (#17282)
parent
b425642c4e
commit
26bf32fa1d
@ -0,0 +1,94 @@ |
||||
import { Random } from 'meteor/random'; |
||||
|
||||
import { Migrations } from '../../../app/migrations'; |
||||
import { Rooms, Messages, Subscriptions, Uploads } from '../../../app/models/server'; |
||||
|
||||
const unifyRooms = (room) => { |
||||
// verify if other DM already exists
|
||||
const other = Rooms.findOne({ |
||||
_id: { $ne: room._id }, |
||||
t: 'd', |
||||
uids: room.uids, |
||||
}); |
||||
|
||||
// we need to at least change the _id of the current room, so remove it
|
||||
Rooms.remove({ _id: room._id }); |
||||
|
||||
const newId = (other && other._id) || Random.id(); |
||||
|
||||
if (!other) { |
||||
// create the same room with different _id
|
||||
Rooms.insert({ |
||||
...room, |
||||
_id: newId, |
||||
}); |
||||
|
||||
// update subscription to point to new room _id
|
||||
Subscriptions.update({ rid: room._id }, { |
||||
$set: { |
||||
rid: newId, |
||||
}, |
||||
}, { multi: true }); |
||||
|
||||
return newId; |
||||
} |
||||
|
||||
// the other room exists already, so just remove the subscription of the wrong room
|
||||
Subscriptions.remove({ rid: room._id }); |
||||
|
||||
return newId; |
||||
}; |
||||
|
||||
const fixSelfDMs = () => { |
||||
Rooms.find({ |
||||
t: 'd', |
||||
uids: { $size: 1 }, |
||||
}).forEach((room) => { |
||||
if (!Array.isArray(room.uids) || room._id !== room.uids[0]) { |
||||
return; |
||||
} |
||||
|
||||
const correctId = unifyRooms(room); |
||||
|
||||
// move things to correct room
|
||||
Messages.update({ rid: room._id }, { |
||||
$set: { |
||||
rid: correctId, |
||||
}, |
||||
}, { multi: true }); |
||||
Uploads.update({ rid: room._id }, { |
||||
$set: { |
||||
rid: correctId, |
||||
}, |
||||
}, { multi: true }); |
||||
}); |
||||
}; |
||||
|
||||
const fixDiscussions = () => { |
||||
Rooms.find({ t: 'd', prid: { $exists: true } }, { fields: { _id: 1 } }).forEach(({ _id }) => { |
||||
const { u } = Messages.findOne({ drid: _id }, { fields: { u: 1 } }) || {}; |
||||
|
||||
Rooms.update({ _id }, { |
||||
$set: { |
||||
t: 'p', |
||||
name: Random.id(), |
||||
u, |
||||
ro: false, |
||||
default: false, |
||||
sysMes: true, |
||||
}, |
||||
$unset: { |
||||
usernames: 1, |
||||
uids: 1, |
||||
}, |
||||
}); |
||||
}); |
||||
}; |
||||
|
||||
Migrations.add({ |
||||
version: 183, |
||||
up() { |
||||
fixDiscussions(); |
||||
fixSelfDMs(); |
||||
}, |
||||
}); |
Loading…
Reference in new issue