[$4000] Android - Edit message - keyboard is dismissed after selecting an emoji @Tushu17

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action steps:

Send a message in any chat in App
Long press the message and tap on Edit message
Tap on the emoji picker
Select an emoji and observe the keyboard is dismissed

Expected results:
The alphabetical keyboard should not be dismissed after selecting an emoji
Actual Result:
Keyboard doesn't open up after selecting emoji.
Workaround:
Unknown
Platform:

Where is this issue occurring?

Android

Version Number: <IP_ADDRESS>
Reproducible in staging?: Yes
Reproducible in production?: Yes
Email or phone of affected tester (no customers): any
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
https://user-images.githubusercontent.com/93399543/171174709-69b79478-f54a-4c55-b84b-114f7ec51087.mp4
Upwork URL: https://www.upwork.com/jobs/~01f30fad98ca9b6c69
Issue reported by: @Tushu17
Slack conversation: https://expensify.slack.com/archives/C01GTK53T8Q/p1650039236885699
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~018e351e7d34632075
Upwork Job ID:<PHONE_NUMBER>530191360

👋 @kbecciv @Tushu17, it took me a second to figure this out based on the steps provided and the issue title. Do you think it's more accurately described as:
Title: Android - Edit message - keyboard is dismissed after selecting an emoji
Action steps:

Send a message in any chat in App
Long press the message and tap on Edit message
Tap on the emoji picker
Select an emoji and observe the keyboard is dismissed

Expected results:
The alphabetical keyboard should not be dismissed after selecting an emoji
Let me know and we can update this for clarity.

Cool, updated. Ready for engineering triage!

Isn't it always open prior when editing? 🤔

Not if the user manually closes the keyboard. I do this when writing a long message so i can review the full message in a single screen.
Though rare, I would be annoyed if I finished writing a message, closed the keyboard, added an emoji and then saw the keyboard pop up again. Especially because it's super laggy.

Hey @Julesssss, The behaviour is also inconsistent. The keyboard opens after selecting the emoji at composer.
https://user-images.githubusercontent.com/89839952/173139625-60c1c741-53b7-4d55-b610-2c93d0242f41.mov
.

Thanks, @Tushu17.
@trjExpensify this is the case which I believe should be excluded:
https://user-images.githubusercontent.com/10736861/173361430-d66f93e4-077c-417a-809e-a187e1795f88.mp4

^^ Ah right yes, but that's not in edit mode is it?

Okay cool, I see what you're saying. Let's do it. 👍

Awaiting proposals

Upwork job here: https://www.upwork.com/jobs/~01f30fad98ca9b6c69

This used to work.

Saw this on upwork. Is it good design practice to open a separate bottom sheet for emojis? Why not use a custom keyboard that allows emoji input via separate tab? Something like this https://wix.github.io/react-native-ui-lib/docs/components/keyboard/KeyboardAccessoryView

Proposal
For the EmojiPickerButton component, onModalHide callback if we add a timeout of around 50-100 ms in the Interaction Manager then this issue can be resolved.
https://github.com/software-mansion/react-native-screens/issues/89#issuecomment-514935753
https://user-images.githubusercontent.com/43725028/173767631-25bdc0cc-9202-47d6-b41a-81bab7fc1b3d.mp4

Still awaiting proposals. @trjExpensify can you please double the job price? (I assume we double in UpWork as well as just updating the issue title?)

Yep, done! https://www.upwork.com/jobs/~01f30fad98ca9b6c69

Not overdue, Melv. Awaiting proposals.

@trjExpensify please double again

Donezo: https://www.upwork.com/jobs/~01f30fad98ca9b6c69

Proposal
There existed the same issue on composer and is fixed by a workaround with setTimeout by this PR.
https://github.com/Expensify/App/blob/d7dc3eea13bdb2af3e606530dc42058ca0a291ee/src/pages/home/report/ReportActionCompose.js#L334-L352
https://github.com/Expensify/App/blob/d7dc3eea13bdb2af3e606530dc42058ca0a291ee/src/pages/home/report/ReportActionCompose.js#L638-L642

Maybe it has been missed there. My proposal is to do the same thing on edit composer. The only reason I propose is because we already have deployed the same workaround.
https://github.com/Expensify/App/blob/d7dc3eea13bdb2af3e606530dc42058ca0a291ee/src/pages/home/report/ReportActionItemMessageEdit.js#L227-L231

Ok, I see. Although we have adopted a workaround previously, it does not mean that we should do that always.

Let me know whether this proposal is accepted or I think we should also find a solution to the previously deployed workaround.

Yeah, try to find the solution to the real problem of why the keyboard is not opening? Let's see some root cause analysis.
FYI @mdneyazahmad your proposal matches with https://github.com/Expensify/App/issues/9252#issuecomment-1156088875 .

Any further ideas here @mdneyazahmad?

Not overdue

Doubled on upwork: https://www.upwork.com/jobs/~01f30fad98ca9b6c69

Proposal
Problem:

Root cause of the issue is in file https://github.com/Expensify/App/blob/c2ecea533a3805bbe547b48d61baa8c24a1f89ef/src/pages/home/report/ReportActionItemMessageEdit.js#L215-L222
Whenever  onBlur of Composer in ReportActionItemMessageEdit.js is triggered with first argument as true https://github.com/Expensify/App/blob/c2ecea533a3805bbe547b48d61baa8c24a1f89ef/src/pages/home/report/ReportActionItemMessageEdit.js#L221
which causes to show compose input https://github.com/Expensify/App/blob/4d15590c44fe8bb3f2ab50a3f8e24c0e859e1b8b/src/libs/toggleReportActionComposeView/index.js#L3-L9

Solution:
Setting false instead of true here    toggleReportActionComposeView(false, VirtualKeyboard.shouldAssumeIsOpen()); fixes the issue

Attached video after the fix

https://user-images.githubusercontent.com/36359331/179383445-05ea0698-b56b-4cf4-b357-ba7205d3c2a5.mov

What is the affect of this change @aneequeahmad?

@parasharrajat Effect of setting the first argument to false in toggleReportActionComposeView(false, VirtualKeyboard.shouldAssumeIsOpen())

'true' is used to show the ComposeInput and onBlur as on every interaction(like clicking outside the EditComposeInput) onBlur is triggered and causing the the ComposeInput to show and even focuses ComposeInput if it has draft message.

We don't need to show ComposeInput onBlur as showing it is already handled when cancel or save changes button are pressed.

Also, as you mentioned above this used to work. You're right this used to work before 18th May 2022 and these changes were added by this PR in this commit

@parasharrajat @Julesssss are we good with this proposal, what's the next step?

I got the update on the previous changes and we do want to enable the composer on blur on the edit box. So proposal is not valid.

@parasharrajat Oh alright i didn't know that this is a feature and we want to enable the composer to blur
Updated proposal###
Problem

We need to not run  toggleReportActionComposeView(true, VirtualKeyboard.shouldAssumeIsOpen()); on blur as another button having action (opening emojiPicker) is clicked like save and cancel

Solution:

Define an ID in constructor after line#76 in EmojiPickerButton as this.emojiButtonID = 'emojiButton';
https://github.com/Expensify/App/blob/c2ecea533a3805bbe547b48d61baa8c24a1f89ef/src/pages/home/report/ReportActionItemMessageEdit.js#L75-L77

Pass ID as prop in EmojiPickerButton as nativeID={this.emojiButtonID} here

https://github.com/Expensify/App/blob/c2ecea533a3805bbe547b48d61baa8c24a1f89ef/src/pages/home/report/ReportActionItemMessageEdit.js#L229-L231

Assign nativeID from props to Pressable in EmojiPickerButton
https://github.com/Expensify/App/blob/66a05aa4015f96f5bab59929698d517a616620d1/src/components/EmojiPicker/EmojiPickerButton.js#L27-L34

