Невозможно получить заархивированные сообщения с сервера XMPP - PullRequest
0 голосов
/ 09 апреля 2019

Я пытался получить заархивированные сообщения от MAM и использовал встроенные функции smack api для извлечения всех заархивированных сообщений пользователя, скажем, abc@xmpp.domain.com, используя queryArchive (...) и все егодругие перегруженные варианты всегда возвращают счет 0

 try {
            if (lastMessageMamId == null) {
                mamQueryResult = getArchivedMessages(mamManager,chat.getUser().getJid().toString(), PAGE_SIZE);
                //  mamQueryResult = mamManager.queryArchive(50);
            } else {
                mamQueryResult = mamManager.pageAfter(chat.getUser().getJid(), lastMessageMamId, PAGE_SIZE);
            }
        }

и всегда возвращают счет 0 в качестве результата для переадресованных сообщений для инициализации mamManager с использованием

org.jivesoftware.smackx.mam.MamManager mamManager
                = org.jivesoftware.smackx.mam.MamManager.getInstanceFor(connection);

. Я также создал метод для полученияархивированные сообщения, создавая пользовательский пакет с началом и концом, я думаю, что он также создается внутри другого метода, который принимает дату начала и окончания (queryArchive (...))

 public org.jivesoftware.smackx.mam.MamManager.MamQueryResult getArchivedMessages(org.jivesoftware.smackx.mam.MamManager mamManager, String jid, int maxResults) {

        //MamManager mamManager = MamManager.getInstanceFor(connection);
        try {
            DataForm form = new DataForm(DataForm.Type.submit);
            FormField field = new FormField(FormField.FORM_TYPE);
            field.setType(FormField.Type.hidden);
            field.addValue(MamElements.NAMESPACE);
            form.addField(field);

            //FormField formField = new FormField("with");

            Calendar calendar = Calendar.getInstance();
            calendar.get(Calendar.DAY_OF_MONTH-1);

            FormField formField = new FormField("start");
            formField.addValue("2010-06-07T00:00:00Z");
            form.addField(formField);


            FormField formField2 = new FormField("end");
            formField2.addValue("2019-04-08T18:10:02.907Z");
            form.addField(formField2);


            RSMSet rsmSet = new RSMSet(maxResults);


            return mamManager.page(form,rsmSet);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

, но такжевернуть тот же счетчик 0, но я видел архивную таблицу на сервере, в ней есть сообщения, но я не уверен, что мне не хватает, я также пытался запросить маму, используя

mamQueryResult = mamManager.queryArchive(50);

но та же проблема

<iq id="H6q9q-60" type="set">
    <query xmlns="urn:xmpp:mam:1" queryid="825e94c6-bd82-421e-b362-90072b421606">
        <x xmlns="jabber:x:data" type="submit">
            <field var="FORM_TYPE" type="hidden">
                <value>urn:xmpp:mam:1</value>
            </field>
            <field var="start">
                <value>2010-06-07T00:00:00Z</value>
            </field>
            <field var="end">
                <value>2019-04-08T18:10:02.907Z</value>
            </field>
        </x>
        <set xmlns="http://jabber.org/protocol/rsm">
            <max>50</max>
        </set>
    </query>
</iq>

Я также пытался использовать pageBefore (...) и pageAfter (...), которые также, кажется, неработатьНа данный момент я не уверен, что мне не хватает и что мне нужно сделать. Это какая-то проблема, связанная с сервером, в которой я тоже не уверен.

...