plans for alternative distributions: e.g. Fedora, ArchLinux, etc?

My Windows machines always have a dual-booting Linux partition: playing games in Windows, and getting work done in Linux. As such, I'm extremely excited about WSL and Ubuntu on WSL.
I'm curious about whether or not there is room for more choice in distributions? Is there an open specification that describes what was necessary for Ubuntu to do? Can alternative distribution images that conform to this specification be used instead? Is it possible to build such an image myself, or is there a signing requirement?
I'd love to see ArchLinux and Fedora alternatives, once the dust settles of course.

This was the first question I had when watching the demo video +1

An effort to release an open specification could be related to #1 ?

https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/13253418-plan-to-support-other-linux-offerings-i-e-coreos

I would be all over an Arch version of this.

I replaced the userland with a Gentoo stage 3, which didn't seem to break anything (however, emerge doesn't work due to failing sanity checks on /dev).

I think that Manjaro is a great arch distribution

I would say that they should make Windows Subsystem for Linux open-source, so that, developer can add their own flavors. Because they will never have enough resources to meet the expectations of such broad community.
https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/13389537-make-windows-subsystem-for-linux-open-source

WSL doesn't need to be open source for this to be possible. WSL is kernel mode code anyway (I think, correct me if I'm wrong) so I don't think the community would have the ability to compile and run custom patched copies of WSL easily. But for this item, all we'd need is documentation on what modifications Canonical made between the standard Ubuntu distribution (iso or whatever) and the userland-only version that Bash on Windows downloads. And either documentation or source for the C:\Windows\System32\bash.exe launcher/installer, which is a win32 executable so presumably anyone would be able to build an equivalent or modified version to pull down an alternate distro's userland.

@tkelman You are correct. We would not need to make the project open source to open up to other distributions. Currently we're focused on delivering a solid bash shell but there are many other exciting potential applications of our technology, including allowing people to select their distro of choice.
As far as the image we got from Canonical it has absolutely zero modifications. Dustin Kirkland from Canonical has a great blog post with some more info if you are interested.

I read that blog post when it went up, I'm curious on the technical specifics of which image it's using though. Is it literally the exact http://releases.ubuntu.com/releases/trusty/ubuntu-14.04.4-server-amd64.iso image, or is it a userspace-only version derived from it with the Linux kernel removed?

It's kind of hidden in his post but he says:

So as part of the engineering work, I needed to wrap the stock Ubuntu root filesystem into a Windows application package (.appx) file for suitable upload to the Windows Store.

D'oh, thanks for that! Does make sense that this would have some commonality with "cloud images" you might use in a container. So it's the "wrap [...] into a Windows application package" equivalent step that we'd need to reverse engineer or get source or documentation of some kind to be able to recreate on a different distro. Should look into whether any other distros have equivalent userspace-only images already prepared.

I've done it for Fedora:
https://www.youtube.com/watch?v=lRg0BXhxncM
How to:
https://www.variantweb.net/blog/running-fedora-on-windows-10-using-wsl/

I've actually done arch linux within this, but I've ran into a major problem that would likely have to be fixed in pacman/libalpm itself, in that it makes numerous calls to chroot() from unistd.h which apparently isnt currently supported within lxss

The chroot issue is here: https://github.com/Microsoft/BashOnWindows/issues/47

Oh, so it is! btw, I'm talking about the c call for chroot() and not the command itself. As I said, I actually have a 'running' archlinux going, but I can't use pacman :P

@ntzrmtthihu777 Don't keep us hanging now! What were the steps?

For whatever reason I can't replicate it again, and even then until we can do chroot() it's next to useless :/

@ntzrmtthihu777  Can you give us whatever little you remember? Where did you start and everything.. ?

@sjenning Oh how much I'd love to be able to create symlinks without root permission

@SRGOM
Install Arch Linux to WSL:

Download latest iso file from https://www.archlinux.org/download/
Extract arch\x86_64\airootfs.sfs from archlinux-2016.08.01-dual.iso to /path/to/airootfs.sfs
Enter bash.exe, install squashfs-tools with apt-get, run unsquashfs /path/to/airootfs.sfs in /root
Close bash.exe, enter c:\Users%username%\AppData\Local\lxss with explorer.exe, backup rootfs, move root\squashfs-root to rootfs
Enter bash.exe again, it's Arch Linux now

Solve(skip) chroot problem:
echo 'int chroot(const char *path){}' > chroot.c
gcc chroot.c -shared -fPIC -o /path/to/libchroot.so

LD_PRELOAD=/path/to/libchroot.so pacman

Thank you goreliu, everything looks perfect from the screenshot!
Would you say anything has trouble or is everything 100% working? I'm going to try this in a bit...

@SRGOM

fakeroot doesn't work, but makepkg depends it