Return from onBlur to prevent re-render when emoji button is pressed which cancels the onPress event by re-rendering. if (_.contains([this.saveButtonID, this.cancelButtonID, this.emojiButtonID]...
https://github.com/Expensify/App/blob/c2ecea533a3805bbe547b48d61baa8c24a1f89ef/src/pages/home/report/ReportActionItemMessageEdit.js#L216-L218

@parasharrajat thoughts on the above?

@marcaaron This is the relevant issue. I came to know that

we do want to enable the composer to blur on the edit box. Blur can be triggered via clicking on Save or Cancel buttons as well as a normal blur on the EditBox.

So i think to solve this keyboard dismiss issue on EmojiPicker we have to stop the method to toggle the composer (toggleReportActionComposeView) as it is preventing the users to take actions like we have done for save and cancel buttons.
cc: @parasharrajat

Testing the proposal in a few hours.

How will this proposal solve the issue on Android @aneequeahmad?

@parasharrajat when i debugged the issue pressing the emojiPicker button wasn't doing any action. But now it is opening the emojiPicker on latest build 1.1.87-6 so The above proposal is not valid.
PROPOSAL
We only need to add  InteractionManager.runAfterInteractions(() => setTimeout(() => this.textInput.focus(), 100)) here onModalHide.
https://github.com/Expensify/App/blob/d6417564acf9d34bad12231dcbc228fcb5c67f98/src/pages/home/report/ReportActionItemMessageEdit.js#L218-L221
AFTER FIX
https://user-images.githubusercontent.com/36359331/182445232-aaa5ba38-e6c8-4c52-9f09-4b2d87aeceb3.mp4

A similar proposal exists.

@parasharrajat Actually the next time i test again code base has changed like previously pressing the emojiPicker wasn't doing any action and now in latest build it is opening the emojiPicker but setTimeout was to be added as this is a known problem discussed here.
I'll take care next time keeping in mind what you said. apologies and thanks for your valuable feedback.

@trjExpensify could we please double, given that we're still seeking proposals.

👋 back from OoO, doubled here.

Proposal
There are couples of root cause explained by other's and the issue only happen on Android. Also, we encountered the same issue on ReportActionCompose and fix with adding a timeout before focusing the input and that's not acceptable in this issue.
So I try replacing InteractionManager.runAfterInteractions when onModalHide is called with requestAnimationFrame. Turns out this requestAnimationFrame is called after InteractionManager.runAfterInteractions and makes the keyboard appear when we hide the modal. I think it's because requestAnimationFrame will fire after all the frames have been flushed.
I also try the changes on ReportActionCompose and works as expected. So probably we can eliminate the setTimeout implementation on focusing input.
https://github.com/Expensify/App/blob/22e39f9de1c1fbace6e7a0e4c06f364310129895/src/pages/home/report/ReportActionItemMessageEdit.js#L223
-  onModalHide={() => InteractionManager.runAfterInteractions(() => this.textInput.focus())}
+  onModalHide={() => requestAnimationFrame(() => this.textInput.focus())}

Result
Android
https://user-images.githubusercontent.com/25520267/185793028-3e3b5ec8-73d2-47c4-8e99-8eb4054209d2.mp4
iOS
https://user-images.githubusercontent.com/25520267/185793127-4feb627d-0555-4df0-b5de-f2b1d420d3c3.mov
mWeb
https://user-images.githubusercontent.com/25520267/185793319-4bacce53-07b8-4861-b7bf-badb9231ceef.mp4

Not overdue, awaiting proposals.

Not overdue, we're still awaiting proposals here.

Still awaiting proposals here.

Still awaiting proposals here?

Yep

@trjExpensify please hold on any further pay increases for the moment though.

Per this internal conversation, putting this keyboard-related issue on hold pending https://github.com/Expensify/App/issues/10273
I updated title and removed Help Wanted

No further proposals received.

It's on HOLD for now @Julesssss, pending https://github.com/Expensify/App/issues/10273
Not sure why this was a Daily, bumped to Weekly for now

Can we put this on Monthly then and mark it as Internal if we're scoping a solution internally?

Still on hold, see this message.

No change from the last update.

👋 Isn't #10273 largely complete now, why is this still held? Could it be even fixed on Android, perhaps?
CC: @JmillsExpensify, I don't think this one is on your radar as the BZ on the KeyboardAvoidingView initiative.

Given that the Keyboard changes now seem unlikely to resolve this, let's open it up for solutions again

Yeah, I agree with that. 👍

Thanks @trjExpensify Feel free to keep it, though I'll subscribe and participate.

Cool, thanks for confirming. Added the External label afresh!

proposal
We can create a function to use setTimeOut in ReportActionItemMessageEdit file.
focus(shouldelay = false) {
        InteractionManager.runAfterInteractions(() => {
            if (!this.textInput) {
                return;
            }

            if (!shouldelay) {
                this.textInput.focus();
            } else {
                setTimeout(() => this.textInput.focus(), 100);
            }
        });
    }

we can pass that function to onModalHide prop of EmojiPickerButton as true.
https://github.com/Expensify/App/blob/98354545cc89b75a53f07cb1d694f7ab78ffbb40/src/pages/home/report/ReportActionItemMessageEdit.js#L252
onModalHide={() => this.focus(true)}.

@Julesssss Are we expecting a setTimeout-based solution as a fix to this issue?
If not, https://github.com/Expensify/App/issues/9252#issuecomment-1223036462.
@Tushu17 being an experienced contributor, we expect our process to be followed. And the process says that a proposal should not match existing ones and contributors should go over the whole issue discussion before proposing a solution. As the proposal matches existing ones, it is rejected.

Are we expecting a setTimeout-based solution as a fix to this issue?

Only if it can't be avoided.

jh

Thread we're discussing next steps on this one is here for the breadcrumbs!

Floated with Margelo so removed the External and Help Wanted labels for now.

@parasharrajat this is a known issue from RN from a long time https://github.com/facebook/react-native/issues/19366 , it was mentioned in their docs as well Known issues
This may explain the mystery :

We can see then that a ShadowNode exists with a view, and a parent shadow node, but the view doesn't have a parent. This means for the  we try to focus in React has had a corresponding native UIElement created, but the element hasn't been connected to the app's visual tree.
So we cannot focus the component, because the UIElement hasn't been attached to the window's view tree yet.

This thread https://github.com/microsoft/react-native-windows/issues/9292 can answer the mystery behind this issue , and it provide a solution https://github.com/microsoft/react-native-windows/issues/9292#issuecomment-1038218769

I think the queue-based solution is a good one. If a focus request comes in, on something not yet connected, we buffer subsequent UIManager focus/blur requests until the next is available. That would preserve app-side focus state correctly, as well.

@Julesssss  it Looks like setTimeout-based solution can't be avoided

I can imagine that my PR https://github.com/Expensify/App/pull/11684 fixes this issue. In my testing the keyboard always reopens after selecting an emoji. Maybe someone can take the time to try to reproduce the issue on the branch? 😊

Cool, thanks all. We'll hold this one briefly until the linked PR is merged. We also have the option of the setTimeout solution as a workaround to revisit if that doesn't work.

Well, that would be marvellous! Fortuitously @parasharrajat, you're the C+ on it as well! 🎉
@Julesssss I'm updating to include the hold reason in the title, let's always remember to do that for ease of following.

Still on hold for that PR. @parasharrajat are you back on that to test this week?

@parasharrajat Are you still blocked from testing?

Latest from the linked PR this is held on is that it will be tested today.

PR this is on hold for is still in review.

No change, Melv.

Still in review. Awaiting a merge to main to re-test!

Still held!

No movement on the PR we're held on here.

No change. We're still held

No change.

@Julesssss @parasharrajat the PR linked to has been closed, so what's the revised plan here?

Here's the issue we're holding on: https://github.com/Expensify/App/issues/18444

Does the scope of this issue also include this? Just wanted to confirm this.

Yeah, I think so.

Still in a holding pattern, though looks like we're getting close!

Sounds good!

Still holding on the fork death

Gonna drop to weekly while it's held

No change.

Samesies!

Getting closer here, but still held

PR is getting close!

👋 can someone summarise the next steps here and what we're doing about that now? Thanks!

@parasharrajat where you at on the continuation?

Done!

Oh god, yeah we definitely shouldn't auto-focus the emoji search. It slows down the interaction time and reduces the available space by showing the soft keyboard.

I think the emoji search is expected to be focused, as it is on web/desktop. If we want to deviate from that, I suggest that's a new issue and a discussion in Slack.
As for this issue on the keyboard being dismissed after selecting an emoji, it seems like we're resolved here. Is that correct?

If it's expected on web/desktop (which I agree with), then this is a good example of a place in which all platforms should NOT align.
We currently do this when opening a chat because automatically showing the soft keyboard on mobile is slow and annoying as it covers ~40% of the vertical page height. We shouldn't do this for emoji's either.

But I'm happy to raise that elsewhere. And yes, the original issue here is now resolved 🎉

Yeah, I think that's just out of scope on this issue and needs to be taken some place else.
So here, we just need to pay @Tushu17 $250 for the OG bug report.

@Julesssss a good place to start: https://github.com/Expensify/App/issues/27047

@Julesssss a good place to start: #27047

Thanks, I'm handling the revert here.

Oh of course. Good spot!

So here, we just need to pay @Tushu17 $250 for the OG bug report.

Thank you @trjExpensify, offer accepted.

Perfect, paid!

So what are the next steps and who's doing those?

We're back to seeking proposals. Latest comment

This issue is a bit of a spider web, IMO. Should we open a new issue with whatever relevant summary on where we are at, what we don't want to entertain, and then we'll add help wanted and external to that to seek proposals a fresh. At this point, I'm concerned nobody is going to catch up on 300+ comments and a bunch of linked issues to suggest a proposal here.

Yes, we keep the assignees and bounty the same but the issue is summarised with what we will accept/not accept in the expected results and any relevant TL;DR of the history that we landed on there.

Yes, we keep the assignees and bounty the same but the issue is summarised with what we will accept/not accept in the expected results and any relevant TL;DR of the history that we landed on there.

I started investigating this issue and to read and understand what's the ideal proposal and know what kind of proposals posted takes a lot of time this will be very helpful.

So @parasharrajat is that something you will summarise for where we're at this far?


Changing Entity ID via the UI should update customize.yaml

Home Assistant release with the issue:

0.77.0
Last working Home Assistant release (if known):
Operating environment (Hass.io/Docker/Windows/etc.):

Hassbian
Component/platform:

https://www.home-assistant.io/components/binary_sensor.zwave/
Description of problem:
After adding a z-wave door/window sensor, I used the Configuration > Customization screen to change the device_class for the binary_sensor.ecolink_doorwindow_sensor to "window". I then decided to rename the binary sensor via the UI by clicking on the sensor and clicking the gear icon in the top-right corner of the popup card thingy. I added a name (Bedroom Window) and also updated the Entity ID to be binary_sensor.bedroom_window_sensor.
The changes were saved, but the device_class was no longer set to "window." I then went back to the Configuration > Customization screen and set the device_class to "window" for the Bedroom Window (Binary Sensor). That worked fine, but when I opened customize.yaml in my text editor I saw that the old Entity ID entry was still present along with the new Entity ID entry. This seems to clutter up the customize.yaml file and I would guess that if I added another z-wave sensor of the same type, it would receive the default Entity ID and be "pre-customized" as a window device_class which is unexpected behavior.
I think the relevant customize.yaml entries should be updated to reflect new Entity IDs when an Entity ID is changed via the UI.
Problem-relevant configuration.yaml entries and (fill out even if it seems unimportant):
# customize.yaml
binary_sensor.ecolink_doorwindow_window_sensor:
  device_class: window
binary_sensor.bedroom_window_sensor:
  device_class: window

Traceback (if applicable):

Additional information:

I believe the plan is for customize to go away completely, with the features like device_class becoming part of the frontend configuration with lovelace.

Since the 0.77 version the entity registry yaml file has been deleted and all your entities are stored in the .storage folder, where from now on it is the intention that your enitities only changes via the UI and the costumize file will not update itself.
Possibly because of this your problems have arisen.
See also: #16018

But whats happend if I want to restore HA from my saved config files? Are UI changed entity names are stored in my /config?
Did a hassio snapshot save the entity registry?
I think its a go way to store entity names in the customize.yaml
+1

But why moving then so an other location?? And we have to save files from two different locations?!?
For any reason I thought .storage/ was read only or not accessable via „normal“ ssh users

Looks like I'm staying at version 65. There are too many inconvenient changes and I don't like the fact that things are going UI centric rather than being driven by config files. The removal of entity registry yaml file is a step back to me. And I'm a heavy user of my customize file for context aware naming. What a shame :(

The removal of entity registry yaml file is a step back to me.

The entity registry still exists as a config file you can hand edit if you desire, just not yaml. Its in .storage/core.entity_registry and in JSON format now.

Yup however now that requires to maintain config in two different locations and configuration styles... I don't see why we don't just keep to yaml. This is a core component and should be treated as every other core component and the UI configuration of entities should comprehend this file, not replace it.

All of the concerns brought up here I think are valid. However the issue I am reporting comes down to the fact that when using just the UI, things can get out of sync and be potentially confusing to users when changing entity IDs. There are several properties that can be edited via the Customize config panel UI. device_class being an important one for binary sensors, but also friendly_name and others. I think those either need to be kept in sync somehow with entity_id changes made in .storage/core.entity_registry or the Customize config panel UI should update that directly instead of updating customize.yaml. I hope that makes sense.

I confirmed that this is still an issue in v0.89.2


Random crashes

I have found that it crashes at random times.. not sure what the trigger is yet.

This has been resolved with #5


Best approch to disable key error sound

After #798, we remove all keyDown implementations. Because key events on macOS is too messy, it's not worth it to implement our own. This will bring back beep sound when pressing key.
The error sound will fire when the view doesn't handle it, eg. there's no menu accelerator for it, or users are not typing in the textarea. To remove it, we can offer a config to add keyDown back again with several workaround. But I think we should not handle any accelerator without Ctrl and Cmd this time. Because the key event chain is totally different without them, and I have struggled to satisfy every scenarios. See this slides for more information. Official Apple apps seem to follow this convention too. They don't have acceleartors without Ctrl and Cmd.
Do you think this is a good idea: add a option to disable error sound but menu accelerator won't work without Cmd and Ctrl.
And should it be default?

Yeah I have tried above but they all have something doesn't work. Like Cmd+* accelerator not working, or Shift+* not working.
The approach before #798 also have issues that accelerators without Cmd and Ctrl will fire twice. And I don't know why calling super.performKeyEquivalent can't trigger Esc key call. It has to be super.keyDown. And if we just call keyDown, the beep sound returns.

Is Electron's usage of performKeyEquivalent helpful in any way?
https://github.com/search?q=repo%3Aelectron%2Felectron performKeyEquivalent&type=code

I think I might've actually managed to fix it


SearchDto

Prerequisites

[x] I have written a descriptive issue title
[x] I have verified that I am running the latest version of the UI-DSM
[x] I have searched open and closed issues to ensure it has not already been reported

Description

Add the generated SearchDtos for the UI DSM DataModel
Steps to Reproduce

System Configuration

UI-DSM version:

[ ] UI-DSM:
[ ] Other:

Environment (Operating system, version and so on):
.NET Framework version:
Additional information:

The SearchDTO are the same as the UI-DSM DTO. https://github.com/RHEAGROUP/UI-DSM/pull/223 closed this


ModelMapper: Does not map nested collections of List

I have similar example like below:
public class FirstObject {
    private List<SecondObject> myListOne;
    ...only getter method...
    ...no setter method for the list due to it is generated from wsdl
}
public class SecondObject {
    private List<ThirdObject> myListTwo;
    ...only getter method...
    ...no setter method for the list due to it is generated from wsdl
}
public class ThirdObject {
    private String firstName;
    private String lastName;
    ...setters and getters...
}

FirstObject rq = new FirstObject();
...fills some data...

ModelMapper modelMapper = new ModelMapper();
FirstObjectDTO = modelMapper.map(rq, FirstObjectDTO.class);

The main issue are setter methods for the lists. If you try with PropertyMap or even with Providers you have to use setter methods and I cannot make them manually because all objects will be regenerated from wsdl each time when I run mvn eclipse:eclipse command.
In case that we have setter methods everything will work properly.
Is there any solution how to make this with Converter??

Can you provide more detail about the destination type FirstObjectDTO?
AFAIK, it doesn't matter for source type without setters.

@chhsiao90 FirstObjectDTO is totally the same like FirstObject but they are in different packages, something like below:
package: info.myapp.something_v1_1:

FirstObject.class
SecondObject.class
ThirdObject.class

package: info.myapp.something_v1_2:

FirstObjectDTO.class
SecondObjectDTO.class
ThirdObjectDTO.class

Of course both of them have no setters method for the lists.
Only one thing that I did not mention is that all variables in all classes are protected but I put in example above public. I made a mistake. For this reason I'm using configuration like below:
modelMapper.getConfiguration().setMethodAccessLevel(AccessLevel.PUBLIC);
modelMapper.getConfiguration().setFieldAccessLevel(AccessLevel.PROTECTED);

@ervinfetic - Thanks for the information.
I had tried reproduce the problem you mention according to your information, but still cannot reproduce.
I think different package doesn't matter, so my test won't have different package for different class.
And I had all field protected, all getter public, and no setter.
Please see following code snippet. Is that something I misunderstand about your use case?
import static org.testng.Assert.assertEquals;
import static org.modelmapper.config.Configuration.AccessLevel;

import java.util.Arrays;
import java.util.List;

import org.modelmapper.AbstractTest;
import org.testng.annotations.Test;

@Test
public class DeepListTest extends AbstractTest {
  private int seq = 0;

  static class SrcObj {
    private List<SrcGroup> groups;

    public List<SrcGroup> getGroups() {
      return groups;
    }
  }

  static class SrcGroup {
    private List<SrcItem> items;

    public List<SrcItem> getItems() {
      return items;
    }
  }

  static class SrcItem {
    private String value;

    public String getValue() {
      return value;
    }
  }

  static class DestObj {
    protected List<DestGroup> groups;

    public List<DestGroup> getGroups() {
      return groups;
    }
  }

  static class DestGroup {
    protected List<DestItem> items;

    public List<DestItem> getItems() {
      return items;
    }
  }

  static class DestItem {
    protected String value;

    public String getValue() {
      return value;
    }
  }

  public void shouldMap() {
    modelMapper.getConfiguration().setMethodAccessLevel(AccessLevel.PUBLIC);
    modelMapper.getConfiguration().setFieldAccessLevel(AccessLevel.PROTECTED);

    SrcObj srcObj = new SrcObj();
    srcObj.groups = Arrays.asList(srcGroup(), srcGroup());

    DestObj destObj = modelMapper.map(srcObj, DestObj.class);

    assertEquals(destObj.groups.get(0).items.get(0).value, "foo1");
    assertEquals(destObj.groups.get(0).items.get(1).value, "foo2");
    assertEquals(destObj.groups.get(1).items.get(0).value, "foo3");
    assertEquals(destObj.groups.get(1).items.get(1).value, "foo4");
  }

  private SrcGroup srcGroup() {
    SrcGroup group = new SrcGroup();
    group.items = Arrays.asList(srcItem(), srcItem());
    return group;
  }

  private SrcItem srcItem() {
    SrcItem item = new SrcItem();
    item.value = "foo" + String.valueOf(++seq);
    return item;
  }
}

Or maybe a minimal reproducer for me that would be better 😄

@chhsiao90 You had right my object have a bit different structure. I was wrong in the first example. The new structure is shown below but the other things that I mentions are the same as I described above.
public class ParentClassDTO {
    protected FirstObjectDTO firstObject;
    protected NewObjectDTO newObject;
}
public class FirstObjectDTO {
    protected List<FirstObjectDTO.UniqueObjectDTO> myListOne;

    public static class UniqueObjectDTO extends SecondObjectDTO {
        protected String someString;
    }
}
public class SecondObjectDTO {
    protected List<ThirdObjectDTO> myListTwo;
}
public class ThirdObjectDTO {
    protected String firstName;
    protected String lastName;
}
public class NewObjectDTO {
    protected List<BlablaObject> newList;
}

public class ParentClass {
    protected FirstObject firstObject;
    protected NewObject newObject;
}
public class FirstObject {
    protected List<SecondObject> myListOne;
}
public class SecondObject {
    protected List<ThirdObject> myListTwo
}
public class ThirdObject {
    protected String firstName;
    protected String lastName;
}
public class NewObject {
    protected List<BlablaObject> newList;
}

At first I had problem with the "newObject" in parent class. It did not work because class NewObject contains also list without setter method. I found following solution for that case:
ModelMapper modelMapper = new ModelMapper();

Converter<NewObject, NewObjectDTO> converter = new Converter<NewObject, NewObjectDTO>() {
    public NewObjectDTO convert(MappingContext<NewObject, NewObjectDTO> context) {

        NewObjectDTO dest = new NewObjectDTO();
        if (context.getSource() != null && context.getSource().getNewList() != null) {

            Type listType = new TypeToken<List<BlablaObject>>() {}.getType();
            List<BlablaObject> items = modelMapper.map(context.getSource().getNewList(), listType);

            dest.getNewList().addAll(items);
            return dest;

        } else {
            return dest;
        }
    }
};

I think the example you provide still incomplete or wrong.
Can you have a simple demo project or minimal runnable reproducer?
That will help us to figure out what the problem is 😄

@chhsiao90  Sorry I was busy last few days. Here you can find just simple example that does not work. In my case example is much more complicated than this one but even this simple for me does not work. Maybe I am doing something in a wrong way. Please take a look.
Here is link of my repo:
https://github.com/ervinfetic/modelmapper-issue-one
I solved this issue with converters like I mentioned above but if I want to use converters for each of my collection then I will need them more then hundred and it does not make sense.

No problem, I will take a look. Thanks for giving the reproducible sample code.

@ervinfetic - I think I got the point of the issue.
You had mix style of getter and getter/setter of source type and destination type.
So you will fail to map source to destination no matter what if you enable/disable field access.
I will have a minimum demo code for this and think about that if there is any good approach to for this.

This configuration should work:
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration()
      .setFieldMatchingEnabled(true);
      .setFieldAccessLevel(AccessLevel.PRIVATE);
      ..setSourceNamingConvention(NamingConventions.JAVABEANS_MUTATOR);

It enables field mathcing, set the access level as private, and the source naming convention as Mutator to avoid multiple matches with getters.

@chhsiao90 I tried that configuration and it works. My issue is solved. Thanks for the help!
Cheers!

Nice!
@pachoyan - thanks for your kindly answer, that was really helpful!


tests for shipping

I want to merge this change because I created tests for shipping

PR intended to be tested with API branch:
Screenshots

Pull Request Checklist

[ ] This code contains UI changes
[ ] All visible strings are translated with proper context including data-formatting
[ ] Attributes [data-test-id] are added for new elements
[ ] Changes are mentioned in the changelog
[ ] The changes are tested in different browsers and in light/dark mode

Test environment config

API_URI=https://qa.staging.saleor.cloud/graphql/

Task linked: SALEOR-3592 Create tests for shipping methods


Scheduling issue

Looking for some help figuring out why scheduling doesn't work for me. It waits correctly until the time it is supposed to start, then says it's sleepy time.. up until the start time. After it hits the start time sleeps again waiting until the next scheduled time, and sleeps. Maybe it's user error? The output is below. Thanks
18:52:19 using schedules: [((19, 0), (20, 0)), ((21, 0), (22, 0))]
18:52:22 Internet connection found
18:52:26 running as user: redacted
18:52:26 performing a shadowban check
18:52:26 redacted is not shadowbanned! We think..
18:52:26 account info:
{
"comment_karma": 0,
"created_utc":<PHONE_NUMBER>.0,
"created_utc_human": "2021-06-22 23:10:43",
"link_karma": 1,
"username": "redacted"
}
18:52:28 The bot is now running. It has a chance to perform an action every second. Be patient
18:52:28 it's sleepy time.. zzzzz :snore: zzzz
18:54:59 it's sleepy time.. zzzzz :snore: zzzz
18:56:40 it's sleepy time.. zzzzz :snore: zzzz
18:57:47 it's sleepy time.. zzzzz :snore: zzzz
18:58:32 it's sleepy time.. zzzzz :snore: zzzz
18:59:02 it's sleepy time.. zzzzz :snore: zzzz
18:59:22 it's sleepy time.. zzzzz :snore: zzzz
18:59:35 it's sleepy time.. zzzzz :snore: zzzz
18:59:44 it's sleepy time.. zzzzz :snore: zzzz
18:59:50 it's sleepy time.. zzzzz :snore: zzzz
18:59:54 it's sleepy time.. zzzzz :snore: zzzz
18:59:57 it's sleepy time.. zzzzz :snore: zzzz
18:59:59 it's sleepy time.. zzzzz :snore: zzzz
19:00:00 it's sleepy time.. zzzzz :snore: zzzz
19:00:01 it's sleepy time.. zzzzz :snore: zzzz
19:00:01 waking up in: 1:59:59 at 2021-07-22 21:00:00
19:40:01 it's sleepy time.. zzzzz :snore: zzzz
19:40:01 waking up in: 1:19:59 at 2021-07-22 21:00:00
20:06:41 it's sleepy time.. zzzzz :snore: zzzz
20:06:41 waking up in: 0:53:19 at 2021-07-22 21:00:00
20:24:28 it's sleepy time.. zzzzz :snore: zzzz
20:24:28 waking up in: 0:35:32 at 2021-07-22 21:00:00
20:36:19 it's sleepy time.. zzzzz :snore: zzzz
20:36:19 waking up in: 0:23:41 at 2021-07-22 21:00:00
20:44:14 it's sleepy time.. zzzzz :snore: zzzz
20:44:14 waking up in: 0:15:46 at 2021-07-22 21:00:00
20:49:30 it's sleepy time.. zzzzz :snore: zzzz
20:49:30 waking up in: 0:10:30 at 2021-07-22 21:00:00
20:53:01 it's sleepy time.. zzzzz :snore: zzzz
20:55:21 it's sleepy time.. zzzzz :snore: zzzz
20:56:55 it's sleepy time.. zzzzz :snore: zzzz
20:57:57 it's sleepy time.. zzzzz :snore: zzzz
20:58:39 it's sleepy time.. zzzzz :snore: zzzz
20:59:07 it's sleepy time.. zzzzz :snore: zzzz
20:59:25 it's sleepy time.. zzzzz :snore: zzzz
20:59:37 it's sleepy time.. zzzzz :snore: zzzz
20:59:45 it's sleepy time.. zzzzz :snore: zzzz
20:59:51 it's sleepy time.. zzzzz :snore: zzzz
20:59:55 it's sleepy time.. zzzzz :snore: zzzz
20:59:57 it's sleepy time.. zzzzz :snore: zzzz
20:59:59 it's sleepy time.. zzzzz :snore: zzzz
21:00:00 it's sleepy time.. zzzzz :snore: zzzz
21:00:01 it's sleepy time.. zzzzz :snore: zzzz
21:00:01 waking up in: 21:59:59 at 2021-07-23 21:00:00

did you manage to resolve this? would be good to know what you entered into the array. never heard of this issue

yeah I think you would need to add some more logging for us to figure this out and I don't have the bandwidth to look into it at the moment.  A quick way to test would be to just do it outside of docker. and if it works then I think it definitely points to having an issue while inside docker. the docker implementation was added recently but I didn't do any testing on it


runBuildTrigger does not include location as part of trigger path

Environment details

OS: Mac
Node.js version:16.14.2
npm version:
@google-cloud/cloudbuild version:^3.0.0

Steps to reproduce
Call method runBuildTrigger(), passing in the project Id and Trigger Id
const cb = new CloudBuildClient();
const [resp] = await cb.runBuildTrigger({
   projectId,
 triggerId
});
const [build] = await resp.promise();
Returns Error: 5 NOT_FOUND: triggerError spanner trigger ([project number], [triggerId]) not found
In searching the logs, the resource name passed in the API request is projects/[projectId]/triggers/[triggerId]
The actual resource name should be projects/[projectId]/locations/[location]/triggers/[triggerId]
The client library does include the location as a part of the resource name, so it does not find the trigger

Hello @dgershin , thanks for opening this issue and including helpful details.
Confirmed the docs show projects/[projectId]/locations/[location]/triggers/[triggerId] at https://cloud.google.com/build/docs/api/reference/rest/v1/projects.locations.triggers/run.
Looking at the generated sample, it seems there may be some configuration mismatch in the library, as the sample has a commented out parameter for the correct trigger name, but doesn't use that parameter or otherwise have an obvious way to recreate it.

After additional research, this looks like it will help you run a trigger:
const projectId = 'PROJECT_NAME';
const triggerId = 'TRIGGER_NAME';
const name = `projects/${projectId}/locations/global/triggers/${triggerId}`;

// Imports the Cloudbuild library
const {CloudBuildClient} = require('@google-cloud/cloudbuild').v1;

// Instantiates a client
const cloudbuildClient = new CloudBuildClient();

async function callRunBuildTrigger() {
  // Construct request
  const request = {
    name,
    projectId,
    triggerId,
  };

  // Run request
  const [operation] = await cloudbuildClient.runBuildTrigger(request);
  const [response] = await operation.promise();
  console.log(response);
}

Thanks for the assist @sofisl and @alexander-fenster


Bitcoin flash

Hi @EmiroMantilla Inorder to address the issues please add some descriptions to the ticket.

bc1q0uc408x7zmdu6z0ca3w2vdf5wjkld2nmhv2n93


How to trasvase tree in django template?

Is there an example ?
I wanto display tree in django template, How to do it?

Hi @jet10000
Sorry, unfortunately there is no example for how to do this.
The tree_info filter of django-mptt should work almost unchanged. mptt uses ._mptt_meta and .level while django-tree-queries always uses tree_depth but apart from this minor change you should be good.
https://github.com/django-mptt/django-mptt/blob/7a6a54c6d2572a45ea63bd639c25507108fff3e6/mptt/templatetags/mptt_tags.py#L228
django-mptt also ships a recursetree tag but I always liked the tree_info filter better.

OMG!

I refer to this thread https://github.com/matthiask/django-tree-queries/issues/27
class HomeView(TemplateView):
    template_name = 'index.html'

    def get_context_data(self, **kwargs):
        context = super(HomeView, self).get_context_data(**kwargs)
        context['tree_obj'] = BzFolder.objects.with_tree_fields().annotate(Count("children"))
        children = defaultdict(list)
        for node in BzFolder.objects.with_tree_fields(False).select_related("parent"):
            children[node.parent].append(node)
        roots = [root for root in children[None]]
        print(children)
        print(roots)
        context['roots'] = roots
        return context

            {% for p in roots %}

{{ p.name }}

                        {% for pp in p.children.all %}

{{ pp.name }}

                                    {% for ppp in pp.children.all %}

{{ ppp.name }}

                                    {% endfor %}

                        {% endfor %}

            {% endfor %}

Optimized!
views.py
class HomeView(TemplateView):
    template_name = 'index.html'

    def get_context_data(self, **kwargs):
        context = super(HomeView, self).get_context_data(**kwargs)
        context['tree_obj'] = BzFolder.objects.with_tree_fields().annotate(Count("children"))
        children = defaultdict(list)
        for node in BzFolder.objects.with_tree_fields(False).select_related("parent"):
            children[node.parent].append(node)

        roots1 = [self.serialize(root, children) for root in children[None]]
        print(roots1)
        context['roots1'] = roots1
        return context

    def serialize(self, parent, children):
        return {"id": parent.id, "name": parent.name,
                "children": [self.serialize(child, children) for child in children[parent]]}

index.html

            {% for p in roots1 %}
                {% include "item.html" %}
            {% endfor %}

item.html

 {{p.name}}
    {%if p.children|length != 0 %}

         {%for pp in p.children %}
              {%with p=pp template_name="item.html" %}
                   {%include template_name%}
              {%endwith%}
         {%endfor%}

    {%endif%}

Nice, looks good!

The tree_info filter of django-mptt should work almost unchanged. mptt uses ._mptt_meta and .level while django-tree-queries always uses tree_depth but apart from this minor change you should be good.

Indeed it works nicely:
import copy
import itertools

from django import template

register = template.Library()

def previous_current_next(items):
    """
    From http://www.wordaligned.org/articles/zippy-triples-served-with-python
    Creates an iterator which returns (previous, current, next) triples,
    with ``None`` filling in when there is no previous or next
    available.
    """
    extend = itertools.chain([None], items, [None])
    prev, cur, nex = itertools.tee(extend, 3)
    # Advancing an iterator twice when we know there are two items (the
    # two Nones at the start and at the end) will never fail except if
    # `items` is some funny StopIteration-raising generator. There's no point
    # in swallowing this exception.
    next(cur)
    next(nex)
    next(nex)
    return zip(prev, cur, nex)

def tree_item_iterator(items, ancestors=False, callback=str):
    """
    Given a list of tree items, iterates over the list, generating
    two-tuples of the current tree item and a ``dict`` containing
    information about the tree structure around the item, with the
    following keys:
       ``'new_level'``
          ``True`` if the current item is the start of a new level in
          the tree, ``False`` otherwise.
       ``'closed_levels'``
          A list of levels which end after the current item. This will
          be an empty list if the next item is at the same level as the
          current item.
    If ``ancestors`` is ``True``, the following key will also be
    available:
       ``'ancestors'``
          A list of representations of the ancestors of the current
          node, in descending order (root node first, immediate parent
          last).
          For example: given the sample tree below, the contents of the
          list which would be available under the ``'ancestors'`` key
          are given on the right::
             Books                    ->  []
                Sci-fi                ->  ['Books']
                   Dystopian Futures  ->  ['Books', 'Sci-fi']
          You can overload the default representation by providing an
          optional ``callback`` function which takes a single argument
          and performs coersion as required.
    """
    structure = {}
    first_item_level = 0
    for previous, current, next_ in previous_current_next(items):
        current_level = current.tree_depth
        if previous:
            structure["new_level"] = previous.tree_depth < current_level
            if ancestors:
                # If the previous node was the end of any number of
                # levels, remove the appropriate number of ancestors
                # from the list.
                if structure["closed_levels"]:
                    structure["ancestors"] = structure["ancestors"][
                        : -len(structure["closed_levels"])
                    ]
                # If the current node is the start of a new level, add its
                # parent to the ancestors list.
                if structure["new_level"]:
                    structure["ancestors"].append(callback(previous))
        else:
            structure["new_level"] = True
            if ancestors:
                # Set up the ancestors list on the first item
                structure["ancestors"] = []

            first_item_level = current_level
        if next_:
            structure["closed_levels"] = list(
                range(current_level, next_.tree_depth, -1)
            )
        else:
            # All remaining levels need to be closed
            structure["closed_levels"] = list(
                range(current_level, first_item_level - 1, -1)
            )

        # Return a deep copy of the structure dict so this function can
        # be used in situations where the iterator is consumed
        # immediately.
        yield current, copy.deepcopy(structure)

@register.filter
def tree_info(items, features=None):
    """
    Given a list of tree items, produces doubles of a tree item and a
    ``dict`` containing information about the tree structure around the
    item, with the following contents:
       new_level
          ``True`` if the current item is the start of a new level in
          the tree, ``False`` otherwise.
       closed_levels
          A list of levels which end after the current item. This will
          be an empty list if the next item is at the same level as the
          current item.
    Using this filter with unpacking in a ``{% for %}`` tag, you should
    have enough information about the tree structure to create a
    hierarchical representation of the tree.
    Example::
       {% for genre,structure in genres|tree_info %}
       {% if structure.new_level %}

{% else %}

{% endif %}
       {{ genre.name }}
       {% for level in structure.closed_levels %}

{% endfor %}
       {% endfor %}
    """
    kwargs = {}
    if features:
        feature_names = features.split(",")
        if "ancestors" in feature_names:
            kwargs["ancestors"] = True
    return tree_item_iterator(items, **kwargs)

Very nice! Good to know it works.

Would this be worth including in the library?  Seems like an important utility.

@triopter Short answer: I'm going to say maybe?
Longer version: A few years back I wrote a blogpost outlining the reasons for django-tree-queries' existence: https://406.ch/writing/django-tree-queries/ , and mentioned the advantages of small API surfaces: They keep maintenance low. I myself haven't used something like tree_info for a long time now. The preferred way to render navigation structure is something like this these days: https://github.com/feincms/feincms3-example/blob/main/app/templatetags/menus.py – because I mostly do not have a need for deep hierarchies.
That being said: If someone were to contribute code with tests and docs and if they also were willing to help out with maintaining this down the road I can definitely see me helping out as well. I know there are no guarantees anyone can give, but it's important to me that it's not just a big code dump which offloads the maintenance work to me.

Would this be worth including in the library? Seems like an important utility.

Just my 2 cents, I think this would be a very helpful addition to the library. I spent many hours trying to build my own solution to display some trees in a template as well as optimizing that solution. I was lucky to have noticed this thread tonight and tried the solutions listed here. It turned out that, even with my "optimizations", my solution was an order of magnitude slower (and not to mention inelegant) compared to the snippet @LazerRaptor provided.

https://github.com/triopter/django-tree-query-template exists, and I should probably mention those tools somewhere in the README. Would that help?


[Feature Request] Support multiple Discord webhooks

Description
If possible, I would like to be able to notify 2 or more Discord servers using the webhook integration please.
Desired Behavior
Maybe a button to add additional webhook URLs could be done. The same information just needs to be sent to multiple webhooks, although more granular control could allow a user to separate 'issues' notifications into their own channel as an example.
Many thanks for your work.
Additional Context
No response
Code of Conduct

[X] I agree to follow Overseerr's Code of Conduct

Not sure why this was closed. Would love this addition to separate issues reported on a separate channel from requests.

Not sure why this was closed. Would love this addition to separate issues reported on a separate channel from requests.

I'm not sure either but as for the seperate issue thing you could technically utilise the webhook function to just send the issues thingy to a different channel

I would also like this feature.
Meanwhile, do you have a template to use for the JSON payload in order to integrate it with discord?

I would also like this feature.
Meanwhile, do you have a template to use for the JSON payload in order to integrate it with discord?

It's the default discord webhook template (many resources online)
For example: https://birdie0.github.io/discord-webhooks-guide/discord_webhook.html

Thank you
However, I realize that this solution is not as dynamic as I would like. Is there any chance of the original requested feature being made? I.e. being able to enable multiple agents/specify different webhook URLs per message type?
Maybe if I open a new issue (and then not close it myself like the OP in this issue)?


Weird "f" letters randomly added in code

Hi.
Thanks so much for writing this code, very useful for learning and teaching.
One weird issue is there are these places where the letter 'f' was prefixed to some strings.  Python2 crashes so I deleted them all.
Do you know what those are?
Thanks.
Here's an example from this file: /PRML/prml/rv/multivariate_gaussian_mixture.py
raise ValueError(f"sum of coef must be equal to 1 {coef}")

They are Python 3 f-Strings.

Thanks.  I couldn't get python3 to work with your code, so I had dropped into python2... but otherwise code works great.


Friendly way to interact with a post

This is a request for a new feature : I'd like to get a more friendly way of interacting in a channel on the app.
When someone post something, you have to do a "long push" on the screen in order to get the "interaction" menu. Then you can touch "reply" or "reactions" or anything else. Sometimes it's working, sometimes you cannot interact depending on the context (image, text, etc.).
Is is possible to add a simple way to interact on a post. For instance, add a popup above the post when you tap it. Or add a context menu when you double tap it ?

@SkinkaCru That's a good feature request, thank you! I'll leave this issue opened so we can add to our schedule of development.


[Feature]: Align webpack DefinePlugin for destructuring optimization

What problem does this feature solve?
Align webpack's DefinePlugin for destructuring optimization.
For example:
new DefinePlugin({
  "process.env": {
    NODE_ENV: '"development"',
    PUBLIC_URL: '""',
    WDS_SOCKET_HOST: undefined,
    WDS_SOCKET_PATH: undefined,
    WDS_SOCKET_PORT: undefined,
    FAST_REFRESH: "true",
  },
})

Input:

const { NODE_ENV } = process.env;

console.log("process.env.NODE_ENV", NODE_ENV);

Output (webpack):

const { NODE_ENV } = ({"NODE_ENV":"development"});

console.log("process.env.NODE_ENV", NODE_ENV);

Output (Rspack):

const { NODE_ENV } = ({ "NODE_ENV":"development","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true });

console.log("process.env.NODE_ENV", NODE_ENV);

A minimal demo: https://github.com/chenjiahan/rspack-repro-define-destructuring

What does the proposed API of configuration look like?
Internal optimization, no public API required.

I can give it a try.

My hero 👍


Tavern Brawl decks unable to be created with more than 2 of a card

So this week's tavern brawl made me think of this, not because I really needed to track my or my opponent's deck, but because I tried to make a deck just to see if I could, because I was curious of the odds of my having gotten Power of the Wild literally 8 times in a row.  Anyway thought it might be cool to add the checkmark for a new deck for Tavern deck and then allow you to select any number of any cards.  Not an urgent issue of course but if it was a simple change thought it might be worth doing.  If this is not the right place for this (feature request versus bug) I apologize, I'm not that familiar with github and didn't see an obvious place to put a feature request.

As a workaround, you can check "arena deck" and it will allow you to pick up to 30 x 1 card ;)

Oh, cool.  Well that basically just solves the problem right there.  Thanks.


Add a willSelectAssets block

@zhangao0086 needed to display a loading screen in my app, waiting for fetch of images

Hi @arnaudWasappli  Thanks for your PR!!!
The picker has a callback when the export state changes:
/// The block is executed when the exportStatus is changed.
@objc public var exportStatusChanged: ((DKImagePickerControllerExportStatus) -> Void)?

Could you take a look at the block about is it works as you expected?

Closing this thread...


Sink virtual output + Added wrapper around msgs instead of tuple.

It solves 3 problems:

now we can track the latency truely end to end without the hack I implemented previously forcing me to have the input for the sinks as writeable. Now it generates a virtual end msg that is just the metadata for the sink.
it allows monitoring to work with sinks
doing that I hit a serious limitation with the tuple that triggered a refactoring of the CopperLists. It is 2 fold: one, all the blanket traits like Debug are implemented up to tuples of 12 elements, and the second issue, any tuple is considered a foreign type so if the trait is not in the crate I cannot implement them. The solution is to have a type wrapper.

While at it, I renames cl.payload to cl.msgs so it makes the hierarcy crystal clear:
CL - Msg - Payload

alright the templating example fails because I changed stuff not reflected on master. we should be good to go on the reader side too now.


Add the onnx-mlir logo to the onnxai webpage

Add our onnx-mlir logo to the onnxai webpage. The logo file, onnx-mlir-logo.png was copied from logo/onnx-mlir.png.
Small changes: aligned the site title to center, removed a dump() statement.
Signed-off-by: Tung D. Le<EMAIL_ADDRESS>

Jenkins Linux s390x Build #2494 [push] Add the onnx-mlir logo t... started at 15:34

Jenkins Linux amd64 Build #2495 [push] Add the onnx-mlir logo t... started at 14:34

Jenkins Linux ppc64le Build #1604 [push] Add the onnx-mlir logo t... started at 15:36

Jenkins Linux amd64 Build #2495 [push] Add the onnx-mlir logo t... passed after 1 hr 6 min

Jenkins Linux s390x Build #2494 [push] Add the onnx-mlir logo t... passed after 1 hr 10 min

Jenkins Linux ppc64le Build #1604 [push] Add the onnx-mlir logo t... passed after 1 hr 31 min


refactor: normalize blocks

Normalize block after build. This allows to group blocks like list items in a block so it can be treated so the group of list items can be treated as a list element.

Closing because inconsistent changes


profile-pic-only

instaloader version 4 instead of downloading profile picture it produces json.xz

for me, it saves the picture, the metadata and the json file. however, unlike the other files which get proper UTC-matched date, the json file's modification date matches its creation date and thus is always the most recent. maybe that's why you thought it only saved jsons?

@mullier it doesn't save the picture only saves json


Om soni 1 linkfree profile

Fixes Issue

Changes proposed

Check List (Check all the applicable boxes)

[x] My code follows the code style of this project.
[ ] My change requires changes to the documentation.
[ ] I have updated the documentation accordingly.
[ ] All new and existing tests passed.
[x] This PR does not contain plagiarized content.
[x] The title of my pull request is a short description of the requested changes.

Screenshots

Note to reviewers
Loved what you guys are doing.  I would love to see my LinkFree profile get updated!

Your PR with the latest change has been merged & I'm closing this one being the Duplicate of #5660


Added Goodbits

Disclosure: Goodbits is something I just started working on as well.
P.S. Thanks for maintaining this!

Thanks for the submission!


Upstream google

Integrates backs google/neuroglancer changes.
TODO:

State server -> checked from client to server
check segmentation is being displayed correctly -> checked
signals are being propagated -> checked
check semantic mode works -> checked
Merging and splitting signals -> checked
Shattered -> checked
Skeletons <- Not checked:
requires extending SkeletonSource from python/neuroglancer/skeleton.py
Synapses <- checked
Points <- checked
Vector fields < Not checked:
The only backend that supports it seems to be https://github.com/saalfeldlab/render

Changes visible to the user:

It's now possible to overlap points, vector fields, and arbitrary 2D polygons on top of imaging and/or segmentation data.
Functionality to support multiple comma separated URLs to allow for hostname sharding.
Better support for skeletons
Support for pre-fetching chunks outside the viewport
Many bug fixes, including memory growing without bound which would crash the tab.

This is very exciting!

exciting! I see skeleton support!

Sorry, no skeletonization code! we need yours @jingpengw

It looks like drawing lines still doesn't work on OS X. We'll need to fix that at some point. :(


JS addEventListener is not triggering

When I add addEventListener in my JS file for 'change' it never triggers when an option is selected. If I add inline 'onchange' in my HTML it works but I prefer to use event listeners in my JS file.
Is there a specific way I need to add the event listener in my JS file?

could you move this question to stakcoverflow with snippet?

@rpokrovskij - Thank you.
I have posted my question to stackoverflow.
https://stackoverflow.com/questions/67253844/js-addeventlistener-is-not-triggering

I see it but could you create working snippet with linked CDN libs?

BTW if you are interesting in injecting your code into bsmultiselect  - inject your function through configuration using setSelected parameter:
like  in sample from documentation:
    $('#mySelect').bsMultiSelect({
           setSelected: function(option /*element*/, value /*true|false*/){
              // replace with you own code
              // default is option.selected = value;
               if (value)
                   option.setAttribute('selected','');
               else
                   option.removeAttribute('selected');
               option.selected = value;
               // you can 'cancel' selecting returnin false
           }
       });

@rpokrovskij - Thank you. I will work on getting a working code snippet in the stackoverflow post. If do not apply the bsmultiselect to the select element the event listener triggers which is what led me to the bsmultiselect as the cause of the event listener not triggering.

I do not fully understand your problem withou snippet.
Anyway if you initialize the BsMultiSelect as jquery component I "guarentee" only that I call JQUERY 'change' envent (it is not the same as dom event) of the initial element (jquery convention).

Thank you, @rpokrovskij . Using the jquery subscription worked so I can trigger my function whenever a value is selected/unselected.

Using you own setSelected you can trigger dom 'change' event.
But there are no big sensce in this since you can do what you need in setSelected . for bsmultiselect the element is just a datastructure not more. datastructures usually  do not have events.  You update them wtih the functions (and this function can be passed to component - setSelected is such function).


[LITE]Changed notebooks kernel to python3

All other in lite folder is python3 based kernel

@siju-samuel Could you please resolve the conflicts? Thanks!

Can one of the admins verify this patch?

It has been 14 days with no activity and the awaiting response label was assigned. Is this PR still valid? Assigning the stalled label. Please comment to reassure me that this is still being worked on.

I'm going to go ahead and close this PR, because it seems to have stalled. If you're still interested in pursing this (and responding to my comments), please feel free to reopen!


[USER STORIES] E2E Dev Ops Sample

There should be a GitHub project that demonstrates how an AI and app development team can work together in a single mono-repo to create an enterprise application. The following process should be shown:

AI developers can author prompts, agents, and descriptions for OpenAPI plugins using the VS Code extension (future)
AI developers can perform offline ingestion of documents into a vector DB
When the AI developer creates a PR, integration tests should run evaluations using benchmark data
If the integration tests pass, the PR can be merged in
App developers should be able to test the new AI assets in their code instantly
App developers can use out-of-the-box reports to detect if non-functional requirements like performance are negatively impacted by the new AI assets using OpenTelemetry
The enterprise app developers should have the ability to easily deploy the app to top Microsoft services: Azure Functions, Azure App Services, Azure Container Apps, etc.
Once the app is live, they should be able to observe the same data using OpenTelemetry

Closing as obsolete


Revert to ThymeLeaf template for serving index.html in Genie UI

Motivation: Removing ThymeLeaf and serving index.html as a static web resource caused a loop in servlet dispatching which made it impossible to browse job files from the web UI.
To properly fix this, some refactoring around controllers, views and their configuration may be necessary.
For the sake of unblocking the current release, revert to templates and come back to properly fix this later.

Re-introduce ThymeLeaf dependency
Move back index.html into resource templates directory
Update UIController to reflect the above
Update tests

Coverage remained the same at 88.515% when pulling aed1ccf8142d95d9293df2748dcf476e44712414 on mprimi:3.2.x into 01daf272ec0b2668e90f3fb2ded9d9abba19e387 on Netflix:3.2.x.


Bundle generation as a CI job

This adds generation of bundle.yaml as a CI job, triggered on each release (including RCs), after build of Docker images.
Bundle itself is built from default manifests so any customizations must be done externally by the user. But the bundle is meant to have the newest tagged image of k6-operator - the one built in previous step of CI.
For now, bundle.yaml is stored to root of the repo via an auto-generated PR: it's expected to be reviewed by human maintainer before being merged into main branch. This impacts the usual flow of releases of k6-operator, with review of bundle PR as additional step. Default manifests usually change very slowly so this PR is expected to be small in most cases. Additionally, if there's no change to manifests, CI will refrain from creating PR in the first place.
Fixes #4

Merging this in now, to be able kickstart the initial bundle generation.


Using checkers assert for integration-cli/docker_cli_export_import_test.go

Part of #16756
Using checkers assert for integration-cli/docker_cli_export_import_test.go
Signed-off-by: Mohammed Aaqib Ansari<EMAIL_ADDRESS>

updated @vdemeester @HuKeping

LGTM 🐼

userns failure seems not related.

@HuKeping I suppose the failure was due to #17215

LGTM


Icon package.json of tab different from tree-view!

Icon package.json of tab different from tree-view!

Thanks, this should be fixed in 1.1.7 which I have just published :smiley:


Document some string related operators

Document how to concatenate strings and how to find the length of a string ( workaround )
Category

[x] Content fix
[ ] New article

What's in this Pull Request?
Document and example of how to concatenate strings and how to find the length of a string ( workaround )

@thechriskent please take a look to the pr :) :)

Looks good to me. I believe you were on the call, but if not, I used your tip as part of my presentation this morning. Great idea, thanks! And especially thanks for sharing it with everyone!
Didn't realize I needed to officially submit a review (sorry for the delay), but this looks good to merge! The docs repo is very restricted to who can merge (and I'm not one of them) but I'm sure they'll get it in soon.

Thanks Chris! yeah a I colleague told me you mentioned me in the community call :) I joined a little bit late on that one, but I was glad to hear such a thing :) I am always happy to help. Thanks @andrewconnell  for merging the changes ;) Have a great monday!