$ fakeroot
fakeroot, while creating message channels: Function not implemented
This may be due to a lack of SYSV IPC support.
fakeroot: error while starting the `faked' daemon.
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

I wrote a fakefakeroot, replace it, just works, but then owners of files in .pkg.xz are not root.
#!/bin/bash

if [ "$1" = "-v" ]; then
    echo 1.0
    exit
fi

export FAKEROOTKEY=1

exec "$@"

unset FAKEROOTKEY

Versions of packages in Arch Linux is much higher then which in Ubuntu 14.04, some tools failed to run, such as script command and socat UNIX-LISTEN:aa - command.

We can't start any serivce with systemctl start foo, and no service command exists. The only method seems to be manually run /usr/bin/sshd , /usr/bin/crond, ...

For what it's worth, I wrote a few scripts to easily grab the Docker official images, install them as the rootfs for WSL, and switch between the installed distributions seamlessly.
The project is in its infancy, and available from here: https://github.com/RoliSoft/WSL-Distribution-Switcher
I'll look into adding more sources and post-install hooks to fix known issues for each image, where the issue is known and fixable.

@RoliSoft This is a really useful feature! You should publicize this (and I will)!
@aseering How do you think about a "featured add-on" section in your community powered forum where we can list stuff like this?
@All: Highly recommend checking this out- the killer feature is instant(?) change-distro-on-demand. E.g. I prefer Arch as my dev distro but my deployment is Ubuntu and I wanted to keep prod as close to dev as possible. Now I can have Arch environment as dev but can run tests on Ubuntu env.

@SRGOM -- sorry for the delay -- do you think the existing "Tools and Instructions" category would work?  If not, or if it gets too crowded, I'd be happy to make a new section.

@aseering Didn't notice that earlier, I added.

@goreliu I had a problem where the unsquashfs'd thing didn't have GCC.

@fpqc Compile codes in Ubuntu and move output binaries to Arch also works.

@goreliu yeah I figured.

@goreliu Sorry, one other thing: Where do I put the fakefakeroot script?  Do I overwrite the downloaded fakeroot?
Also, can I add the libchroot to /etc/ld.so.preload ?

@fpqc Uninstall fakeroot, and put fakefakeroot in /usr/bin/fakeroot, or any other directories in PATH.
Adding libchroot to /etc/ld.so.preload may cause some security problems (for example, sshd will not chroot to /var/empty, and no error messages will be printed).

@goreliu You can use fakeroot-tcp from AUR instead of fakeroot. It works better than a wrapper, since the owners of the files in the .pkg.xz are actually set to root.
That being said, your wrapper is needed to initially compile fakeroot-tcp.

@RoliSoft Thanks, fakeroot-tcp works.

@fpqc I wrote a small lib which you can put in /etc/ld.so.preload, and will only affect pacman, so it's safe:
#define _GNU_SOURCE
#include <unistd.h>
#include <libgen.h>
#include <dlfcn.h>
#include <linux/limits.h>
#include <string.h>

int chroot(const char *path)
{
	// return 0 for pacman

	char dest[PATH_MAX];
	if (readlink("/proc/self/exe", dest, PATH_MAX) != -1) {
		char* file = basename(dest);
		if (strcmp(file, "pacman") == 0) {
			return 0;
		}
	}

	// passthrough for others,
	// currently results in -1 and errno=38

	int (*_chroot)(const char*);
	_chroot = dlsym(RTLD_NEXT, "chroot");
	return (*_chroot)(path);
}

Compile it with:
$ gcc libmockchroot.c -shared -fPIC -ldl -o /lib64/libmockchroot.so
$ echo "/lib64/libmockchroot.so" >> /etc/ld.so.preload

@RoliSoft I hope you are putting this in your project, I pull it every time you update it!

Further search revealed the fakechroot package, which hooks the file I/O functions and actually rewrites the paths.
After installation with pacman, you can add /usr/lib/libfakeroot/fakechroot/libfakechroot.so to /etc/ld.so.preload, which will cause all chroot-using applications to not only not fail, but behave as expected if chroot was available.
This does, however, load the library into all applications. I haven't tested the performance implications just yet, but based on the source, not many operations are done, if chroot is not called by the process.

If you are brave, you can try the (undocumented, unstable) dev branch of alwsl.
alwsl is really two parts:

the alwsl.bat management utility (manage WSL, users, snapshots etc.) on the windows side and
a custom archlinux distribution containing many custom builds of pacman, root-related libs, makepgk, yaourt etc. in order to operate smoothly within WSL.

The batchfile version is not the final product, more like a proof-of-concept. The final version of alwsl is written in C and will be released at some point next week. The final version contains a plugin system for user-defined addons to alwsl systems (like Audio from WSL, a better X setup etc.).
As I said, ATM the dev branch is undocumented. Download a copy of the alwsl.bat and run it without arguments to see usage information.

@minxomat Have you tried @RoliSoft 's scripts?  I looked at the alwsl.bat thing, and it doesn't even look like it is fixing chroot and fakeroot (fakechroot and fakeroot-tcp).  @Rolisoft has got all the little Arch compatibility hacks ready to go, just remove the ".sample" from the hook script.

@fpqc If you looked at the script and my above post, I clearly stated that this is a custom distribution. it contains all fixes necessarily for WSL. The distro is downloaded during the install task. It not only fixes fakeroot, but every other error or warning you might get in WSL otherwise.

Think of it as a replacement for lxrun. Instead of installing and managing a ubuntu server WSL, it does the same with archlinux. Sure you can make a vanilla arch compatible, but this is meant for folks who look for something as simple to run as lxrun itself.

@minxomat Interesting, I'll try it out.

@fpqc Well, I don't recommend to use it just now. But you can try. Backup everything in any case.
Full documentation is ofc included in the final version. Also, not all mods are applied in the dev branch, so there might be some warnings until testing is finished. If you find something, open an issue. It's better to have duplicate issues to be reminded of important things :smile:

Are there plans for Red Hat Linux, Kali, and SELinux to be added to the Windows Store?

Can we sdk to create our own from chroot or tarball

Both Kali Linux and Debian are now available on the Windows Store

My questions @tara-raj 1. Who does provide the install.tar.gz file? Does Microsoft make that own or the developer of that distro? 2. Who publish the appx in Windows Store? 3. And last, who build the added distro_name.exe in Appx package?

@Biswa96 - @tara-raj is currently working with several Linux distro vendors to help them bundle & publish their distros to the store - we feel it's best for the distro owners to control and manage the release of their distros on their schedule.
We believe that it's best for all concerned, if a distro is published from the store under the auspices of the owning organization. This way, when you see "Ubuntu" published by "Canonical Inc.", you can feel confident that it's the real-deal, whereas if you saw "Ubuntu" published by "Joe Bloggzzz the MegaGeek", you might pause and question whether the app is legitimate.
Distro owners are responsible for everything that goes into their APPX- the distro tar.gz itself, along with the launcher, and any icons/images etc.
Distro owners fork the sample distro launcher, modify a few settings, and build their launcher app. The launcher app is (deliberately) very simple, and basically handles registering a distro and launching of a distro instance when the user clicks a start menu tile, or calls the launcher's app execution alias (e.g. "ubuntu.exe").


synx: command not found

I'm install synx : gem install synx
After i can't use synx in terminal.

Hi! Maybe it's late, but found possible solution for Your problem. At first I had this problem too (after using gem install synx, but then I reinstalled sync by adding sudo before gem install synx. Now it works like a charm!


Drop-down checkbox or method to display available values for a column

The column search filter has been good alternative to the default Django Admin list_filter, especially if you know what you are looking for. However, I was wondering if there was a way to view the set of values for a particular column? A similar issue I saw was #7 and am wondering if any progress was made on that. Thank you!

Did you check this ?
https://github.com/morlandi/django-ajax-datatable#filtering-single-columns

Hi @morlandi, yes I found that after my post. I think it is a good step towards what I was looking for. I have a couple questions:

Is there a way to have both a select menu and search box? So that the "select menu" filters based on what is typed in the search box? And you can still perform OR operations for search terms, if you want to view multiple values filtered?
Currently, when I add a max_length, ellipses cut short the column values. Is there an option to view the whole value when hovering over in the select menu?

In reference to question number 2, utilizing https://select2.org/ library would do the job. But the unfortunate part is that we have no capability to adjust the datatable input fields and selects classes of which we can target in JS. @morlandi you can do something on that
Then also @morlandi  can we have the max_length ellipsis affect data only in dropdowns not the full data rendered in the td?


does not compile with newer ffmpeg versions (FF_INPUT_BUFFER_PADDING_SIZE)

for newer ffmpeg versions FF_INPUT_BUFFER_PADDING_SIZE in scan.c needs to be renamed to AV_INPUT_BUFFER_PADDING_SIZE to be able to compile again

closed, as i meant to open this issue over here: https://github.com/Moonbase59/loudgain


fix: Set isort line_length to same as other tools

Without this, isort will make a single import line with 88<n_chars<99 into a multi-line import, and black will convert it back to a single line.  They will never pass at the same time.

@facundobatista this might be worth porting to the new charm raft templates - looks like an oversight!
Cheers @ca-scribner!

@jnsgruk sure! https://github.com/canonical/charmcraft/pull/873


Revert "Simplify Chip slightly"

Reverts flutter/flutter#47254
This is breaking the chips. I'll have to investigate whats going on. Reverting in the meantime.

/tbr @gspencergoog

I was going to comment, the shape of the chips in our app were missing their borderRadius.


Completed the guide and the excercise

Here goes the resolution of two Issues (#94 and #95 ), sorry for my mistake. I mixed them, it will never happen again!

Sorry this is a bit messed up, I have found code from colopicker into sample 01 (is not only two samples in one, some of the files has been dropped into the wrong folder).
IMHO it would be a good idea to copy the readme's of each reviewed sample copy it locally and start from a clean fork.


[BUG] DNS records are not cleaned up in /etc/hosts after crc cleanup

General information

OS: Linux & macOS
Hypervisor: KVM / hyperkit
Did you run crc setup before starting it (Yes/No)? Yes
Running CRC on: Laptop

Steps to reproduce

crc setup
crc cleanup
check /etc/hosts, custom dns records are still present.

This is in  master for a while now.


Big Sur, Broadcom DW1830 Wifi, X250, wifi broken after wake from sleep

Your guide and OC files work great! I have experience with Clover, but this is my first time with OC. It was pretty flawless and straightforward getting this working for the first time.
However, when I close the lid of my X250 and let the machine go to sleep, upon wake the internet no longer works. The wifi remains connected, and I can turn it off and back on again, it connects, but there is just no internet connection. A reboot fixes it. Wifi card is Broadcom DW1830.
I've tried adding AirportBcrmFixup.kext to my Kext folder, which is a kext I used with Clover on this machine, but it doesn't seem to help. Back on Clover, I had no issues with the Broadcom wifi at all, but that was also on Catalina.
Any idea what it could be? Thanks in advance!

OS: Big Sur 11.2.1
Laptop: ThinkPad X250
Wifi: DW1830

Hhm I'm not so sure because i don't have Broadcom card.
Install IORegExplorer then search for Bcrm or Broadcom and post the screenshot of all the entries found in there with that name

When I run IORegExplorer and search for either Bcrm or Broadcom, nothing comes up.
Do you have any issues personally with your Intel wifi card? I also have the native Intel card (7265) that came with my X250 and I can install and use that if it works. It's just been my experience that Intel wifi and Hackintosh doesn't work well. Has that changed?

Possibly the kext is not being fully loaded after wake from sleep. If it's correctly loaded it should show up in IOReg
The Intel card works perfectly. Intel cards are now supported with the help of Openintelwireless kexts. The only issue is with bluetooth, when you connect to bluetooth devices that don't have strong antennas the sound becomes choppy or disconnets.  Sound is choppy on my earbuds but it works perfectly fine on my Bluetooth speaker which has better antennas.
It's a known limitation of the 7260/7265 cards because of the Linux driver used. Also this issue only happens when you are connected to wifi, if you turn off wifi your bluetooth works as it's supposed to.
Other than that i have no issues with WiFi on Big Sur. I almost never shutdown my laptop and only depend on sleep/wake and it has worked perfectly for months now.

That's great, thank you. I've installed my Intel 7265 card, speeds are great, and internet works after wake from sleep. I personally don't really use Bluetooth for anything, so that's a non-issue for me. But this seems to be working well. Thanks so much for your quick responses. I appreciate your assistance!

No problem.

That's great, thank you. I've installed my Intel 7265 card, speeds are great, and internet works after wake from sleep. I personally don't really use Bluetooth for anything, so that's a non-issue for me. But this seems to be working well. Thanks so much for your quick responses. I appreciate your assistance!

Just make sure you use the Intel kexts in this repo. As I've removed all the unnecessary firmware for other cards that improves kext loading at boot. I usually update them when i update other kexts or update opencore


ci: update labeler config for v5 [wip]

What does this PR do?
Resolves #19135
it was not visible within the original PR, as we have applied pull_request_target

Before submitting

Was this discussed/agreed via a GitHub issue? (not for typos and docs)
[x] Did you read the contributor guideline, Pull Request section?
[x] Did you make sure your PR does only one thing, instead of bundling different changes together?
Did you make sure to update the documentation with your changes? (if necessary)
Did you write any new necessary tests? (not for typos and docs)
[x] Did you verify new and existing tests pass locally with your changes?
Did you list all the breaking changes introduced by this pull request?
Did you update the CHANGELOG? (not for typos, docs, test updates, or minor internal changes/refactors)

PR review
Anyone in the community is welcome to review the PR.
Before you start reviewing, make sure you have read the review guidelines. In short, see the following bullet-list:

Reviewer checklist

[x] Is this pull request ready for review? (if not, please submit in draft mode)
[x] Check that all items from Before submitting are resolved
[x] Make sure the title is self-explanatory and the description concisely explains the PR
[x] Add labels and milestones (and optionally projects) to the PR so it can be classified

📚 Documentation preview 📚: https://pytorch-lightning--19151.org.readthedocs.build/en/19151/

verified in https://github.com/Lightning-AI/pytorch-lightning/actions/runs/7192736293/job/19589760795?pr=19151


roadmap - 0.0.7

what is needed for release 0.0.7

[ ] https://github.com/OpenVoiceOS/ovos-ocp-audio-plugin/issues/43
[x] https://github.com/OpenVoiceOS/ovos-core/pull/269
[x] https://github.com/OpenVoiceOS/ovos-plugin-manager/pull/117/
[ ] https://github.com/OpenVoiceOS/ovos-core/issues/258

[x] https://github.com/OpenVoiceOS/ovos-core/pull/271  <- avoids issue above, not a fix

[ ] https://github.com/OpenVoiceOS/ovos-core/pull/272

[x] https://github.com/OpenVoiceOS/OVOS-workshop/pull/49
[x] https://github.com/OpenVoiceOS/ovos-utils/pull/96
[x] https://github.com/OpenVoiceOS/OVOS-workshop/pull/51
[x] https://github.com/OpenVoiceOS/skill-ovos-setup/pull/71
[x] https://github.com/OpenVoiceOS/skill-ovos-weather/pull/21
[x] https://github.com/OpenVoiceOS/skill-ovos-wikipedia/pull/10
[x] https://github.com/OpenVoiceOS/skill-ovos-soundcloud/pull/4
[x] https://github.com/OpenVoiceOS/skill-ovos-homescreen/pull/71
[x] https://github.com/OpenVoiceOS/skill-ovos-ddg/pull/13
[x] https://github.com/OpenVoiceOS/skill-ovos-stop/pull/10
[x] https://github.com/OpenVoiceOS/skill-ovos-filebrowser/pull/4
[x] https://github.com/OpenVoiceOS/skill-ovos-fallback-chatgpt/pull/3
[x] https://github.com/OpenVoiceOS/skill-ovos-fallback-unknown/pull/2
[x] https://github.com/OpenVoiceOS/skill-ovos-wolfie/pull/11
[x] https://github.com/OpenVoiceOS/skill-ovos-youtube/pull/16
[x] https://github.com/OpenVoiceOS/skill-ovos-date-time/pull/12
[x] https://github.com/OpenVoiceOS/skill-ovos-youtube-music/pull/2
[x] https://github.com/OpenVoiceOS/skill-ovos-naptime/pull/7
[x] https://github.com/OpenVoiceOS/skill-ovos-news/pull/7
[x] https://github.com/OpenVoiceOS/skill-ovos-date-time/pull/13
[x] https://github.com/OpenVoiceOS/skill-ovos-hello-world/pull/1
[x] https://github.com/OpenVoiceOS/skill-homescreen-lite/pull/4
[ ] https://github.com/NeonGeckoCom/skill-alerts/pull/73
[x] https://github.com/OpenVoiceOS/skill-ovos-camera/pull/8
[x] https://github.com/OpenVoiceOS/skill-ovos-bandcamp/pull/2
[x] https://github.com/OpenVoiceOS/skill-ovos-somafm/pull/2
[x] https://github.com/OpenVoiceOS/skill-ovos-personal/pull/5
[x] https://github.com/OpenVoiceOS/skill-ovos-volume/pull/18

[ ] add offline default skills to requirements list

[x] https://github.com/OpenVoiceOS/skill-ovos-volume
[ ] https://github.com/OpenVoiceOS/skill-ovos-personal
[ ] https://github.com/OpenVoiceOS/skill-ovos-naptime
[ ] https://github.com/OpenVoiceOS/skill-ovos-date-time
[x] https://github.com/OpenVoiceOS/skill-ovos-setup
[x] https://github.com/OpenVoiceOS/skill-ovos-fallback-unknown
[x] https://github.com/OpenVoiceOS/skill-ovos-stop
[ ] https://github.com/OpenVoiceOS/skill-ovos-hello-world
[ ] https://github.com/OpenVoiceOS/skill-ovos-filebrowser
[ ] https://github.com/NeonGeckoCom/skill-alerts

[ ] OPM 0.0.22
[ ] ovos_utils 0.0.28
[ ] ovos_workshop 0.0.11
[ ] moar fixes ?

nice to have:

[ ] https://github.com/OpenVoiceOS/skill-ovos-filebrowser/pull/3
[ ] https://github.com/OpenVoiceOS/ovos-PHAL/pull/12

[x] https://github.com/OpenVoiceOS/ovos-plugin-manager/pull/118
[ ] https://github.com/OpenVoiceOS/ovos-PHAL-plugin-ipgeo/pull/6
[ ] https://github.com/OpenVoiceOS/ovos-PHAL-plugin-dashboard/pull/8
[ ] https://github.com/OpenVoiceOS/ovos-PHAL-plugin-wifi-setup/pull/19
[ ] https://github.com/OpenVoiceOS/ovos-PHAL-plugin-gui-network-client/pull/13
[ ] https://github.com/OpenVoiceOS/ovos-PHAL-plugin-color-scheme-manager/pull/4
[ ] https://github.com/OpenVoiceOS/ovos-PHAL-plugin-connectivity-events/pull/8
[ ] https://github.com/OpenVoiceOS/ovos-PHAL-plugin-mk1/pull/1
[ ] https://github.com/OpenVoiceOS/ovos-PHAL-plugin-oauth/pull/6
[ ] https://github.com/OpenVoiceOS/ovos-PHAL-plugin-system/pull/14

Marking this issue here, was shared on the development matrix channel and making this a formal issue that causes breakage for distributions packaging ovos-core https://github.com/OpenVoiceOS/ovos-core/issues/276

@JarbasAl personal skill looks like it needs a token added to secrets

Pending Skills PRs:

https://github.com/OpenVoiceOS/skill-ovos-date-time/pull/16
https://github.com/OpenVoiceOS/skill-ovos-personal/pull/6
https://github.com/OpenVoiceOS/skill-ovos-naptime/pull/9

Ready for stable releases:
https://github.com/OpenVoiceOS/skill-ovos-stop/compare/V0.2.0...V0.2.1a2
https://github.com/OpenVoiceOS/skill-ovos-date-time
Dependency updates to prep stable releases:
https://github.com/OpenVoiceOS/skill-ovos-personal/pull/7
https://github.com/OpenVoiceOS/skill-ovos-naptime/pull/10
https://github.com/OpenVoiceOS/skill-ovos-hello-world/pull/3
https://github.com/OpenVoiceOS/skill-ovos-filebrowser/pull/6

Remaining alpha dependencies:
https://github.com/OpenVoiceOS/ovos-stt-plugin-selene
https://github.com/OpenVoiceOS/skill-ovos-filebrowser
https://github.com/OpenVoiceOS/skill-ovos-hello-world
https://github.com/OpenVoiceOS/skill-ovos-date-time
https://github.com/OpenVoiceOS/skill-ovos-naptime
https://github.com/OpenVoiceOS/skill-ovos-personal


CSS link is not removed when base is an empty string

Like #18.
base can be an empty string (doc).
base: './' works well, but base: '' not work.

It also doesn't when base has a URL base: `https://${host}/`,
The output hashes doesn't match on build
dist/assets/index.54fc5f50.js                      39.24 KiB / gzip: 11.99 KiB
dist/assets/core-view.8235ec87.js                  184.01 KiB / gzip: 53.15 KiB
dist/assets/core-iframe.33512bf9.js                254.73 KiB / gzip: 77.94 KiB
dist/skeleton.js                                   403.37 KiB / gzip: 92.55 KiB
dist/assets/Main.e705a1ae.js                       1013.25 KiB / gzip: 338.40 KiB

I'm working on the new version, give me some time and I will return with a new version that resolve that problem

@seahindeniz @Tsuk1ko Can you try the new release 2.0.0? please?

https://www.npmjs.com/package/vite-plugin-css-injected-by-js?no_cache=1

Nice, it works well. Thank you!

Hi @Marco-Prontera sorry for returning so late. I just finally got a chance to continue on the project that I was having issues on.
At the moment, the issue still persist on version 2.1.0

@seahindeniz I will update you once fixed ;)

Thank you Marco 🙏🏻 I'd also like to contribute by solving the problem but unfortunately I can't find a free time 😔
Thank you for your efforts, really appreciated ✨

Thank you Marco 🙏🏻 I'd also like to contribute by solving the problem but unfortunately I can't find a free time 😔
Thank you for your efforts, really appreciated ✨

@seahindeniz Can you give me the full configuration? Because I tried to run with base: https://${host}/``, and it works (v2.1.0)

Sorry for the delay, again :(

import path from 'path';
import { NodeGlobalsPolyfillPlugin } from '@esbuild-plugins/node-globals-polyfill';
import { NodeModulesPolyfillPlugin } from '@esbuild-plugins/node-modules-polyfill';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';
import rollupNodePolyFill from 'rollup-plugin-node-polyfills';
import { visualizer } from 'rollup-plugin-visualizer';
import { defineConfig, type PluginOption } from 'vite';
import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js';
import svgLoader from 'vite-svg-loader';

const host = 'my.domain.com';

// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
    const isDevelopment = mode === 'development';
    const isWatch = process.argv.includes('--watch');

    return {
        base: `https://${host}/`,
        plugins: [
            vue(),
            vueJsx(),
            svgLoader(),
            cssInjectedByJsPlugin(),
            isDevelopment && !isWatch && visualizer() as PluginOption,
        ],
        resolve: {
            alias: {
                '@': path.resolve(__dirname, './src'),
                react: 'react-simple-compat', // Required to access moveable's internal utility functions
                vue: 'vue/dist/vue.esm-bundler.js',
                // Codemirror + JSHint polyfills
                util: 'rollup-plugin-node-polyfills/polyfills/util',
                events: 'rollup-plugin-node-polyfills/polyfills/events',
                assert: 'rollup-plugin-node-polyfills/polyfills/assert',
                buffer: 'rollup-plugin-node-polyfills/polyfills/buffer-es6',
                process: 'rollup-plugin-node-polyfills/polyfills/process-es6',
            },
        },
        css: {
            preprocessorOptions: {
                scss: {
                    additionalData: `
                        @import<EMAIL_ADDRESS>                        @import<EMAIL_ADDRESS>                    `,
                },
            },
        },
        build: {
            minify: !isDevelopment,
            rollupOptions: {
                output: {
                    sourcemap: isDevelopment,
                    entryFileNames: (info): string => (info.name === 'index' ? 'skeleton.js' : '[name].js') || '',
                },
                plugins: [
                    rollupNodePolyFill() as never,
                ],
            },
        },
        optimizeDeps: {
            esbuildOptions: {
                define: {
                    global: 'globalThis',
                },
                plugins: [
                    NodeGlobalsPolyfillPlugin({
                        process: true,
                        buffer: true,
                    }),
                    NodeModulesPolyfillPlugin(),
                ],
            },
        },
    };
});

@seahindeniz If you want help you can publish a similar project that gives the problem you mention on a sandbox where we can do some tests. Until then I will keep the issue closed.


Hide Download option on controls?

Is it possible to hide the download icon for the iframe video for self-hosted video? i tried css but the video seems to override my instance.

I'm not sure what you mean. Could you setup a reproducible test case?

Closing for now due to lack of feedback, feel free to reopen if needed.


Update Readme

Add current NEO pic
Add @volekerb and @roman-khimov in Contacts
Add links to docs

We need someone to add gopher to the NEO logo for this project. But that's a separate issue...


[go_router] Replace redirect with onEnter and onExit

In order to better support redirection, we should replace the redirection API with onEnter and onExit.
The onEnter function is called when the new location results in a RouteMatch that was not previously present on RouteMatchList:
matchList = [ "/a"]
matchList' = [ "/a", "b"]

When matchList changes to matchList', the onEnter callback for Route "b" will be called, and the callback for "/a" will not.
The onExit callback is invoked when the reverse is true:
matchList = [ "/a", "b"]
matchList' = [ "/a"]

When matchList changes to matchList', the onExit callback for Route "b" will be called.

Would it be possible to cancel / delay the route change through these callbacks? I feel like this could be a good mechanism to prevent route changes in case, for instance, a user has unsaved changes on the page you might want to warn them about.

@chunhtai  @johnpryan Hi guys, as we know, android app usually have a common requirement: when user on the root router, and then click the physical backward, will have a tips "click again to exist the app". previous navigator 1.0, i can use WillPopScope to listen & control the true/false to implement it, but i don't know how to implement it on the go router, any advice?