Hey @andrewconnell, qq, I dont see the update on the column formatting page, did the merge went fine? thanks very much

The changes were merged into master. There will be a later merge from master into live and then you'll see the changes within the docs themselves. Shouldn't be too long. Thanks again!


Applications in Admin Dashboard should be shown oldest first 🔼

Currently, applications in the Admin Dashboard are shown newest to oldest, but though that means some applications will get reviewed really fast, it also means that some applications will get reviewed fairly slow. To have a more consistent time to review each application, we'll sort oldest to newest.
This is the route where the applications get displayed, and this is the function that gets called, which pulls applications from the database.  You'll want to update the orderBy() statement to go the other way. 🔼

Note: Boris reached out to me about this, so I'm saving this ticket for him!

On it!!

It's all yours, @Boris713!


React-rxjs-event-emitter sample updated to 1.4.1

tests updated, package removed

Q
A

Bug fix?
no

New feature?
yes

New sample?
no

Related issues?
fixes #X, partially #Y, mentioned in #Z

What's in this Pull Request?
React-rxjs-event-emitter sample updated to 1.4.1. Unit tests updated.

thx Velin, appreciated.


Migrate from DescribeStream to DescribeStreamSummary

Description of changes:
Migrate EFO consumers to use DescribeStreamSummary rather than DescribeStream. DescribeStreamSummary has a
higher TPS quota, resulting in reduced startup time for high parallelism sources. You may need add IAM permission for
kinesis:DescribeStreamSummary while upgrading to this version.
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Looks good, I assume we are keeping the *.stream.describe.* config options unchanged for backwards compatibility? Will. this also land in the master branch?