Yes, onExit would support this scenario, similar to how you would use WillPopScope. (WillPopScope doesn't work with page-backed routes, which built by the Router / go_router)

Is there any alternative to WillPopScope or a work-around? I'd love to warn my users that changes will be lost if he uses the Back-Button. Also I'd love to keep using go_router.

We will probably stick with redirect to avoid more breaking changes.
@chunhtai also pointed out that this will require a framework change to make [PopPageCallback](https://api.flutter.dev/flutter/widgets/PopPageCallback.html) asynchronous.

+1 for onEnter / onExit methods in GoRoute.
It will allow us to use something like GetIt.I.registerSingleton<A>(ConcreteA()) in onEnter(), and GetIt.I.unregister<A>() in onExit(), as proposed here: https://github.com/flutter/flutter/issues/99113#issuecomment-1050599757

We will probably stick with redirect to avoid more breaking changes.
@chunhtai also pointed out that this will require a framework change to make PopPageCallback asynchronous.

why not introduce this as a new feature and leave redirect as a (maybe deprecated) fallback method ?

+1 for onEnter / onExit methods in GoRoute. It will allow us to register dependencies right inside GoRoutes (and generally run any custom code)
GoRoute(
        path: '/books',
        builder: (ctx, state) => BooksScreen(),
        onEnter: () => GetIt.I.registerSingleton<IBookController>(BookController());
        onExit: () => GetIt.I.unregister<IBookController>(disposingFunction: (controller) => controller.dispose());
),

as proposed here: #99113 (comment)
It's clean - you can open the routes.dart file and easily figure out, which screen uses which dependencies. And it gives you scopes - the registered controller could be read from all the child routes.

Currently don't we have any solution like this to register and unregister the dependencies?

Hi. When the user click on back button on the browser. I want one method for show dialog to the user before  or cancel backClick like WillPopScope.   any updates?

Yes, onExit would support this scenario, similar to how you would use WillPopScope. (WillPopScope doesn't work with page-backed routes, which built by the Router / go_router)

Is there any alternative to WillPopScope or a work-around? I'd love to warn my users that changes will be lost if he uses the Back-Button. Also I'd love to keep using go_router.

any updates?

Any updates on this? I want to have a similar behavior to WillPopScope but cannot find any way.

The on enter and exit parameter aren't present again
How do we find a work around similar to onwillpop

I have been waiting for 1 year and sadly is not available yet 😿

@johnpryan @chunhtai @kevmoo this is also pretty import for us and we're happy to help.
Would it be ok if:

We do a first PR to make PopPageCallback asynchronous
Make a second PR to mark redirect as deprecated and add onEnter / onExit

@VaporGraphic I currently use this workaround
import 'package:flutter/widgets.dart';

class GoRouteWrapper extends StatefulWidget {
  const GoRouteWrapper({
    required this.child,
    this.onInit,
    this.onChangeDependencies,
    this.onAfterLayout,
    this.onDispose,
    super.key,
  });

  final Widget child;
  final void Function()? onInit;
  final void Function(BuildContext context)? onChangeDependencies;
  final void Function(BuildContext context)? onAfterLayout;
  final void Function(BuildContext context)? onDispose;

  @override
  State<GoRouteWrapper> createState() => _GoRouteWrapperState();
}

class _GoRouteWrapperState extends State<GoRouteWrapper> {
  @override
  void initState() {
    super.initState();
    widget.onInit?.call();
    if (widget.onAfterLayout == null) return;
    WidgetsBinding.instance.addPostFrameCallback((_) {
      widget.onAfterLayout?.call(context);
    });
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    widget.onChangeDependencies?.call(context);
  }

  @override
  void dispose() {
    widget.onDispose?.call(context);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) => widget.child;
}

Just wrap your GoRoute in this class:

https://github.com/flutter/flutter/issues/99113

@VaporGraphic I currently use this workaround [...]

The issue with this is that it won't support preventing the user from navigating away if they have unsaved changes (See: https://github.com/flutter/flutter/issues/102408#issuecomment-1255340470).
@chunhtai @johnpryan again, happy to help if you can confirm this is the right approach.

yes the approach looks right to me.
I will also repost the conversation from discord here.
the only time you would know a goRoute is poped is when onPopPage is called with the route generated by the GoRoute
and it is when the time go_route would call onExit to get the decision
so unless we don't support async onExit, the onpoppage will also need to be asynchronous

Since making PopPageCallback a breaking change, I'm afraid it's going to take quite some time before that gets merged into the Flutter repo...
Couldn't we add the logic in the pop method of the delegate?
We could do something like:
// 1st step, we add the onEnter/onExit to the RouteBase:
@immutable
abstract class RouteBase {
  const RouteBase._({
    this.routes = const <RouteBase>[],
    this.onEnter,
    this.onExit,
  });

  /// The list of child routes associated with this route.
  final List<RouteBase> routes;

  // Return false if we should not Enter/Exit
  final Future<bool> Function(BuildContext context)? onEnter;
  final Future<bool> Function(BuildContext context)? onExit;
}

// Then in the GoRouterDelegate
/// Pops the top-most route.
Future<void> pop<T extends Object?>([T? result]) async {
  final _NavigatorStateIterator iterator = _createNavigatorStateIterator();
  while (iterator.moveNext()) {
    if (iterator.current.canPop()) {
      // Add these 2 lines:
      final bool? shouldPop = await iterator.matchList.last.route.onExit?.call(navigatorKey.currentContext!);
      if (shouldPop == false) return;

      iterator.matchList.last.complete(result);
      iterator.current.pop<T>(result);
      return;
    }
  }
  throw GoError('There is nothing to pop');
}

You wouldn't know if this pop is popping a pageless route(e.g. a dialog) or a goRoute

You wouldn't know if this pop is popping a pageless route(e.g. a dialog) or a goRoute

And that is already known problem for us

You wouldn't know if this pop is popping a pageless route(e.g. a dialog) or a goRoute

I made a small POC this branch: https://github.com/GP4cK/packages/tree/poc-onExit
Here is the the commit: https://github.com/GP4cK/packages/commit/1c2046bed9522d2da016c59ccf82dd4a26f290b8
I used the main go_router example and added a button to test each scenario (page pushed and popped by GoRouter, Navigator etc.) and print in the console if we go through the onExit or the WillPopScope.
Conclusion: this implementation would only work for GoRoutes and not pageless routes but it's still an improvement.
Did you have another use case in mind?

@GP4cK
I think onExit would call even if you are popping a dialog when you press android back button. To fix this issue, you eventually need to make PopPageCallback async and move the logic to onPopPage

@chunhtai @johnpryan Hi guys, as we know, android app usually have a common requirement: when user on the root router, and then click the physical backward, will have a tips "click again to exist the app". previous navigator 1.0, i can use WillPopScope to listen & control the true/false to implement it, but i don't know how to implement it on the go router, any advice?

Hi there, Did you find out a way to do the same using go router?

@chunhtai how about an event propagation system?
so we would have preEnter, postEnter, preExit, postExit. on every GoRouter/ShellRoute
the responsibility of pre* events, is to determine if the navigation should continue or not, and if it continues, should it go the same location or be redirected.
it would have a similar API:
class GoRouterPreEnterNavigationDecision {
  /// Redirects to a different target.
  GoRouterPreEnterNavigationDecision.redirect(String target, {Object? extra});
}

class GoRouterPreExitNavigationDecision {
  /// Redirects to a different target.
  GoRouterPreExitNavigationDecision.redirect(String target, {Object? extra});

  /// Stops the navigation.
  GoRouterPreExitNavigationDecision.deny();
}

/// This function should be awaited, since it blocks the navigation until it returns a decision.
/// Returning null here means accepting the navigation.
typedef GoRouterPreEnterNavigationFunction
    = FutureOr<GoRouterPreEnterNavigationDecision?> Function(
        BuildContext context, GoRouterState state);

/// This function should be awaited, since it blocks the navigation until it returns a decision.
/// Returning null here means accepting the navigation.
typedef GoRouterPreExitNavigationFunction
    = FutureOr<GoRouterPreExitNavigationDecision?> Function(
        BuildContext context, GoRouterState state);

/// Since this function only reacts to events after the route has been navigated to, it doesn't need to be awaited.
typedef GoRouterPostNavigationFunction = void Function(
    BuildContext context, GoRouterState state);

// then in RouteBase, add these:
GoRouterPreEnterNavigationFunction? preEnter;
GoRouterPreExitNavigationFunction? preExit;
GoRouterPostNavigationFunction? postEnter;
GoRouterPostNavigationFunction? postExit;

How it works:
Assume the user wants to navigate to
ShellRoute(A)/GoRoute(B/C)/GoRoute(D)
initially (by typing it in the browser URL for example):
the events should be called in the following order:

[preEnter] ShellRoute(A)
[preEnter] GoRoute(B/C)
[preEnter] GoRoute(D)

if all of them return null, accept the navigation and move to the [postEnter] events
if one of them requests a redirect, re-run the events on the new location.

[postEnter] ShellRoute(A)
[postEnter] GoRoute(B/C)
[postEnter] GoRoute(D)

Assume the user wants to navigate from
ShellRoute(A)/GoRoute(B/C)/GoRoute(D)
to
ShellRoute(X)/GoRoute(Y)/GoRoute(Z)
the events should be called in the following order:

[preExit] ShellRoute(A)
[preExit] GoRoute(B/C)
[preExit] GoRoute(D)

if all of them return null, accept the navigation and move to the [preEnter] events
if one of them requests a redirect, re-run the events on the new location.
if one of them requests a deny, cancel the navigation altogether.

[preEnter] ShellRoute(X)
[preEnter] GoRoute(Y)
[preEnter] GoRoute(Z)

if all of them return null, accept the navigation and move to the [postEnter]+[postExit] events
if one of them requests a redirect, re-run the events on the new location.

[postExit] ShellRoute(A)
[postExit] GoRoute(B/C)
[postExit] GoRoute(D)
[postEnter] ShellRoute(X)
[postEnter] GoRoute(Y)
[postEnter] GoRoute(Z)

The pre/post seems like a solid design. pre for redirection and post for init/dispose additional state. Although we could achieve the postEnter and postExit with regular statefulwidget like @KimAloy suggested, we may not need the post APIs.

Assume the user wants to navigate from
ShellRoute(A)/GoRoute(B/C)/GoRoute(D)
to
ShellRoute(X)/GoRoute(Y)/GoRoute(Z)
the events should be called in the following order:

[preExit] ShellRoute(A)
[preExit] GoRoute(B/C)
[preExit] GoRoute(D)
if all of them return null, accept the navigation and move to the [preEnter] events
if one of them requests a redirect, re-run the events on the new location.
if one of them requests a deny, cancel the navigation altogether.
[preEnter] ShellRoute(X)
[preEnter] GoRoute(Y)
[preEnter] GoRoute(Z)

This will run into issue though, imagine the
[preEnter] ShellRoute(X) redirect to ShellRoute(A)/GoRoute(B/C)/GoRoute(D) and now all the preExits are called even though you are not really leaving the page.

@chunhtai preExit is like OnWillPopScope, it simply asks if it's ok to leave the current route

Any ETA on this? Major blocker at the moment for our project.

Great work - thank you very much. Can you provide an example how to use onExit?

Is onExit not called on top-level-route? It seems onExit is not triggered when using it on HomeScreen (refering to example https://github.com/flutter/packages/blob/main/packages/go_router/example/lib/on_exit.dart).
E.g. using the android back-Button on HomeScreen (with onExit implemented on HomeScreen) closes the app without triggering onExit.
Is this behaviour intended?

onExit don't work on web, it make flutter web app freeze

@philitell ah that is a bug, can you file a new issue and pin me on it?
@mminhlequang Please also file a bug with repro so that i can take a look

onExit works perfectly on Android but on iOS I have a problem: if I use the 'swipe to pop' gesture then onExit is called but if the callback returns false then the app 'freezes': the swipe animation is not rolled back and the app stays in an in between state. Both the previous page and the current one are partly visible.
Has anyone experienced the same? Should this even work?

@gyenesandras that sounds like an issue, can you file a separate github issue with repro so that i can look into it?

@gyenesandras that sounds like an issue, can you file a separate github issue with repro so that i can look into it?

Sure, I'll do it tomorrow.

@chunhtai I created a new issue for the swipe to pop problem:
https://github.com/flutter/flutter/issues/135909

@QQOld that seems like a bug, I am currently resolving some conflict between onEnter and various pop mechanism in flutter. I will get to this once they are resolved

How to use onExit if we use TypedGoRoute ? In my case GoRoutes are generated. So where do I put onExit callback ? Should I use redirect ?
@TypedShellRoute<MainScaffoldRoute>(
  routes: [
    TypedGoRoute<HomeRoute>(path: '/homescreen'),
...
])

...

@immutable
class HomeRoute extends GoRouteData {

  @override
  FutureOr<String?> redirect(BuildContext context, GoRouterState state) {
    // Can I check here if system back button is pressed
    return super.redirect(context, state);
  }

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const HomeScreen(key: ValueKey('homescreen'));
  }
}

It's not possible yet, see https://github.com/flutter/flutter/issues/137394

Was there a reason why GoRoute has onExit but StatefulShellRoute/ShellRoute does not?

Was there a reason why GoRoute has onExit but StatefulShellRoute/ShellRoute does not?

I'd assume that you cannot exit a ShellRoute because you don't navigate a ShellRoute directly.
Navigating a ShellRoute is simply switching an Index (at least if you use the original flutter implementation) in it's internal IndexedStack implementation.
And since you know when switching is happening - that should be only via the user tapping a bottom navigation bar - you can execute your code.
Normal mobile navigation should never ever switch the Shell's current index.

@ManuelRauber i see, that makes sense.
What about the case where the user presses the system back button to exit the app? I think onExit would make sense for that, right?

@ManuelRauber i see, that makes sense.
What about the case where the user presses the system back button to exit the app? I think onExit would make sense for that, right?

I don't think so.
Exiting the app is a different use case.
Exiting the app could also be the operating system deciding to shutdown the app in order to save memory/resources when the app is running in the background (e.g. on mobile systems).
If you need to handle app exit, you do that by using the appropriate lifecycle events and not a router state.

onEnter method is still not available yet，is it under develop?

@ZanderZhan this issue proposes renaming redirect to onEnter, so you can use redirect for now.

In my opinion, it would be a good idea to add middleware support at this point.
Instead of a redirect callback, a list of GoRouterMiddleware that contains nullable OnEnter and OnExit callbacks. This would allow more flexibility on actions to do before and after a view has been visited.
For example, a LocaleMiddleware with onEnter that looks for a query parameter "locale", to change the current locale of the app before the page loads. This would allow us to set the language based on the url provided.

Any update about this part, just try the 13.2.0 version, the onExit sample with iOS swipe back have issue...

I am using TypedGoRoute and I can't find any thing like onExit function. in goRoute:https://github.com/flutter/flutter/issues/102408#issuecomment-1361256775
@chunhtai could you please help me. thank you.

I am using TypedGoRoute and I can't find any thing like onExit function. in goRoute we have something that explained in this comment:#102408 (comment) how we can achieve some thing similar with TypedGoRoute.
@chunhtai could you please help me. thank you.

There is an issue for adding it: https://github.com/flutter/flutter/issues/137394

What's the context of the onExit callback? The use case i have is based on a Bloc state I have to decide if the route can be popped or not, but the Bloc can only be instantiated inside that route. When I try to use the context provided in the onExit callback to access the Bloc, it is not there, so I am assuming the context is the "root" context of the GoRouter instance?

What's the context of the onExit callback? The use case i have is based on a Bloc state I have to decide if the route can be popped or not, but the Bloc can only be instantiated inside that route. When I try to use the context provided in the onExit callback to access the Bloc, it is not there, so I am assuming the context is the "root" context of the GoRouter instance?

You should use a PopScope in the view instead.

@frederikstonge I tried, but PopScope is not working with go router pop method. It only works if I use the Navigator.of(context).maybePop method, but from everything I read using PopScope with go_router is not recommended at all.

@limonadev see https://github.com/flutter/flutter/issues/140869 -- go_router 13 doesn't work right with popScope yet. If you're able to revert to v12, it should work.

@frederikstonge Yes, that would work for the existing buttons that are able to pop but, if someone else adds a new button to pop in the future, they may forget or don't know they should check the state to pop or not. That wouldn't happen if the PopScope controls everything, no matter what we do, the check will already be there and we won't have to add it or even remember it every time.
I'm asking on this issue not only to find a workaround (your ideas worked excellent so thanks for that!), but also to see if there is a more simple and direct solution within the package

@frederikstonge Yes, that would work for the existing buttons that are able to pop but, if someone else adds a new button to pop in the future, they may forget or don't know they should check the state to pop or not. That wouldn't happen if the PopScope controls everything, no matter what we do, the check will already be there and we won't have to add it or even remember it every time.
I'm asking on this issue not only to find a workaround (your ideas worked excellent so thanks for that!), but also to see if there is a more simple and direct solution within the package

Since go_router is a layer on top of Navigator 2.0, i'm wondering what GoRouter.of(context).pop() does that the navigator one doesn't. Can we use Navigator.of(context).maybePop() safely?

Is it normal that navigating to a different tab (StatefulShellBranch) triggers the onExit event?
I only want onExit to be triggered when a user goes back (either by using the android back button / ios swipe gesture), which already works.. but I don't want this event to be triggered when changing tabs, since im not removing the page.

@charbelh3 were you able to find a solution? I am facing the same issue.

A related question for using onExit function - is there a way to get the page/widget that the route built? I'm using type safe routes and seems when the exit function is called it is called on a whole new instance of the route data class, so nothing I saved during the build method is persisted.

how to achieve this behavior
buttomNav with -> (Home - Favorite - Profile)
when clicking the back button on Android where the current index else [Home] for example [Favorite - Profile]
I want to get back to the Home Index.
and
if the current index is home I want to exit
this was very easy to achieve with PopScope

how to achieve this behavior buttomNav with -> (Home - Favorite - Profile)
when clicking the back button on Android where the current index else [Home] for example [Favorite - Profile] I want to get back to the Home Index. and if the current index is home I want to exit
this was very easy to achieve with PopScope

any fix?

There's an ongoing proposal open for comments

design doc here http://flutter.dev/go/go-router-redirect/

how to achieve this behavior buttomNav with -> (Home - Favorite - Profile)
when clicking the back button on Android where the current index else [Home] for example [Favorite - Profile] I want to get back to the Home Index. and if the current index is home I want to exit
this was very easy to achieve with PopScope

Have you tried wrapping the screen in a BackButtonListener? Something like
@override
Widget build(BuildContext context) {
  return BackButtonListener(
    onBackButtonPressed: () async {
      if (currentIndex != 0) {
        setState(() {
          currentIndex = 0;
        });
        return true;
      }
      return false;
    },
    child: Scaffold(
      ...
    ),
  );
}

how to achieve this behavior buttomNav with -> (Home - Favorite - Profile)
when clicking the back button on Android where the current index else [Home] for example [Favorite - Profile] I want to get back to the Home Index. and if the current index is home I want to exit
this was very easy to achieve with PopScope

Have you tried wrapping the screen in a BackButtonListener? Something like
@override
Widget build(BuildContext context) {
  return BackButtonListener(
    onBackButtonPressed: () async {
      if (currentIndex != 0) {
        setState(() {
          currentIndex = 0;
        });
        return true;
      }
      return false;
    },
    child: Scaffold(
      ...
    ),
  );
}

yah this work, thank you
I have wrapped all buttomNav  (x - Favorite - Profile) screens  with this code
BackButtonListener(
onBackButtonPressed: () async {
HomePage.go(context: context); // static fun using context.go([PAGE_PATH])
return true;
},
child: [page]
...

how to achieve this behavior buttomNav with -> (Home - Favorite - Profile)
when clicking the back button on Android where the current index else [Home] for example [Favorite - Profile] I want to get back to the Home Index. and if the current index is home I want to exit
this was very easy to achieve with PopScope

Have you tried wrapping the screen in a BackButtonListener? Something like
@override
Widget build(BuildContext context) {
  return BackButtonListener(
    onBackButtonPressed: () async {
      if (currentIndex != 0) {
        setState(() {
          currentIndex = 0;
        });
        return true;
      }
      return false;
    },
    child: Scaffold(
      ...
    ),
  );
}

this handles all the nested routes
when back button pressed it's not work as expected.

return BackButtonListener(       onBackButtonPressed: () async {         final canPop = GoRouter.of(context).canPop();         if(!canPop) {           context.go(ScreenPaths.home);         }         return !canPop;       },       child:
This works somewhat. When it's not a baseroute canPop returns false. Then you can renavigate instead of allowing the back button action

return BackButtonListener(
      onBackButtonPressed: () async {
        final canPop = GoRouter.of(context).canPop();
        if(!canPop) {
          context.go(ScreenPaths.home);
        }
        return !canPop;
      },
      child:

This works somewhat. When it's not a baseroute canPop returns false. Then you can renavigate instead of allowing the back button action

This can be the alternative solution to current problem. My problem is that I have a base screen that use page view to navigate between the bottom navigation menu bar views. But I want to control the back button that if it's in the 0th index and user click back button, the screen can be popped. If they're in the other index, it returns them to the 0th index(Home page). Thank you @julianniedermaier .
onBackButtonPressed: () async {
              final canPop = GoRouter.of(context).canPop();

              if (canPop) {
                context.pop();
                return true;
              }

              final state = context.read<BottomNavigationBarProvider>();
              if (state.currentIndex != 0) {
                state.changeIndex(
                  0,
                );
              }
              return !canPop;
            },

how to achieve this behavior buttomNav with -> (Home - Favorite - Profile)
when clicking the back button on Android where the current index else [Home] for example [Favorite - Profile] I want to get back to the Home Index. and if the current index is home I want to exit
this was very easy to achieve with PopScope

Checkout my answer, it seems like we have a similar problem.

how to achieve this behavior buttomNav with -> (Home - Favorite - Profile)
when clicking the back button on Android where the current index else [Home] for example [Favorite - Profile] I want to get back to the Home Index. and if the current index is home I want to exit
this was very easy to achieve with PopScope

Have you tried wrapping the screen in a BackButtonListener? Something like
@override
Widget build(BuildContext context) {
  return BackButtonListener(
    onBackButtonPressed: () async {
      if (currentIndex != 0) {
        setState(() {
          currentIndex = 0;
        });
        return true;
      }
      return false;
    },
    child: Scaffold(
      ...
    ),
  );
}

this handles all the nested routes when back button pressed it's not work as expected.

yes it works
by adding this this code to check if it's not in the base route just skip
// if its not in the base route skip
if (GoRouter.of(context).canPop()) {
          context.pop();
          return true;
        }

// it's the base route do something

// at the end  return true;

Using onExit to prompt the user regarding unsaved changes seems to suffer from these obvious problems:

No easy way to tell if the user even entered anything that needs to be saved. I am using a Form with a GlobalKey, but FormState does not expose the _hasInteractedByUser field it manages.
If I prompt irrespective of whether the user made changes, I now get a prompt even when they save changes because the save logic still pops the stack. The GoRouterState object I receive in onExit does not include the value I provide when popping, so I can't check that to avoid prompting.

To solve this, I guess I could create my own state and key, but seems like a lot of messing about for something so simple...

OK, I didn't need the inherited widget. I needed a GlobalKey<MyPageState> that is assigned when building my GoRoute, which I can then use in the onExit logic:
GoRoute(
    path: 'my_page_path',
    builder: (context, state) => MyPage(key: _myPageKey),
    onExit: (context, state) async {
        final pageState = _myPageKey.currentState;

        if (pageState?.hasUserMadeChanges ?? false) {
            // confirm with a dialog prompt
        } else {
            return true;
        }
    }),

onBackButtonPressed: () async {
final canPop = GoRouter.of(context).canPop();
if(!canPop) {
context.go(ScreenPaths.home);
}
return !canPop;
},

where did you put this code? is it on the StatefulShellRouteData or on each GoRouteData branches?

it goes in your widget's build function
On Sun, Oct 6, 2024, 11:54 AM RakaAlrian @.***> wrote:

onBackButtonPressed: () async {
final canPop = GoRouter.of(context).canPop();
if(!canPop) {
context.go(ScreenPaths.home);
}
return !canPop;
},
where did you put this code? is it on the StatefulShellRouteData or on
each GoRouteData branches?
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/102408#issuecomment-2395373130,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/A4U3MOAV6TEYHYFCD2ATPVLZ2ECDTAVCNFSM5UDN7HJ2U5DIOJSWCZC7NNSXTN2JONZXKZKDN5WW2ZLOOQ5TEMZZGUZTOMZRGMYA
.
You are receiving this because you were mentioned.Message ID:
@.***>

Is there any work on onEnter option? As someone coming from javascript libraries I find this gorouter redirect solution really annoying and lacking. Together with absolute path guarding it is well below of javascript options.
Basically I want some business logic just to happen on some routes and it is really hell of a thing to do here.


The section referenced no longer exists

This is from the documentation:

This is from the app:

Could you please update the documentation so that it references the sections that still exist?

Hi @rihoughton - is this the article that you are referencing: https://learn.microsoft.com/en-us/power-bi/enterprise/aggregations-auto-configure? I'm assigning to the writer to comment, but want to be sure that you have reviewed the requirements listed here https://learn.microsoft.com/en-us/power-bi/enterprise/aggregations-auto#requirements for the auto aggregation feature. Thank you for taking the time to submit feedback!

Hi @rihoughton - is this the article that you are referencing: https://learn.microsoft.com/en-us/power-bi/enterprise/aggregations-auto-configure? I'm assigning to the writer to comment, but want to be sure that you have reviewed the requirements listed here https://learn.microsoft.com/en-us/power-bi/enterprise/aggregations-auto#requirements for the auto aggregation feature. Thank you for taking the time to submit feedback!

Yes, that's the article I am referencing.

Duplicate of https://github.com/MicrosoftDocs/powerbi-docs/issues/4153


Please ADD VERDICT TOKEN

Why is it taking too long for adding VERDICT since yesterday I had to delete it and read submit for quicker response, but it doesn't seems to get the attention. Am I getting anything wrong here

Please provide more info about the token.

Done

Please attach the token logo image, and refer to the template


fixing send_ping never called (closes #56)

The former implementation always called ReconnectingWebsocket's ``send_ping method if no update message was received from kucoin for 9 seconds. If this is not the case (i.e. regular messages from kucoin) Kucoin disconnects the websocket after 1 minute because no ping was sent.  ReconnectingWebsocket's run loop then receives a connection closed error and reconnects, which means some messages until reconnection might get lost and reconnecting is also inefficient.
I changed the way send_ping is called correspondingly to assure that it is sent every 9 seconds, regardless of the amount of received message.

Coverage decreased (-0.2%) to 27.255% when pulling 1c2704044e792ea8db3fba9d97ad05d25343ea26 on MarcelBeining:master into c27a470b114d12628e18788bde14c0530182c2e5 on sammchardy:master.

Thanks @MarcelBeining


Documentation is missing tryItCredentialsPolicy option

HTTP-cookies are not included by default in the outgoing request when using the try-out functionality. This has been fixed  already but the option is missing from the documentation.
It can be set in the web component using e.g.
<elements-api
  apiDescriptionUrl="{openapi_url}"
  tryItCredentialsPolicy="same-origin"
/>

Environment:

Library version: Spotlight Elements 7.5.13 (Web Component)
OS: [e.g. Windows 7]
Browser: Firefox 91.5
Platform: Web

@pamgoodrich can you put this in our backlog?


[incubator/cassandra] Provide a way to check if Cassandra is ready to use.

FEATURE REQUEST
Which chart:
incubator/cassandra
Detail:
Provide a way to check if Cassandra is ready to use.
I was trying to setup an initContainer with until nodetool -h prod-cassandra status; do sleep 1; done; to postpone an app container that depends on this Cassandra Helm chart.  But then I realized that nodetool -h <hostname> doesn't really work because by default it's not open to external connections.  See https://grokbase.com/t/cassandra/user/164kttt332/nodetool-h-hostname-or-ip-fails-connection-refused .
btw, I guess exposing port 7199 is actually pointless as we can't connect to it anyways.

Actually, I can just check the service hostname :) until nslookup prod-cassandra; do sleep 1; done;


One Report has 438 "updated by" Records in an auditLogger File

Report 73127 has 438 "updated by" records in the 2018-03-13 auditLogger file.
Report 72877 has 1,020 "updated by" records in the same auditLogger file.
Is this by design?

@dspCarlson Perhaps repeated autosaves while someone was typing a (long) report text?

@gjvoosten No doubt!

@gjvoosten These hundreds of updates are coming from the "ReportSensitiveInformation" type log entries as compared to the "Report" type log entries.

@VassilIordanov Should we close this issue?  It's not a bug per se, but all the log entries make it difficult to read the log files.  Plus, the log files are huge as a result.

Closing this issue as it really doesn't affect anything other than creating larger log files.


Look into utilizing inline switch for arche_container

Context: https://github.com/ziglang/zig/issues/7224

Inline switch landed in master: https://github.com/ziglang/zig/commit/ff534d22676b8a934acf1931f91d70c554a4bdca


Question / Minimum requirements

What are the minimum requirements for running the addon?
I'd like to have a remote / standalone stream deck as dashboard for my Home Assistant instance. I'd like attach it to a Raspberry Pi but I am not sure which one to get.
Will a Pi Zero be sufficient?

Personally, I have only tried it with a Raspberry Pi 4 and an Intel Nuc. If someone would try it I will be happy to add something to the README about whether it works or not.

I'm running on a Dell Wyse 3040 (with Ubuntu on it), which are usually found for a bit cheaper than a Pi 4 these days.

got it working on orange pi zero 2 . failed on a pi Zero W

got it working on orange pi zero 2 . failed on a pi Zero W

How is the performance? Any noticable latency?


update disabled watcher logic

Disable watcher logic is backwards. Hides popper when disabled is set to false rather than true.

@Optim do you think it can break something for you?

@skinnp91 Thanks!


DeepLab network selection

Hi and congratulations on your work. It is astonishing how much ground UDA has gained over the years.
Looking over the code, I noticed that you changed some parts of the last layers of DeepLabv2. In particular, you add group normalization, ReLu activations, and dropout in the last layers. What is the inspiration behind those changes? How much did they contribute to the results? Similar methods have shown much improved results using DeepLabv3. Is it fair to compare your improved model with other DeepLabv2 approaches without explaining how much those changes contributed to the result?
Thank you for your time and consideration. I am looking forward to your response.

Just noticed another issue on the same topic here, so I am closing this one.


Document that the hosting service provides ETag and gzip OOTB

 Issue by ipeychev
Friday Jan 06, 2017 at 09:27 GMT
Originally opened as https://github.com/wedeploy/docs/issues/66

The hosting service provides OOTB some goodies for the developers. These include ETag and gzip compression. The fact that ETag is available would save some work of the developer, because he won't have to add versions to his CSS and JS files to force the browser to reload them when a new version is created.

@ipeychev I am very unfamiliar with all this. Is it something that is still relevant and should be documented? If so, is that something you could start? Thanks!

Our hosting service changed since this issue was opened.
https://github.com/wedeploy/hosting
@cirocosta might have more information about this topic now.

@ipeychev @cirocosta I am closing this due to inactivity. If you feel like it should be activated again and want to share more info, then please re-open.

Hey @jonnilundy, @zenorocha and @albertmourato any updates for this? I'm trying use gzip with WeDeploy Hosting and server isn't serving my gzipped code.


Static route fails to serve byterange on Meinheld

Apparently, setting resp.stream to a file-like object without a file descriptor (i.e., without a .fileno() method, such as a pure Python wrapper implementing .read()), fails in Meinheld with a TypeError.
I am of the opinion that Meinheld's behaviour is in direct violation of PEP 3333 on the matter, and filed this as a bug: https://github.com/mopemope/meinheld/issues/130.
However, since Meinheld is one of the fastest ways to run Falcon, we probably need to decide whether we want to patch this on our side, document as a known limitation, or take another action (please suggest).

we probably need to decide whether we want to patch this on our side, document as a known limitation, or take another action (please suggest).

Personally I think we could just document this case. As an alternative we could provide a different implementation but I think it would be better to make it configurable by the user and not activating it automatically when running under a wsgi server


print function was not work without parenthesis in python3

print ("Starting gradient descent at b = {0}, m = {1}, error = {2}".format(initial_b, initial_m, compute_error_for_line_given_points(initial_b, initial_m, points)))

print ("Running...")
print ("After {0} iterations b = {1}, m = {2}, error = {3}".format(num_iterations, b, m, compute_error_for_line_given_points(b, m, points)))

It's a difference between Python 2 and Python 3. In Python 3 print is a function. With Python 2 that code would work fine.


Navigation bar (Activity tab)

Navigation bar doesn't change to Large state, after activity get opened

It works like this in master. How do I reproduce the bug?
https://user-images.githubusercontent.com/56189/105934870-eeea8680-608b-11eb-83c0-1a49c9f236a0.mov

It works like this in master. How do I reproduce the bug?
https://user-images.githubusercontent.com/56189/105934870-eeea8680-608b-11eb-83c0-1a49c9f236a0.mov

yep, i am able to reproduce it on master
https://user-images.githubusercontent.com/55975226/105998178-0b4ee900-60b5-11eb-82c0-27c78b9c407e.MP4

yep, i am able to reproduce it on master
https://user-images.githubusercontent.com/55975226/105998178-0b4ee900-60b5-11eb-82c0-27c78b9c407e.MP4

Oh. You need to tap "Go to Token"

Oh. You need to tap "Go to Token"


Error When starting react-native run-android

Loading dependency graph, done.
Bundling index.js  [development, non-minified]  0.0% (0/1), failed.
error: bundling failed: ambiguous resolution: module D:\Google Drive\DivisionbyZero\smsSorter\index.js tries to require react-native, but there are several files providing this module. You can delete or fix them:

D:\Google Drive\DivisionbyZero\smsSorter\node_modules\react-native-autocomplete-select\node_modules\react-native\package.json
D:\Google Drive\DivisionbyZero\smsSorter\node_modules\react-native\package.json

https://github.com/Vizir/react-native-autocomplete-select/issues/9


Timeout is being unmarshalled from config as nanoseconds.

This is not a helpful value as I had to set my config to<PHONE_NUMBER>0 just to get the timeout up to 60 seconds.

Closing because I wasn't aware of how to use it and it needs better doumentation so I will add it to the list. You can set timeout to 60 seconds by setting timeout to 60s


Update finagle-http to 21.1.0

Updates com.twitter:finagle-http from 20.12.0 to 21.1.0.
Changelog
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

Ignore future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "com.twitter", artifactId = "finagle-http" } ]

labels: library-update, semver-major

Codecov Report

Merging #46 (c436b39) into master (e542e69) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master      #46   +/-   ##
=======================================
  Coverage   98.27%   98.27%
=======================================
  Files           1        1
  Lines          58       58
  Branches        1        1
=======================================
  Hits           57       57
  Misses          1        1

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e542e69...c436b39. Read the comment docs.

Codecov Report

Merging #46 (c436b39) into master (e542e69) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master      #46   +/-   ##
=======================================
  Coverage   98.27%   98.27%
=======================================
  Files           1        1
  Lines          58       58
  Branches        1        1
=======================================
  Hits           57       57
  Misses          1        1

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e542e69...c436b39. Read the comment docs.


Description
There seems to several issues when using wallet-connect on mobile. (web works fine)

Copy/Paste from gooddapp > android app: does not work, does not trigger connect modal
Copy/Paste from gooddapp > mobile-web: does not work, does not trigger connect modal
Scanning qr-code with android app: It vibrates the phone that it 'detects' something, does not trigger connect modal
scanning qr code from mobile-web wallet: It does not detect anything, the camera seems to be blurry and never focus

Steps to reproduce

Go to gooddapp (or other dapp, happens also with uniswap) (both mobile/desktop, does not really matter for this)
Open the wallet on mobile (Either android app / mobile web, dependening on what you test from above)
copy and paste a qr code, or scan qr code
see that it does not show you a connect to dapp modal

Which network did you use?
Celo,Fuse
Supporting data
Android-app version: 2.38.1 (Latest)
Android-version: 13
Phone: Samsung
Browser: Chrome,Brave

@vldkhh could test above and provide logs for the different scenario's

fixed here: https://github.com/GoodDollar/GoodDAPP/commit/41ed7ece84ecf891bfe37e532f092c0e02ea5ad8

@vldkhh Can you retest wallet-connect connecting to any dapp (gooddapp/uniswap)
Also try to interact with it.
For example, do a swap from celo > G$ on gooddapp


Add functions to return raw results for Percentile TDigest and Est

Description
Adding aggregate functions to return serialized / raw values of PercentileEst (QuantileDigest) and PercentileTDigest (TDigest) data structures.
Upgrade Notes
Does this PR prevent a zero down-time upgrade? (Assume upgrade order: Controller, Broker, Server, Minion)

[ ] Yes (Please label as backward-incompat, and complete the section below on Release Notes)

Does this PR fix a zero-downtime upgrade introduced earlier?

[ ] Yes (Please label this as backward-incompat, and complete the section below on Release Notes)

Does this PR otherwise need attention when creating release notes? Things to consider:

New configuration options
Deprecation of configurations
Signature changes to public methods/interfaces
New plugins added or old plugins removed

[ ] Yes (Please label this PR as release-notes and complete the section on Release Notes)

Release Notes

Documentation

Will raise an another PR to update the documentation once this PR is approved and the changes are finalized.

Codecov Report

Merging #7226 (09d54da) into master (5af6078) will decrease coverage by 8.13%.
The diff coverage is 82.81%.

:exclamation: Current head 09d54da differs from pull request most recent head 417946d. Consider uploading reports for the commit 417946d to get more accurate results

@@             Coverage Diff              @@
##             master    #7226      +/-   ##
============================================
- Coverage     73.50%   65.37%   -8.14%
  Complexity       92       92
============================================
  Files          1508     1512       +4
  Lines         73951    74116     +165
  Branches      10685    10709      +24
============================================
- Hits          54356    48451    -5905
- Misses        16027    22245    +6218
+ Partials       3568     3420     -148

Flag
Coverage Δ

integration
?

unittests
65.37% <82.81%> (+0.08%)
:arrow_up:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

...ler/api/resources/PinotSegmentRestletResource.java
3.15% <ø> (-16.12%)
:arrow_down:

...ata/manager/realtime/RealtimeTableDataManager.java
10.61% <0.00%> (-56.47%)
:arrow_down:

...gment/local/aggregator/ValueAggregatorFactory.java
84.61% <ø> (ø)

...l/indexsegment/immutable/ImmutableSegmentImpl.java
61.66% <ø> (-3.91%)
:arrow_down:

...he/pinot/segment/local/utils/TableConfigUtils.java
78.22% <0.00%> (-3.89%)
:arrow_down:

...egment/spi/index/metadata/SegmentMetadataImpl.java
74.11% <0.00%> (-0.59%)
:arrow_down:

...org/apache/pinot/spi/config/table/TableConfig.java
81.69% <0.00%> (-1.17%)
:arrow_down:

...inot/spi/ingestion/batch/IngestionJobLauncher.java
19.04% <0.00%> (-3.81%)
:arrow_down:

...ingestion/batch/spec/SegmentGenerationJobSpec.java
100.00% <ø> (ø)

...va/org/apache/pinot/spi/utils/CommonConstants.java
35.00% <ø> (ø)

... and 393 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 5af6078...417946d. Read the comment docs.

plz test


wsl2 bootstrap error

ERROR [12/30/2020, 1:01:39 PM]: Bootstrap error [FetchError: request to https://api.github.com/repos/rust-analyzer/rust-analyzer/releases/tags/2020-12-28 failed, reason: connect ECONNREFUSED <IP_ADDRESS>:11091
	at ClientRequest.<anonymous> (/home/peter/.vscode-server/extensions/matklad.rust-analyzer-0.2.432/out/src/main.js:20589:11)
	at ClientRequest.emit (events.js:228:7)
	at onerror (/home/peter/.vscode-server/bin/ea3859d4ba2f3e577a159bc91e3074c5d85c0523/node_modules/https-proxy-agent/node_modules/agent-base/index.js:101:9)
	at callbackError (/home/peter/.vscode-server/bin/ea3859d4ba2f3e577a159bc91e3074c5d85c0523/node_modules/https-proxy-agent/node_modules/agent-base/index.js:123:5)
	at processTicksAndRejections (internal/process/task_queues.js:94:5)] {
  message: 'request to https://api.github.com/repos/rust-analyzer/rust-analyzer/releases/tags/2020-12-28 failed, reason: connect ECONNREFUSED <IP_ADDRESS>:11091',
  type: 'system',
  errno: 'ECONNREFUSED',
  code: 'ECONNREFUSED'
}

It seems that wsl2 has some issue of network. When I open vscode, rust-analyzer is trying to fetch something and failed.

connect ECONNREFUSED <IP_ADDRESS>:11091

Are you using a proxy?

connect ECONNREFUSED <IP_ADDRESS>:11091

Are you using a proxy?

@bjorn3 yes, I'm using shadowsocks. I tested several times, 11091 is occupied by shadowsocks may causes this issue. Thanks a lot.

It was probably stopped at that point, which would explain the error.


[AdaptiveCards] [Speak attribute details are not clear in documentation]

We see following note in documentation for speak attribute: https://adaptivecards.io/explorer/
Specifies what should be spoken for this entire card. This is simple text or SSML fragment.
If we utilize the same feature in MS Teams bots, it proves beneficial for the immersive reader to read the Speak property value. However, its usefulness remains limited to this specific context and may require explicit mention in the documentation.

URL: https://adaptivecards.io/explorer/

This issue has been copied over to Microsoft Teams repo here: https://github.com/MicrosoftDocs/msteams-docs/issues/8957


Use s: instead of <SID> in commands

This addresses: https://github.com/christoomey/vim-tmux-navigator/issues/110
The use of <SID> is unnecessary in this context anyway.

Hey @bullno1, thanks for the update. Can you explain a bit more about the distinction between <sid> and s:? I've always viewed them as largely interchangeable, but your PR leads me to believe this is not the case.

http://stackoverflow.com/questions/16768059/how-to-understand-these-vim-scripts
Basically, s: makes sense in a script context. It's used to address the local (sort of anonymous) namespace. <SID> is used in mapping, a global context. It gets substituted with whatever vim generated as the prefix for the script namespace. They used to be interchangeable but apparently recent vim patches decided to be pedantic about it.

:+1: in general.
But what about making TmuxWinCmd available as a public function?
So it can be accessed from outside.
Could also be moved to "autoload" while at it.. in a file autoload/tmux_naviagor.vim and would then be accessible as tmux_navigator#tmuxwincmd (bad name probably).

Thanks!
#131 came up as a duplicate, so it certainly helps as-is for now.


[FEATURE] Add test for #36

Is your feature request related to a problem?
We added the ability to read from the data directory in #36
What solution would you like?
We need to add a related test to ensure that we have test coverage for it. The tests should ensure that if the directory is empty the appropriate directory is returned.

Can I please take this issue.

@LucasWang750  here is how I would probably recommend going about testing this.

Change the original function to take in a path with the default value set to the environment variable we created.
Then you can test that the function returns data in the correct format (eg, isinstance(returned data, dict))
Then we can create assertions when we pass in an empty directory (/dev/null on linux/unix systems should work) that the appropriate error is raised

Closed with #47


Altair uses deprecated websocket subprotocol which is not compatible with graphql-ws

Describe the bug
I'm using Apollo GraphQL and am in the process of upgrading from subscriptions-transport-ws to graphql-ws by following the instructions here:  https://www.apollographql.com/docs/apollo-server/data/subscriptions/#switching-from-subscriptions-transport-ws
I'm using altair-express-middleware version 4.4.2.
It looks however as if Altair is not compatible with graphql-ws.
Altair advertises the websocket subprotocol as 'graphql-ws' whereas the graphql-ws package actually expects 'graphql-transport-ws'.
Websocket connections from Altair are rejected here:
https://github.com/enisdenjo/graphql-ws/blob/92dfae3679fb52146259a503c98c1c881b535ed2/src/server.ts#L566
Because socket.protocol is an empty string and not 'graphql-transport-ws' and that's because of this function here:
https://github.com/enisdenjo/graphql-ws/blob/92dfae3679fb52146259a503c98c1c881b535ed2/src/server.ts#L860
I also tried older graphql-ws versions, but then the connection gets rejected here:
https://github.com/enisdenjo/graphql-ws/blob/92dfae3679fb52146259a503c98c1c881b535ed2/src/use/ws.ts#L163
with the following message:
WebSocket protocol error occured. It was most likely caused due to an unsupported subprotocol "graphql-ws" requested by the client. graphql-ws implements exclusively the "graphql-transport-ws" subprotocol, please make sure that the client implements it too.
To Reproduce
Use the Altair playground, start a subscription. As soon as a websocket connection is established it's closed again.
I noticed this myself because the context callback of useServer from graphql-ws/lib/use/ws was never being called.
Expected behavior
Websocket connections should stay active and subscriptions should work.
Desktop (please complete the following information):

OS: [e.g. iOS] Ubuntu Linux
Browser [e.g. chrome, safari] Chrome
Platform: [e.g. Chrome extension, mozilla addon, desktop app, npm package, snap] Express
Version [e.g. 22] 4.4.2

Turns out I had to configure SUBSCRIPTION TYPE to be Websocket (graphql-ws)  in the Subcription URL settings.
Thanks for the great software.

Hey, sorry for getting to this late! Yes that is what you needed to do. Is there something that would have made it easier to discover?

Hmmm.. that mentions both websocket implementations though.
Here's the file that renders that doc page. You can create a PR updating the file with what you think would help there, and I'll review the PR.
How does that sound?


InterledgerAddress#getPrefix Fails on a root prefix

We need to tweak InterledgerAddress#getPrefix to work properly on something like g. or any other root prefix. In this case, the method should probably return Optional#empty.

Closing in favor of #46


simple timezone converter

Description
A short summary of what is included in your Pull Request.
Fixes #(issue_no)

[ ] Issue_no: <insert your issue no here>
[x] Not applicable

Type of change
Choosing one or more options from the following as per the nature of your Pull request.

[x ] New project insert
[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Documentation Update

Project

Your Project Name: a timezone converter

Short Description: converts timezones but currently works on only a few of them Provide a short desctiption of your Python project

Checklist:
Please tick all the boxes that are fulfilled by your Pull Request.

[ ] I have named my files and folder, according to this project's guidelines.
[ ] My code follows the style guidelines of this project.
[ ] I have commented on my code, particularly in hard-to-understand areas.
[ ] I have created a helpful and easy to understand README.md, according to the given README_TEMPLATE.
[x ] My changes do not produce any warnings.

you do not have your own project folder and README.md to describe your project. Please review the project contribution guideline here - https://github.com/ndleah/python-mini-project/blob/main/README.md


Clean up the README file

Adds documentation regarding how to customize the output, as well as phix
the phormatting.

Thank you!


Feature: Support large scenes and large file sizes

There is a 2GB size limitation for JavaScript strings. Will there be any support for handling large files in JavaScript, such as file partitioning or other techniques?
Thanks!

Supporting larger scenes and larger data files is definitely something that is on the roadmap. I'm still thinking about how exactly I want to do it, but in some form it will mean breaking up large scenes into multiple files.

Hi Mark, thanks for your great work!
Is there any exact time the large scene feature be released?

Unfortunately I don't have a specific timeline for this feature because I'm not sure how much work will be involved and I'm not even sure what the best approach is for implementing it :) Do you have some example scenes that you are hoping to be able to view?

https://docs.gsplat.studio/main/examples/large_scale.html
Here is an example where they render large scale scenes. Perhaps this is something you could get an inspiration from? :) Newly released with Gsplat 1.0 which is supported by Nerfstudio.
@mkkellogg

That update is impressive, but the entire splat dataset still has to be in memory in order to be rendered, which is a significant limiting factor. The trick they employ is to simply ignore gaussians that when projected are too small, which definitely speeds up rendering, and might be worth considering for this library as a general performance enhancement. But web browsers already struggle to sort & render scenes that are in the 6 million splat range, and going beyond that causes out of memory crashes fairly frequently.
What is needed to support very large scenes in the browser is a streaming, LOD-based approach. I'm particularly excited about this project: https://repo-sam.inria.fr/fungraph/hierarchical-3d-gaussians, and am looking forward to when the code is made available.

@mkkellogg

The trick they employ is to simply ignore gaussians that when projected are too small, which definitely speeds up rendering, and might be worth considering for this library as a general performance enhancement.

Is this implemented in 0.4.3? If not, can you give me pointers on how I can do this?
Also the code for hierarchical 3d gaussians is made available recently :)


Option to configure distanceFilter

Great work! Good to see we can set desiredAccuracy. Please can we have an option to set DistanceFilter to "throttle" updates.
Thanks.
Nicolas

Hi @nicolasjon, thanks for your feedback. I am however not 100% sure what it is you are asking here, would you mind explaining the use case a bit more detailed?
To me it looks like you need some kind of geofencing functionality where events are only pushed on the stream returned from the getPositionStream when the devices enters or leaves a certain area. Is this correct or do you mean something different?

Hi,
In one of my native iOS apps I use locationManager.distanceFilter set to
100. The location is then only updated when it has changed by 100m.
Otherwise it is updated continuously  which can be expensive if a query is
run every time it changes, and doubtless has battery and performance issues.
I have made a quick hack change to your locationservices.swift to implement
this. Of course this should really be a parameter(!)
I hope this helps.
public func startTracking(accuracy: CLLocationAccuracy) {
if(_locationManager == nil)
{
_locationManager = CLLocationManager()
_locationManager!.delegate = self
    if (CLLocationManager.authorizationStatus() == .notDetermined) {
        if (Bundle.main.object(forInfoDictionaryKey:

"NSLocationWhenInUseUsageDescription") != nil) {
_locationManager!.requestWhenInUseAuthorization()
}
else if (Bundle.main.object(forInfoDictionaryKey:
"NSLocationAlwaysUsageDescription") != nil) {
_locationManager!.requestAlwaysAuthorization();
}
else {
NSException(name:
NSExceptionName.internalInconsistencyException, reason:"To use
location in iOS8 you need to define either
NSLocationWhenInUseUsageDescription or
NSLocationAlwaysUsageDescription in the app bundle's Info.plist file",
userInfo: nil).raise()
}
    }

    _locationManager!.desiredAccuracy = accuracy;
   * _locationManager!.distanceFilter = 100;     // Hack change to

only get updates if changed by 100m*
}
On 5 July 2018 at 16:19, Maurits van Beusekom<EMAIL_ADDRESS>wrote:

Hi @nicolasjon https://github.com/nicolasjon, thanks for your feedback.
I am however not 100% sure what it is you are asking here, would you mind
explaining the use case a bit more detailed?
To me it looks like you need some kind of geofencing functionality where
events are only pushed on the stream returned from the getPositionStream
when the devices enters or leaves a certain area. Is this correct or do you
mean something different?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/BaseflowIT/flutter-geolocator/issues/27#issuecomment-402758310,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AGPEpb0_dLP6cszZaRZrD5_XEMzdz2LJks5uDi54gaJpZM4VC50X
.

@nicolasjon thanks for the feedback, sounds like an awesome feature. We will be integrating it as soon as possible (hopefully we can release it next week)


When baking in a plugin with /, update the namespace of the baked factory

Given a Table Foo/Bar.Countries, when running the bake command, the namespace of the produced plugin should be amended so the slash becomes a backslash.

Done

Done


Installation documentation is wrong

Prerequisites

[X] Write a descriptive title.
[X] Search the existing issues.
[X] I am reporting the documentation problem for the current version of Azure CLI.

Azure CLI version being used
irrelevant
Link to affected document
https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-macos
Description of the documentation error
The instructions are wrong and the azure cli is never properly installed as the shell's path isnt updated and you have to manually search for where your package manager installs the product (~/homebrew/Cellar/azure-cli/2.32.0/bin) and update the shell path manually. This documentation is also incredibly out of date as it still references the bash shell. The bash shell became depreciated back in 2019 in Mac OS 10.15 when it was replaced by zsh as the default shell. For reference the current version of Mac OS is 12.1
Suggested fix
Update the zsh path, and update your change management process so as to verify your documentation is accurate after every major release of Mac OS.

Hi @ihategithubsomuch ,
Thanks for the feedback here.
I can't repro the install problem for shell path. Following the example, I get a good installation and immediate access to the az  CLI tool.
Az for the reference to bash, I agree there are some references that could be updated. The code blocks can't be updated currently to zsh as it's not currently supported in Microsoft's docs platform. We can update the completion and proxy bash references though.
@jiasli could I get some info on the proxy guidance? The completion info will be a minor update linking to the same documentation but will need verification on the proxy.

@ihategithubsomuch, Thanks for your dedication to our documentation. According to Homebrew issue 938 you may need to add Homebrew to your PATH.  I have forwarded your comments about the Bash shell to our engineering team.  We are closing this issue for now, but feel free to comment here as necessary.


Task Complexity

First of all, amazing tool, so far is working great with the projects of the company i work with.
It could be really useful to see the complexity sum on each column on the board.
Also all of the analytics are made by task count, but it could be great to have those same Analytics by complexity instead of number of tasks. Maybe it should be something optional or just another column but i think complexity is a more relevant measure that needs to be shown.
Keep up the excelent work

I agree with dbinagi. Since the complexity is a very flexible field, you can use it in different contexts and have an estimate for each column.
In Sales, you coud use the board to map leads en propposals and use the complexity field for the expected revenue of the lead. Having the sum at the top of the column coud give you a quick view of the size of the leads that you have at hand.

It's now available in the development version.
The sum of task complexity can be seen on the right of each column if the value is greater than 0.

Great. Thanks!
Are you working on having analytics based on complexity? Having that feature would provide you with a burndown chart based on complexity (story points).

Not yet, but should not be very difficult. I have to record some data in the database to generate the burndown chart easily.

Great evolutions :-) Congratulations !

FGuillot, should we open a new Feature Request for the burndown chart since this one is closed?

yep


clarify response shape for annotations

annotations on /metainfo/text sometimes are returned as an Array<Annotation>, sometimes as Array<string, Array<Annotation>>, where the string is the html string.
example for the first:
https://sola.acdh-dev.oeaw.ac.at/apis/api/metainfo/text/1275/?inline_annotations=true&highlight=true
example for the second:
https://sola.acdh-dev.oeaw.ac.at/apis/api/metainfo/text/5/?inline_annotations=true&highlight=true

Closing this as the the [changed] urls both deliver an arraz of annotation objects of the same shape.
https://sola.acdh-dev.oeaw.ac.at/apis/api/apis_metainfo/text/5/?inline_annotations=true&highlight=true
https://sola.acdh-dev.oeaw.ac.at/apis/api/apis_metainfo/text/1275/?inline_annotations=true&highlight=true


Revisit Elk, Sprotty cardinality

We might only need One Elk and One Sprotty Server, as it appears they can both handle multiplexing requests.
It would still be good to be able to cull them when there are no more views on the page, probably.

+const Theelk = new ELK.default({

workerFactory: () => {
ELK_DEBUG && console.warn('ELK Worker created');
return new (Worker as any)();
}
+} as any);

export class ELKModel extends DOMWidgetModel {
static model_name = 'ELKModel';
@@ -91,24 +98,25 @@ export class ELKModel extends DOMWidgetModel {
}
protected cullElk() {

const elk: any = this._elk;
if (elk != null) {

 ELK_DEBUG && console.warn('ELK worker culling for', this.cid);

 elk.worker?.terminate();

} else {

 ELK_DEBUG && console.warn('ELK was already culled for', this.cid);

}
this._elk = null;

// const elk: any = this._elk;
// if (elk != null) {
//   ELK_DEBUG && console.warn('ELK worker culling for', this.cid);
//   elk.worker?.terminate();
// } else {
//   ELK_DEBUG && console.warn('ELK was already culled for', this.cid);
// }
// this._elk = null;
}

protected ensureElk() {
if (this._elk == null) {

 this._elk = new ELK.default({

   workerFactory: () => {

     ELK_DEBUG && console.warn('ELK Worker created');

     return new (Worker as any)();

   }

 } as any);

 this._elk = Theelk;

 // this._elk = new ELK.default({

 //   workerFactory: () => {

 //     ELK_DEBUG && console.warn('ELK Worker created');

 //     return new (Worker as any)();

 //   }

https://github.com/jupyrdf/ipyelk/commit/3e118f6b440bdb363f8963bd01368f3402d04608

https://github.com/jupyrdf/ipyelk/commit/3e118f6b440bdb363f8963bd01368f3402d04608