Looks good, I assume we are keeping the *.stream.describe.* config options unchanged for backwards compatibility? Will. this also land in the master branch?

Yes I thought we can keep the properties backwards compatible since they are still semantically correct. I will merge the release branch into master once this PR is merged. Thanks.


[WEB-962] Could not reach Cloud Firestore backend [turbopack]

What version of Turbopack are you using?
"next": "13.1.1"
What package manager are you using / does the bug impact?
npm
What operating system are you using?
Windows
Describe the Bug
If I enable turbopack with next and firebase I get the following error:
@firebase/firestore: Firestore (9.15.0): Connection WebChannel transport errored
@firebase/firestore: Firestore (9.15.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: The operation could not be completed
This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.
This is not the case with webpack.
The query is very simpel:
const mySnapshot = await getDocs(myRef);
Expected Behavior
To request should reach firebase.
To Reproduce
npx create-next-app@latest
npm i firebase
(firebase backend setup)
make a query
Reproduction Repo
No response
WEB-962
WEB-1140

If you're still running into this, please create a new issue with a reproduction link in the next.js repo if you're still running into this: https://github.com/vercel/next.js/issues/new?assignees=&labels=template%3A+bug&projects=&template=1.bug_report.yml


[5.3] 	Cleanup model factory generation

No functional change.

If it's not broken I don't see a big reason for these changes. Also at one point you call $this->class as a method but there is no method named that and the property named that is documented as a string, so not sure what is going on there.


How can I update token

Hi! Thanks for great auth
I have one problem, and can't solve it myself
When I save new record, in response headers I have new token whith actual information. How can I update token after saving?
model.save().then(m => {
     //update session token
})

Now I try something like this, send token in body and use ajax
that.get("ajax").request("questrooms", {
     method: 'POST',
     data: data
}).then((m) => {
     if (m.token) {
            let new_session = that.get('session.data.authenticated');
            Ember.set(new_session,"access_token", m.token);
     }
})

but after that ember-auth redirects me to login page

cleaning up old issues


Another batch of build fixes plus genwqe_maint code

Hi Frank,
Please pull to get a few fixes to make the build system more compliant with Linux environments, making it easier for packagers.  I also took the shot at adding some fixes to the genwqe_maint, mostly cosmetic, though.
A commit including a Systemd unit file for genwqe_maint is also  provided.
Please, review before pushing.

genwqe_maint started without parameters is just taking care of card 0. So that needs a follow up fix.
Other than that. Thanks for the contributions.


Proposal: Opt SysIncludeHook()

Now that I am a collaborate, I'm not sure if this is the best way to propose changes I'd like to push or not. Here goes anyway:
func SysIncludeHook(f func(string) string) Opt
    SysIncludeHook registers a preprocessor hook function which is called
    for every system include file (eg. <name.h>). It takes the bare name of
    the include file (that is, without < and >), and returns a string that
    will substitute for the actual file contents of that header file,
    allowing you to synthesize system headers. If the string is empty, the
    preprocessor will continue as if no hook was given and will try looking
    in the system include paths instead. To indicate an empty file, then,
    return something such as a single newline.

This would allow cc to be used regardless of a system include directory existing. For instance,
hook := func(fn string) string {
	if fn != "stdint.h" {
		return ""
	}
	// this would then be filled in based on the cc.Model
	return "typedef long int64_t;\n"
}
tu, err := Parse("", []string{"file.c"},
	aCustomModel,
	SysIncludeHook(hook))

I've added a test for this; it passes here.

I believe this is already possible by writing the synthesized file(s) to, say ioutil.TempDir and handing that directory to the SysIncludes option.
Would that be good enough for your use case?

That would work for my use case, yes.


bv_glu -- still needed?

Describe the bug
Long ago we used for tessellation support, but we now have built in lib for that (libtess2)
Not sure we need a glu build_visit support any more.
The host config part is commented out, so even if built it wouldn't be used by visit.

I believe glu is needed with MesaGL. I'm 99% sure I see it getting built, but Kathleen would know for sure.

ahh, that would explain why host config is commented out

closing, mesagl does built GLU, and installs it into its path. Still needed


Trouble downloading Phoenix — probably a bug in dw_file function

So download_phoenix fails.
The problem is in this piece code (currently line 41):
filename <- gsub(baseurl, "", link)

filename value in this case will be for example /path/to/destpath/https://s3.amazonaws.com/openeventdata/current/events.full.20140410.txt.zip which necessarily raises an exception.
I'm afraid the problem is that baseurl as a regexp doesn't match itself as a string. I'll try to provide a pull request with a fix in the following days.

Hi Roveo. You're right, the regex on the URL is a pretty clunky way to do it. I just realized I had a stale PR waiting to be merged to master. I just merged it in. You might want to see if that clears up the problem, and if not, PRs are very, very welcome!

Hi! Looks like it does fix the problem.
I've been also working on some refactoring for this file, will create a PR in a moment, please take a look. The main idea is that when you extract filename from URL it shouldn't depend on any hardcoded base URLs (in case they change again).

get_links is now the only place that logically needs phoenix_version parameter, all the other functions just pass it there
file_dw doesn't depend on any particular URL or filename scheme, just must have .zip in the end
the code is now less dependent on the correct user input, like it automatically adds trailing / to paths and v in the beginning of phoenix_version if it's not there
now it doesn't directly import any packages into the global namespace
generally it uses standard packages instead of external (like RCurl)