SymbolicPropogator incorrectly "emulates" segment op

Describe the bug
The SymbolicPropogator is still using the hard coded "emulation" for the segment op. This may be wrong, and is wrong, for some processors. It should be using the segment op defined by the processor by using the pcode injection for it.
Arguably all user defined dynamic pcode injection should be injected.
Environment (please complete the following information):

Ghidra Version: 10.2 DEV

We have been working on fixing the segment emulation issue, the change just hasn't made it into patch yet.
The change will emulate all pcode injection ops including the segment op.
The main holdup up is making sure performance doesn't take a hit, as it has to check every userop.
If you would like, I can post the patch and you can try it out.

We have been working on fixing the segment emulation issue, the change just hasn't made it into patch yet.
The change will emulate all pcode injection ops including the segment op.
The main holdup up is making sure performance doesn't take a hit, as it has to check every userop.
If you would like, I can post the patch and you can try it out.

Sure. I wouldn't be able to give it a go until the weekend though.

Patch and master has an initial change.
There is another, tracking constants in/out of the stack that has segmented accesses, that didn't make it.
This is prototype, so YMMV
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/program/util/SymbolicPropogator.java b/Ghidra/Features/Base/src/main/java/ghidra/program/util/SymbolicPropogator.java
index b3b733a..ca270b4 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/program/util/SymbolicPropogator.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/program/util/SymbolicPropogator.java
@@ -979,7 +979,7 @@

 					// for callother, could be an interrupt, need to look at it like a call
 					case PcodeOp.CALLOTHER:
-						PcodeOp[] callOtherPcode = doCallOtherPcodeInjection(instruction, in, out);
+						PcodeOp[] callOtherPcode = doCallOtherPcodeInjection(instruction, pcodeOp, in, out);

 						if (callOtherPcode != null) {
 							ops = injectPcode(ops, pcodeIndex, callOtherPcode);
@@ -1651,7 +1651,7 @@
 	 *
 	 * @throws NotFoundException
 	 */
-	private PcodeOp[] doCallOtherPcodeInjection(Instruction instr, Varnode ins[], Varnode out) throws NotFoundException {
+	private PcodeOp[] doCallOtherPcodeInjection(Instruction instr, PcodeOp op, Varnode ins[], Varnode out) throws NotFoundException {
 		Program prog = instr.getProgram();

 		PcodeInjectLibrary snippetLibrary = prog.getCompilerSpec().getPcodeInjectLibrary();
@@ -1665,6 +1665,9 @@
 		for (int i = 1; i < ins.length; i++) {
 			Varnode vval = context.getValue(ins[i], evaluator);
 			if (!vval.isConstant()) {
+				if (i==1) { // first input is an unknown value
+					return injectStackSymbolicCopy(payload, op, out, ins);
+				}
 				return null;
 			}
 			inputs.add(vval);
@@ -1680,7 +1683,49 @@
 		con.output.add(out);
 		return payload.getPcode(prog, con);
 	}
+
+	/**
+	 * Check if this is a stack symbolic segment op, which can be turned into a copy
+	 *   iff the the offset portion of the segment op is symbolic
+	 * @param payload - injection payload
+	 * @param op - callother pcodeop
+	 * @param out - output varnode for callother
+	 * @param ins - inputs to callother
+	 * @return symbolic stack copy, or null if not a stack symbolic segment operation
+	 * @throws NotFoundException
+	 */
+	private PcodeOp[] injectStackSymbolicCopy(InjectPayload payload, PcodeOp op, Varnode out, Varnode[] ins)
+			throws NotFoundException {
+		// if segment op, then check for a symbolic case passthru
+		if (!"segment_pcode".equals(payload.getName())) {
+			return null;
+		}
+
+		Varnode vval = context.getValue(ins[2], evaluator);
+		// TODO: could pass through any symbolic offset
+		// if (!context.isSymbol(vval)) {
+		//    return null;
+		// }
+		// only pass through stack symbolic offsets
+		if (!context.isStackSymbolicSpace(vval)) {
+			return null;
+		}
+
+		Varnode nins[] = new Varnode[1];
+		nins[0] = ins[2];
+		PcodeOp ops[] = new PcodeOp[1];
+		ops[0] = new PcodeOp(op.getSeqnum(), PcodeOp.COPY, nins, out);
+		return ops;
+	}

+	/**
+	 * Find the callother pcode injection if it exists
+	 *
+	 * @param prog program
+	 * @param snippetLibrary pcode injection snippet library
+	 * @param callOtherIndex callother ID
+	 * @return
+	 */
 	private InjectPayload findPcodeInjection(Program prog, PcodeInjectLibrary snippetLibrary, long callOtherIndex) {
 		InjectPayload payload = (InjectPayload) injectPayloadCache.get(callOtherIndex);

Great thank you.  I will give the patch a shot sometime this weekend.

@emteere at first glance everything seems to be working correctly. Admittedly I'm not super familiar with the instruction set I have here so if something is off it might take me a while to notice.

+				if (i==1) { // first input is an unknown value
+					return injectStackSymbolicCopy(payload, op, out, ins);
+				}

I was encountering a problem caused by the above added check. Is that assuming that the segmend op is defined as segmentop(segment, address)? I had it the other way around and the problem went away switching it.

Yes the check is done to ignore the unknown SS and allow values to flow in/out of the stack and assumes the segment is the first parameter. WIth out it the complexity of the unknown SS in the segment op calculation would never allow passing the constants in/out of the stack. So they then can be ignored.
The order of the segment(seg,addr) had been inverted in past years. So it is assumed that the first part will be the segment offset. I had thought that had been corrected quite a while ago. The decompiler might do better analysis on the operations.
In the code I discovered the issue, a really old win3.1 binary, I don't think it would have worked if the offset would be incorrect and unknown.
What does your segment operations look like?

This is how it is defined when I encounter an exception.
<segmentop space="ram" userop="segment" farpointer="yes">
    <pcode>
      <input name="seg" size="1"/>
      <input name="addr" size="2"/>
      <output name="res" size="3"/>
      <body><![CDATA[
        res = (zext(seg) << 16) + zext(addr);
      ]]></body>
    </pcode>
    <constresolve>
      <register name="CES"/>
    </constresolve>
  </segmentop>

This is the stack trace for the exception:
2022-06-06 08:50:12 ERROR (AnalysisTaskWrapper) Analyzer Error: Analysis Task: Stack - Input parameter size does not match injection specification: pspec: rl78:LE:16:default ghidra.app.plugin.processors.sleigh.SleighException: Input parameter size does not match injection specification: pspec: rl78:LE:16:default
	at ghidra.program.model.lang.InjectPayloadSleigh.checkParameterRestrictions(InjectPayloadSleigh.java:348)
	at ghidra.program.model.lang.InjectPayloadSleigh.setupParameters(InjectPayloadSleigh.java:373)
	at ghidra.program.model.lang.InjectPayloadSleigh.inject(InjectPayloadSleigh.java:168)
	at ghidra.program.model.lang.InjectPayloadSleigh.getPcode(InjectPayloadSleigh.java:188)
	at ghidra.program.util.SymbolicPropogator.doCallOtherPcodeInjection(SymbolicPropogator.java:1668)
	at ghidra.program.util.SymbolicPropogator.applyPcode(SymbolicPropogator.java:967)
	at ghidra.program.util.SymbolicPropogator.flowConstants(SymbolicPropogator.java:504)
	at ghidra.program.util.SymbolicPropogator.flowConstants(SymbolicPropogator.java:400)
	at ghidra.program.util.SymbolicPropogator.flowConstants(SymbolicPropogator.java:193)
	at ghidra.app.cmd.function.NewFunctionStackAnalysisCmd.createStackPointerVariables(NewFunctionStackAnalysisCmd.java:340)
	at ghidra.app.cmd.function.NewFunctionStackAnalysisCmd.analyzeFunction(NewFunctionStackAnalysisCmd.java:191)
	at ghidra.app.cmd.function.NewFunctionStackAnalysisCmd.applyTo(NewFunctionStackAnalysisCmd.java:118)
	at ghidra.app.plugin.core.function.StackVariableAnalyzer.added(StackVariableAnalyzer.java:55)
	at ghidra.app.plugin.core.analysis.AnalysisScheduler.runAnalyzer(AnalysisScheduler.java:186)
	at ghidra.app.plugin.core.analysis.AnalysisTask.applyTo(AnalysisTask.java:39)
	at ghidra.app.plugin.core.analysis.AutoAnalysisManager$AnalysisTaskWrapper.run(AutoAnalysisManager.java:688)
	at ghidra.app.plugin.core.analysis.AutoAnalysisManager.startAnalysis(AutoAnalysisManager.java:788)
	at ghidra.app.plugin.core.analysis.AutoAnalysisManager.startAnalysis(AutoAnalysisManager.java:667)
	at ghidra.app.plugin.core.analysis.AutoAnalysisManager.startAnalysis(AutoAnalysisManager.java:632)
	at ghidra.app.plugin.core.analysis.AnalysisBackgroundCommand.applyTo(AnalysisBackgroundCommand.java:58)
	at ghidra.framework.plugintool.mgr.BackgroundCommandTask.run(BackgroundCommandTask.java:102)
	at ghidra.framework.plugintool.mgr.ToolTaskManager.run(ToolTaskManager.java:336)
	at java.base/java.lang.Thread.run(Thread.java:829)

I see the issue.  Too many assumptions made on the size of varnodes when the whole operation was replaced with a COPY.
The input can't be directly copied into the output unless some size adjustment is factored in.
Would think this would have failed on the orignal test binary, but maybe the sizing just worked.  Good thing I hesitated adding that code in at the last minute when I found the original constant tracking through a segmented stack issue.

@astrelsky @emteere what's the status of this?   I'm not seeing the changes above making it into SymbolicPropogator!
Would this affect 16-bit Windows Protected Mode applications?

@emteere what's happening with this?


efl: patch binary to handle manual dependency on libcurl.so

Motivation for this change
EFL has a runtime dependency on libcurl.so that is manually linked with dlopen, as expalined in https://github.com/NixOS/nixpkgs/pull/25412#issuecomment-316076953.
Instead of wrapping all binaries that depends on EFL so that libcurl.so can be found, this PR patches the EFL library itself to add libcurl.so as a needed library. This way all binaries with such dependency on libcurl.so are automatically fixed. Therefore this also fixes the issue with some binaries that has not been wrapped, like emixer (from enlightenment).
Things done

[x] Tested using sandboxing (nix.useSandbox on NixOS, or option build-use-sandbox in nix.conf on non-NixOS)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[x] Fits CONTRIBUTING.md.

@GrahamcOfBorg build efl econnman enlightenment ephoto rage terminology

No attempt on x86_64-darwin (full log)
The following builds were skipped because they don't evaluate on x86_64-darwin: efl, econnman, enlightenment, ephoto, rage, terminology
Partial log (click to expand)

Cannot nix-instantiate `ephoto' because:
error: attribute 'ephoto' in selection path 'ephoto' not found

Cannot nix-instantiate `rage' because:
error: attribute 'rage' in selection path 'rage' not found

Cannot nix-instantiate `terminology' because:
error: attribute 'terminology' in selection path 'terminology' not found

Success on x86_64-linux (full log)
Attempted: enlightenment
The following builds were skipped because they don't evaluate on x86_64-linux: efl, econnman, ephoto, rage, terminology
Partial log (click to expand)
 /nix/store/qrxs7sabhqcr3j9ai0j0cp58zfnny0jz-coreutils-8.29/bin/install -c -m 644 data/theme/default.edj '/nix/store/4q3aaxv7jzl8aw5pb4vybyxfz4rmv7cx-econnman-1.1/share/econnman/theme'
wrapping `/nix/store/4q3aaxv7jzl8aw5pb4vybyxfz4rmv7cx-econnman-1.1/bin/econnman-bin'...
glibPreFixupPhase
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/4q3aaxv7jzl8aw5pb4vybyxfz4rmv7cx-econnman-1.1
strip is /nix/store/fzcs0fn6bb04m82frhlb78nc03ny3w55-binutils-2.28.1/bin/strip
stripping (with command strip and flags -S) in /nix/store/4q3aaxv7jzl8aw5pb4vybyxfz4rmv7cx-econnman-1.1/bin
patching script interpreter paths in /nix/store/4q3aaxv7jzl8aw5pb4vybyxfz4rmv7cx-econnman-1.1
/nix/store/4q3aaxv7jzl8aw5pb4vybyxfz4rmv7cx-econnman-1.1/bin/.econnman-bin-wrapped: interpreter directive changed from "/usr/bin/python" to "/nix/store/mqwnygh4nb8hdvj3sr9vr092kn39xhpm-python-2.7.14/bin/python"
checking for references to /build in /nix/store/4q3aaxv7jzl8aw5pb4vybyxfz4rmv7cx-econnman-1.1...

Failure on aarch64-linux (full log)
Attempted: enlightenment
The following builds were skipped because they don't evaluate on aarch64-linux: efl, econnman, ephoto, rage, terminology
Partial log (click to expand)
cannot build derivation '/nix/store/fbq8kc3247a4lsch90v1rkw6bv9s7qkk-efl-1.20.7.drv': 1 dependencies couldn't be built
cannot build derivation '/nix/store/9piai2wfkixbrhy3xmrdl3v9r1ig3pqz-gst-plugins-bad-1.12.3.drv': 1 dependencies couldn't be built
cannot build derivation '/nix/store/92wjazfxwjpwv6zkqr6xkdxcy1illhny-hook.drv': 1 dependencies couldn't be built
cannot build derivation '/nix/store/dyrmia8zzmz7fp9fmdgjla1yx7zgmfhb-enlightenment-0.22.2.drv': 1 dependencies couldn't be built
cannot build derivation '/nix/store/j37c78q02k3m10q9vcpv5psf0dfgcw60-ephoto-1.5.drv': 1 dependencies couldn't be built
cannot build derivation '/nix/store/yfip8i98gw1isggfsa80kidh10gmd4xp-python2.7-python-efl-1.20.0.drv': 1 dependencies couldn't be built
cannot build derivation '/nix/store/kp54rkyb7fl0md3rbmy99ixamcivn3p1-rage-0.3.0.drv': 3 dependencies couldn't be built
cannot build derivation '/nix/store/6bxq00y381xy4nqp3r1gdryapncll5dp-terminology-1.1.1.drv': 1 dependencies couldn't be built
cannot build derivation '/nix/store/rjwxla17a4k92qpi19dymmfxz99zf9mx-econnman-1.1.drv': 2 dependencies couldn't be built
error: build of '/nix/store/6bxq00y381xy4nqp3r1gdryapncll5dp-terminology-1.1.1.drv', '/nix/store/dyrmia8zzmz7fp9fmdgjla1yx7zgmfhb-enlightenment-0.22.2.drv', '/nix/store/fbq8kc3247a4lsch90v1rkw6bv9s7qkk-efl-1.20.7.drv', '/nix/store/j37c78q02k3m10q9vcpv5psf0dfgcw60-ephoto-1.5.drv', '/nix/store/kp54rkyb7fl0md3rbmy99ixamcivn3p1-rage-0.3.0.drv', '/nix/store/rjwxla17a4k92qpi19dymmfxz99zf9mx-econnman-1.1.drv' failed


Clangd sometimes can't display typedef documents

// foo
struct foo {};

// typedef foo
typedef foo typedef_foo;

// typedef named struct
typedef struct bar {} typedef_bar;

// typedef unnamed struct
typedef struct {} typedef_unnamed;

// using named struct
using using_foo_bar = struct foo_bar {};

// using unnamed struct
using using_unnamed = struct {};

int main() {
    foo a; // works fine.
    typedef_foo b; // works fine.
    bar c; // works fine.
    typedef_bar d; // document not displayed when hovering.
    typedef_unnamed e; // document not displayed when hovering.
    using_foo_bar f; // works fine.
    foo_bar g; // works fine.
    using_unnamed h; // works fine.
}

Clang's heuristic is basically "take the comment before the decl, unless there's something in between". The "something" is supposed to be a decl, PP directive, stmt etc but it's any character in ";{}#@" and it's the { that's tripping us up here.
Removing {} would result in this comment applying to x:
void foo() {}
typedef int x;```

(Interestingly `typedef struct bar typedef_bar` has the opposite effect: `bar` gets no docs and `typedef_bar` gets them. This is because the `{}` is gone, but `getDeclLocForCommentSearch` prevents locations being generated for declarations inline in declarators...)

It seems fine to me to always use the typedef (or using) keyword as the location for comment lookup purposes here.

@sam-mccall ,  could you take a quick look at https://bugs.llvm.org/show_bug.cgi?id=44143, which is a regression caused by the changes made for this issue?  I'm happy to implement and test a fix, but I don't yet understand that code well enough to know where it should go.
It seems there are two different issue-reporting systems -- did I make a noob mistake and choose the wrong one?  :-/


Horizontal heatmap is fuzzy at high resolution (but only for some datasets?)

Commit:
Steps to reproduce

Some Hi-C datasets are "fuzzy" when zoomed in at high resolution, but only when displayed as  "horizontal-heatmap" - the same file as a 2D heatmap is fine. Publicly available datasets, and, oddly, .mcool files I produced earlier, are fine. I can't provide you with this specific file to test, but might be able to provide a different example.

Observed behavior

Some tracks are fuzzy, see the bottom left in the screenshot.

Expected behavior

Individual bins/pixels visible when zoomed in, like in the top left (my other dataset), and right hand side (public datasets).

I thought this was a higlass issue but now I'm suspecting it's with the file itself...

This is very odd. An example config where this happens would be super helpful. It looks like a rendering issue but HiGlass should never use anything other than NearestNeighbor interpolation when scaling up the matrix.
Could you also provide some more background information like the version of HiGlass (open the web console to see it) and the browser & OS versions.

Strangely, this is no longer happening! I went to test it again in a different browser and can't reproduce it in either that or the original browser. I have no idea why - I did update HiGlass today (to 0.7.2), but I'm sure I tested with the new version... I'm going to close this for now, unless I see it again. Sorry for the trouble.

I stealthily fixed that a few weeks ago 😁 If you encounter it again, please re-open this issue. It's pretty straightforward to fix by setting PIXI.js interpolation settings.


Use more appropriate types for base, precision and width

The only base values the library support are: 2, 8, 10, 16. And yet - we pass it around in larger types, and not even the same type everywhere.
So, why should we not just use a single small type for the base? Say, uint_least8_t or uint_fast8_t?

@mickjc750 : This issue report is inspired by your commit b907595b09bc7b03ed0803f731ec5aeffa80b91d , where you've done something similar. Which of the types do you believe is more appropriate?

For base, just a simple uint8_t, as there's no arithmetic performed on base
which would require masking it down to 8bits on a 32bit cpu.
For precision and width, uint_fast8_t would provide a slightly smaller (and
faster) executable than uint8_t , as there are places where precision is
decremented.
In the ntoa(), I'd recommend using literal values %2 %8 %10 %16 rather than
%base, as it saves performing a division. It's a minor size increase for a
big performance increase.
On Sun, Aug 1, 2021 at 6:03 AM Eyal Rozenberg @.***>
wrote:

@mickjc750 https://github.com/mickjc750 : This issue report is inspired
by your commit b907595
https://github.com/mpaland/printf/commit/b907595b09bc7b03ed0803f731ec5aeffa80b91d
, where you've done something similar. Which of the types do you believe is
more appropriate?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/mpaland/printf/issues/116#issuecomment-890398279, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/ABJ2OLLVCCELVM7VD5DVY2TT2RJIBANCNFSM5BKKNNDA
.

--
Michael Clift - Design Engineer.
Clift Innovations Pty Ltd
Suit 10/13 Walkers Road
Nunawading, VIC 3131
ABN 24 286188328
Tel: +61 3 9877 3109
Fax: +61 3 9999 1406
Mob: 0417 613 680
Email: @.***
Web: www.clift.com.au

PRIVATE AND CONFIDENTIAL
This e-mail and any files transmitted with it are intended solely for the
use of the addressee(s) and may contain information that is confidential or
privileged. If you receive this e-mail and you are not the addressee(s),
please disregard the contents of the e-mail, delete the e-mail and notify
the author immediately.

@mickjc750 : You've packaged several issues into one... anyway, are we sure width always fits in a uint8_t ?

Not 100% sure. It really comes down to opinion as to what a reasonable
width limit is.
Printf is generating text, 255 sounds like a reasonable limit for the
width of a number. Or the width of a field with a %s aligned in it.
On Sun, 1 Aug. 2021, 5:57 pm Eyal Rozenberg, @.***>
wrote:

@mickjc750 https://github.com/mickjc750 : You've packaged several
issues into one... anyway, are we sure width always fits in a uint8_t ?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/mpaland/printf/issues/116#issuecomment-890470398, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/ABJ2OLPES3WDAASHKBUCJN3T2T47HANCNFSM5BKKNNDA
.


Issue #987 Expand installation instructions

Fixes #987
Description
Expand and improve installation instructions:

Move "dependencies" section downwards
Add a "TL;DR" installation section on top, this already includes instructions how to install the beta release
Explain how to do a dev install with pixi and what extra that brings.

Merged as one slightly flaky unittests failed that was irrelevant to this changeset (it deals with measuring on how long it takes to write a MetaSWAP file, which can sometimes be slow)


Can't see items in a tree

The UIRecorder returns a path to the items in the tree.  I was surprised because the 2nd level items in the UIA tree control are not visible in inspect.exe
Only the root node appears as a tree item in inspect.  The 2nd and 3rd level nides aren't visible.  However, I can hover over the items and I get properties but there is no path in the navigation tree.
I was trying to get around this by just navigating the tree with Keys.DOWN until the one i was is selected.  There's no way i can see to get a tree's selection.  I've tried tree().get_attribute('Selection.Selection') but I end up with this: "A collection of MS.Internal.Mita.Foundation.UIObject instances in the set defined as A list of items provided by an IEnumerable implementation matching Condition: 'True'.."

How can I get the selected item name?
How can i navigate to elements that aren't appearing in the tree?

Also... I tried to navigate to the tree item by just typing the name.  That works when I do it on my own.  It doesn't work when I use send_keys or actionchains.  Keys.DOWN works but not sending letters.
thanks

if the control is not visible in inspect.exe , it will not be visible to UIrecorder also.

The element can be seen by inspect and uirecorder.  I was saying it isn't
visible in the inspect tree.
On Wed, May 27, 2020, 1:49 PM anunay1<EMAIL_ADDRESS>wrote:

if the control is not visible in inspect.exe , it will not be visible to
UIrecorder also.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/microsoft/WinAppDriver/issues/1174#issuecomment-634831583,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ACYYFHUMLMOXSRV7PTHY7GTRTVHAZANCNFSM4NMKBLAA
.

I've seen an open issue mentioning the same thing about the "A collection of MS.Internal.Mita.Foundation.UIObject instances in the set defined as A list of items provided by an IEnumerable implementation matching Condition: 'True'.." return value.  For me as well, the tree is visible in inspect but because the Selection.Selection return value isn't a string, it seems that it's stringifying the value (whcih should be a treeitem)
https://github.com/Microsoft/WinAppDriver/issues/546

Second level items are shown when you expand the tree.
The "Displayed" attribute of the tree nodes not painted on screen is set to false.
Try using Appium Desktop Client with WinAppDriver for inspecting elements. It will give you a better idea.


Fix link to Twitter profile in Readme

Noticed https://twitter.com/thomvis88 results in a 404, https://twitter.com/thomvis seems to be the correct Twitter account.

Thanks, I'll merge this shortly!


Faster MangaLife rate limiter

Source name
MangaLife
Source language
English
Describe your suggested feature
Chapters are downloader veery slowly, one image every two seconds it seems. I guess the source caps it. Would it be possible to make it faster? Without getting flagged ?
Other details
No response
Acknowledgements

[X] I have searched the existing issues and this is a new ticket, NOT a duplicate or related to another open or closed issue.
[X] I have written a short but informative title.
[X] If this is an issue with the app itself, I should be opening an issue in the app repository.
[X] I have updated the app to version 0.15.3.
[X] I will fill out all of the requested information in this form.

Generally, if  you have to cap something slower to prevent rate limiting/timeouts, going faster doesn't help the problem.

Ainz-Sama — 2021-04-13T08:18Z
Mangalife is rate limited, it's to prevent the source from banning the app (which they have done before)

This hasn't changed


Improved ES_es.js spanish translation

It's my first PR, hope it's everything alright!

Looks great, thanks!


Connection issues to the docker daemon will not propagate an error

@CameronDiver, could this issue be the same as #27?

I think it's certainly likely. Would be good to test this with your branch.


realsense2_camera: 2.2.6-1 in 'kinetic/distribution.yaml' [bloom]

Increasing version of package(s) in repository realsense2_camera to 2.2.6-1:

upstream repository: https://github.com/IntelRealSense/realsense-ros.git
release repository: https://github.com/IntelRealSense/realsense-ros-release.git
distro file: kinetic/distribution.yaml
bloom version: 0.8.0
previous version for package: null

This appears to be failing CI because the melodic release no longer has the appropriate files available.
======================================================================
ERROR: test.test_build_caches.test_build_caches
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/travis/virtualenv/python2.7.14/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/home/travis/build/ros/rosdistro/test/test_build_caches.py", line 57, in test_build_caches
    raise RuntimeError('\n'.join(errors))
RuntimeError: melodic: missing package.xml file for package "realsense2_camera"
melodic: missing package.xml file for package "realsense2_description"


Rework glucose dialog

Refactor manual glucose entry from popup to sheet-based dialog
Adds delete dialog to glucose entries, i.e., streamlining it to how treatments are deleted
Small refactoring for DateTableStateModel: pass glucose object instead of index on deletion
Change "Add" button to proper button with text and icon above list

This dialog uses the same design/style and UX as the proposed non-pump insulin dialog of PR #271. It uses a sheet-based layout and adds a button above the list below the Picker element.
Side note: A big improvement over popovers is that iOS users are used to these sheet views from a navigation perspective and that they bring a better UX than popovers imho, e.g. a user can swipe-away-to-close these sheets.
This feature was inititally proposed through PR #236. Please see that PR for user feedback (about a dozen people have tested this) and test feedback. Many users requests a button with text and icon, so I added it back (it was removed from 236).

New Glucose Dialog

I have 2 comments.

I suggest having the button on first row, instead of adding a new element to this Form. This enables us to also add a similar row to the list with treatments, as has been suggested elsewhere with a show future entries button.
. Above is just a quick minute draft, and I think it look even better if first row is using another background, like greyish, like the one Daniel in Discord was displaying.
The delete glucose doesn't need an alert. The Apple UX with dragging a red row the entire way to the left is enough as .

Good morning @Jon-b-m , thanks for the feedback.

I suggest having the button on first row, instead of adding a new element to this Form. This enables us to also add a similar row to the list with treatments, as has been suggested elsewhere with a show future entries button.

I like this and will add this.

The delete glucose doesn't need an alert. The Apple UX with dragging a red row the entire way to the left is enough as is.

This is inconsistent behaviour throughout the different delete actions in history. Given that swiping (without authentication for glucose) can also be done by accident, I think we should do it here as well. It's just consistent, that iAPS asks for some kind of user confirmation before the user can delete any entry from the app.

I don't like the refactoring of delete glucose, as you're now using more code to perform same function. More clean and stringent and Apple-ish before.

As this is one PR in a row of PRs, the entire deletion will actually end up living in a single function. You can compare the deletion from PR #236 where it was already done like that. I fully agree, it's not nice like it is now, but it will end up living in a very dynamic and nice function once we are done.

Regarding the delete we already have swipe to delete. It's really clear as is. I pushed my suggestion to dev to make it easier for you. In fact probably better for you to close this particular PR, to avoid double work as it's already implemented in dev. The pop-up for glucose I can remove myself.

Regarding the delete we already have swipe to delete. It's really clear as is. I pushed my suggestion to dev to make it easier for you. In fact probably better for you to close this particular PR, to avoid double work as it's already implemented in dev. The pop-up for glucose I can remove myself.

Okay, I can pull in dev and fix this quickly so you don’t have to do it. Whichever you prefer.

@Jon-b-m the discussed changes are implemented now. Please see latest commit 48a4862 🚀
Reworked glucose list

Dark mode
Light mode

The updated glucose design is already in dev. Please updated your PR and add just the new glucose form.

If you take a look at my commit, I pulled in latest dev already but changed the colors and the icon to be consistent with PR #271 and added back the unit to specifc rows.
Many users had suggested they need button texts with any (+) button, so it stays „Glucose (+)“ here and the units are back with the glucose values.
It’s current dev, just updated 😊😊

Please don't make changes to newly committed dev commits in this PR, as this makes it hard for me to merge.

It makes no sense to have a button coloured grey (you don't see this anywhere in iAPS or in any other app).
It makes no sense to show unit for every row (you normally never see this in a proper data table). Here's an example for from Apple (very similar top my example):

Conclusion: please keep the dev changes!

Thanks for hinting me at the button color, that was my mistake. I thought I had changed that, oversight on my part.
It makes sense to show it, as we need a text-label for a button. Users have demanded that.
For comparison, this is xDrip4iOS, it shows unit labels per row. In my personal opinion, this makes sense.

xdrip would look cleaner with a unit header instead, but this is not xdrip.

Okay. I reverted it with one last change I hope you can accept: I made it so, that the unit text is also part of the button, so the finger of the user has a larger surface area to tap in order to open the dialog. Looks like this:

Dark mode
Light mode

Is it okay like so? This essentially adds:

New dialog for glucose entry
Button extended to include text with ⊕ icon

Again it's already in dev 🙂. you don't need to change this dev UI. Also why are you displaying unit in blue? Used dev as base fro your PR, please. Just remove the pop-up in this PR.

Again it's already in dev 🙂. you don't need to change this dev UI. Also why are you displaying unit in blue? Used dev as base fro your PR, please. Just remove the pop-up in this PR.

Dev is the base for this PR. I don't really understand the issue, sorry. I've pulled it in various times now.

This PR builds upon dev, as all PR we push to dev do. It slightly changes a few things:

The popup is removed.
The unit is now blue so that clickable surface area for the button is bigger than just a tiny ⊕ symbol. For the users like me with clumsy fingers.
The deletion is just changed slightly to make use of the item glucose instead of the offset index, because that will be needed once I start working on the 3 tab layout thing. If it really bothers you that this is in here, I can remove it now and add it back later; it will be needed for the other stuff.

Sorry, but I would like for you to JUST remove the poop-up in this PR. Don't change anything else, please. Because then I can merge it instantly.

Almost there! But you sneaked  in a few other changes not needed:
Delete  the @Published var manualGlucoseDate = Date() you added. Not needed.
Remove the debug about Health. It's in the wrong place. Doesn't belong here.
The  // Reset amount to 0 for next entry.  manualGlucose = 0  is also not needed. here. It's looks heavy-handed

More moments;
Remove the
.disabled(state.manualGlucose < limitLow || state.manualGlucose > limitHigh)
And instead add a
.disabled(state.manualGlucose <= 0)


Fix naming for multiple resources present in one file

How to categorize this PR?

/area open-source
/kind enhancement
What this PR does / why we need it:
Follow up of - https://github.com/gardener/gardener/pull/8877
If there are multiple resources present in one file the name of the key for data in secret was calculated as [filename + reosurceName] but the resource name can contain any character in their name whereas the data key should follow [-._a-zA-Z0-9]+ regex.
This PR fixes it by replacing all characters by _ which doesn't match regex [-._a-zA-Z0-9]+.
Which issue(s) this PR fixes:
Fixes #
Special notes for your reviewer:
Release note:

NONE

/cc @ialidzhikov @plkokanov

/approve


Ignore list for 'undefined global' check

I'm using an embedded Lua version with specific embedded variables & functions.
lua-language-server marks then as 'undefined global'.
Is there any way to create an ignore list of them?

If in VSCode, use setting -> Lua.
Otherwise, see https://github.com/sumneko/lua-language-server/wiki/Setting-without-VSCode.

You mean adding it to Lua.diagnostics.globals in VSCode?

If in VSCode, use setting -> Lua.
Otherwise, see https://github.com/sumneko/lua-language-server/wiki/Setting-without-VSCode.

You mean adding it to Lua.diagnostics.globals in VSCode?


Compatibility test for 2.7.2

The version 2.7.2 has been released with the fix for https://github.com/pilgr/Paper/issues/188 and similar nasty issues.
Now we need to make sure the fix works for everyone and that backward compatibility is in place.
Please give 2.7.2 a try in your project and leave feedback here:

Does new version fix the issue with AGP 7.0.2+?
Does new version read the data saved by the early version 2.7.1 and lower?

No issues found so far, closing the task.

m having deserialization error when apply minifyEnabled=true
using this version
...
implementation 'io.github.pilgr:paperdb:2.7.2'
...
With gradle plugin 7.0.4


Issue with viewing Doorbell Camera E340 [Bug]:

What happened?
Here is the Setup
E340 Eufy Doorbell Stand alone (No Homebase) on local Wifi with eufy plugin (latest one)
I am running Unraid with homebridge in docker container with eufy plugin
I am Unable to view the livestream of my doorbell it always says "No Response" I have tried a number of debugging solutions suggested in streaming issues area and have had no luck I even had it on the lowest possible settings and still it won't let me view it.
I have tried the different video formats suggested and have had no luck.
I did a full reinstall twice and still nothing is working.
I tried disabling audio and the other options and still nothing.
It sometimes shows an old thumbnail snap shot and other times the preview is just "snapshot unavailable" or "no response"
Not Sure what is causing it, could use some help
Device Type
Doorbell (Supported)
Plugin Version
v3.0.x (Best Effort)
HomeBridge Version
v1.7.x (Supported)
NodeJS Version
v20 (Supported)
Operating System
Other (UnSupported)
Relevant log output
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [platform.ts:623]       DEVICE_Front Door pre-caching complete
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [platform.ts:728]       DEVICE_Front Door UUID:0bf98672-1769-4cd1-8a49-8cc38c1cb0bf
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [platform.ts:748]       DEVICE_Front Door isCamera!
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:152]  Front Door REGISTER CHARACTERISTIC AccessoryInformation / Manufacturer / undefined
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:158]  Front Door REGISTER CHARACTERISTIC (0000003E-0000-1000-8000-0026BB765291) / (00000020-0000-1000-8000-0026BB765291)
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:152]  Front Door REGISTER CHARACTERISTIC AccessoryInformation / Name / undefined
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:158]  Front Door REGISTER CHARACTERISTIC (0000003E-0000-1000-8000-0026BB765291) / (00000023-0000-1000-8000-0026BB765291)
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:152]  Front Door REGISTER CHARACTERISTIC AccessoryInformation / Model / undefined
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:158]  Front Door REGISTER CHARACTERISTIC (0000003E-0000-1000-8000-0026BB765291) / (00000021-0000-1000-8000-0026BB765291)
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:152]  Front Door REGISTER CHARACTERISTIC AccessoryInformation / SerialNumber / undefined
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:158]  Front Door REGISTER CHARACTERISTIC (0000003E-0000-1000-8000-0026BB765291) / (00000030-0000-1000-8000-0026BB765291)
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:152]  Front Door REGISTER CHARACTERISTIC AccessoryInformation / FirmwareRevision / undefined
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:158]  Front Door REGISTER CHARACTERISTIC (0000003E-0000-1000-8000-0026BB765291) / (00000052-0000-1000-8000-0026BB765291)
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:152]  Front Door REGISTER CHARACTERISTIC AccessoryInformation / HardwareRevision / undefined
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:158]  Front Door REGISTER CHARACTERISTIC (0000003E-0000-1000-8000-0026BB765291) / (00000053-0000-1000-8000-0026BB765291)
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:102]  Front Door Property Keys: {
  motionDetected: false,
  personDetected: false,
  personName: '',
  ringing: false,
  name: 'Front Door',
  model: 'T8214',
  serialNumber: '[***]',
  type: 94,
  hardwareVersion: '<IP_ADDRESS>',
  softwareVersion: '<IP_ADDRESS>',
  stationSerialNumber: '[***]',
  enabled: true,
  picture: null,
  recordingClipLength: 60,
  recordingRetriggerInterval: 5,
  recordingEndClipMotionStops: false,
  deliveryGuardPackageGuardingActivatedTimeFrom: '00:00',
  deliveryGuardPackageGuardingActivatedTimeTo: '23:59',
  deliveryGuardPackageGuardingVoiceResponseVoice: 1,
  deliveryGuardUncollectedPackageAlertTimeToCheck: '20:00',
  dualCamWatchViewMode: 5,
  ringAutoResponseVoiceResponseVoice: 2,
  ringAutoResponseTimeFrom: '00:00',
  ringAutoResponseTimeTo: '23:59',
  packageDelivered: false,
  packageStranded: false,
  packageTaken: false,
  snoozeTime: 0,
  snoozeStartTime: 0,
  snoozeHomebase: false,
  snoozeStartChime: false,
  snoozeMotion: false,
  ringtoneVolume: 80,
  ringAutoResponse: false,
  ringAutoResponseVoiceResponse: false,
  chimeIndoor: true,
  deliveryGuard: true,
  deliveryGuardPackageLiveCheckAssistance: true,
  deliveryGuardUncollectedPackageAlert: false,
  deliveryGuardPackageGuarding: false,
  speakerVolume: 80,
  statusLed: true,
  chargingStatus: 1,
  powerWorkingMode: 1,
  snooze: false,
  videoRecordingQuality: 3,
  nightvision: 1,
  motionDetectionType: 3,
  battery: 89,
  videoStreamingQuality: 0,
  batteryTemperature: 11,
  watermark: 1,
  state: 1,
  microphone: true,
  wifiRssi: -69,
  wifiSignalLevel: 3
}
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:121]        Front Door Constructed Camera
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:264]        Front Door config is {
  name: 'DEVICE_Front Door',
  manufacturer: '',
  model: '',
  serialNumber: '[***]',
  firmwareRevision: '',
  enableButton: true,
  motionButton: true,
  lightButton: true,
  talkback: true,
  talkbackChannels: 1,
  hsv: false,
  hsvRecordingDuration: 90,
  rtsp: false,
  enableCamera: true,
  refreshSnapshotIntervalMinutes: 30,
  snapshotHandlingMethod: 3,
  immediateRingNotificationWithoutSnapshot: false,
  delayCameraSnapshot: false,
  indoorChimeButton: false,
  videoConfig: {
    vcodec: 'copy',
    useSeparateProcesses: true,
    debug: true
  }
}
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:127]        Front Door Is standalone? true
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:131]        Front Door Camera enabled: Setting up camera and chime button.
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:152]  Front Door REGISTER CHARACTERISTIC CameraOperatingMode / EventSnapshotsActive / undefined
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:158]  Front Door REGISTER CHARACTERISTIC (0000021A-0000-1000-8000-0026BB765291) / (00000223-0000-1000-8000-0026BB765291)
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:152]  Front Door REGISTER CHARACTERISTIC CameraOperatingMode / HomeKitCameraActive / undefined
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:158]  Front Door REGISTER CHARACTERISTIC (0000021A-0000-1000-8000-0026BB765291) / (0000021B-0000-1000-8000-0026BB765291)
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:199]  Front Door ON 'CameraOperatingMode / HomeKitCameraActive'
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:152]  Front Door REGISTER CHARACTERISTIC CameraOperatingMode / ManuallyDisabled / undefined
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:158]  Front Door REGISTER CHARACTERISTIC (0000021A-0000-1000-8000-0026BB765291) / (00000227-0000-1000-8000-0026BB765291)
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:199]  Front Door ON 'CameraOperatingMode / ManuallyDisabled'
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:152]  Front Door REGISTER CHARACTERISTIC CameraOperatingMode / CameraOperatingModeIndicator / undefined
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:158]  Front Door REGISTER CHARACTERISTIC (0000021A-0000-1000-8000-0026BB765291) / (0000021D-0000-1000-8000-0026BB765291)
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:199]  Front Door ON 'CameraOperatingMode / CameraOperatingModeIndicator'
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:152]  Front Door REGISTER CHARACTERISTIC CameraOperatingMode / NightVision / undefined
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:158]  Front Door REGISTER CHARACTERISTIC (0000021A-0000-1000-8000-0026BB765291) / (0000011B-0000-1000-8000-0026BB765291)
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:199]  Front Door ON 'CameraOperatingMode / NightVision'
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:152]  Front Door REGISTER CHARACTERISTIC MotionSensor / MotionDetected / undefined
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:158]  Front Door REGISTER CHARACTERISTIC (00000085-0000-1000-8000-0026BB765291) / (00000022-0000-1000-8000-0026BB765291)
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:199]  Front Door ON 'MotionSensor / MotionDetected'
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:152]  Front Door REGISTER CHARACTERISTIC Doorbell / ProgrammableSwitchEvent / undefined
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:158]  Front Door REGISTER CHARACTERISTIC (00000121-0000-1000-8000-0026BB765291) / (00000073-0000-1000-8000-0026BB765291)
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:199]  Front Door ON 'Doorbell / ProgrammableSwitchEvent'
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:550]        Front Door configureVideoStream
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:553]        Front Door StreamingDelegate
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    INFO    [SnapshotManager.ts:115]        Front Door Setting up automatic snapshot refresh every 30 minutes. This may decrease battery life dramatically. The refresh process should begin in 1 minutes.
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    INFO    [SnapshotManager.ts:132]        Front Door is set to handle snapshots with cloud images. Snapshots might be older than they appear.
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    ERROR   [SnapshotManager.ts:172]        Front Door could not fetch old snapshot: No currentSnapshot
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:556]        Front Door RecordingDelegate
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:565]        Front Door Controller
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:568]        Front Door streamingDelegate.setController
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:576]        Front Door configureController
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:172]        Front Door IndoorChime config: false
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:179]        Front Door Looks like not compatible with chimeIndoor or this has been disabled within configuration
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:152]  Front Door REGISTER CHARACTERISTIC Battery / BatteryLevel / undefined
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:158]  Front Door REGISTER CHARACTERISTIC (00000096-0000-1000-8000-0026BB765291) / (00000068-0000-1000-8000-0026BB765291)
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:172]        Front Door Enabled config: true
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:175]        Front Door has a enabled, so append switchEnabled characteristic to it.
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:152]  Front Door REGISTER CHARACTERISTIC Switch / On / DEVICE_Front Door_Enabled
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:158]  Front Door REGISTER CHARACTERISTIC (00000049-0000-1000-8000-0026BB765291) / (00000025-0000-1000-8000-0026BB765291)
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:172]        Front Door Motion config: true
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:175]        Front Door has a motionDetection, so append switchMotion characteristic to it.
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:152]  Front Door REGISTER CHARACTERISTIC Switch / On / DEVICE_Front Door_Motion
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:158]  Front Door REGISTER CHARACTERISTIC (00000049-0000-1000-8000-0026BB765291) / (00000025-0000-1000-8000-0026BB765291)
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:172]        Front Door Light config: true
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:179]        Front Door Looks like not compatible with light or this has been disabled within configuration
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:269]  Front Door Pruning unused service 00000113-0000-1000-8000-0026BB765291 null
[07/16/2024 22:47:21]   [EufySecurity-3.4.2]    INFO    [platform.ts:554]       Updating existing accessory: DEVICE_Front Door
[07/16/2024 22:47:23]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:111]      Front Door handleSnapshotRequest
[07/16/2024 22:47:23]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:114]      Front Door Snapshot requested: 1280 x 720 true
[07/16/2024 22:47:23]   [EufySecurity-3.4.2]    ERROR   [SnapshotManager.ts:247]        Front Door No currentSnapshot available No currentSnapshot available
[07/16/2024 22:47:23]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:118]      Front Door snapshot byte lenght: 32222
[07/16/2024 22:47:23]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:163]  Front Door GET 'AccessoryInformation / FirmwareRevision': <IP_ADDRESS>
[07/16/2024 22:47:23]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:163]  Front Door GET 'AccessoryInformation / Name': Front Door
[07/16/2024 22:47:23]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:163]  Front Door GET 'AccessoryInformation / FirmwareRevision': <IP_ADDRESS>
[07/16/2024 22:47:24]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:163]  Front Door GET 'AccessoryInformation / FirmwareRevision': <IP_ADDRESS>
[07/16/2024 22:47:24]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:498]        Front Door SET 'HomeKit Camera Active' enabled: 1
[07/16/2024 22:47:24]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:130]      Front Door stream prepare request with session id 85c27c68-d834-4476-9093-1f56a927868e was received.
[07/16/2024 22:47:24]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:163]  Front Door GET 'AccessoryInformation / FirmwareRevision': <IP_ADDRESS>
[07/16/2024 22:47:24]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:163]  Front Door GET 'AccessoryInformation / FirmwareRevision': <IP_ADDRESS>
[07/16/2024 22:47:24]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:315]      Front Door Received request to start stream with id 85c27c68-d834-4476-9093-1f56a927868e
[07/16/2024 22:47:24]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:316]      Front Door request data: {
  sessionID: '85c27c68-d834-4476-9093-1f56a927868e',
  type: 'start',
  video: {
    codec: 0,
    profile: 2,
    level: 2,
    packetizationMode: 0,
    cvoId: undefined,
    width: 1280,
    height: 720,
    fps: 30,
    pt: 99,
    ssrc: 221711999,
    max_bit_rate: 299,
    rtcp_interval: 0.5,
    mtu: 1378
  },
  audio: {
    codec: 'AAC-eld',
    channel: 1,
    bit_rate: 0,
    sample_rate: 16,
    packet_time: 30,
    pt: 110,
    ssrc:<PHONE_NUMBER>,
    max_bit_rate: 24,
    rtcp_interval: 5,
    comfort_pt: 13,
    comfortNoiseEnabled: false
  }
}
[07/16/2024 22:47:24]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:183]      Front Door VIDEOCONFIG:  {
  vcodec: 'copy',
  useSeparateProcesses: true,
  debug: true
}
[07/16/2024 22:47:24]   [EufySecurity-3.4.2]    DEBUG   [utils.ts:143]  Front Door RTSP rtspStream: false
[07/16/2024 22:47:24]   [EufySecurity-3.4.2]    DEBUG   [utils.ts:145]  Front Door Looks like not compatible with RTSP
[07/16/2024 22:47:24]   [EufySecurity-3.4.2]    DEBUG   [LocalLivestreamManager.ts:59]  Front Door New instance requests livestream.
[07/16/2024 22:47:24]   [EufySecurity-3.4.2]    DEBUG   [LocalLivestreamManager.ts:72]  Front Door Start new station livestream...
[07/16/2024 22:47:28]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:197]      Front Door Device appears to be inactive. Stopping video stream.
[07/16/2024 22:47:28]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:343]      Front Door Stopping session with id: 85c27c68-d834-4476-9093-1f56a927868e
[07/16/2024 22:47:28]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:388]      Front Door No session to stop.
[07/16/2024 22:47:35]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:111]      Front Door handleSnapshotRequest
[07/16/2024 22:47:35]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:114]      Front Door Snapshot requested: 1280 x 720 true
[07/16/2024 22:47:35]   [EufySecurity-3.4.2]    ERROR   [SnapshotManager.ts:247]        Front Door No currentSnapshot available No currentSnapshot available
[07/16/2024 22:47:35]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:118]      Front Door snapshot byte lenght: 32222
[07/16/2024 22:47:35]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:163]  Front Door GET 'Battery / BatteryLevel': 89
[07/16/2024 22:47:36]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:130]      Front Door stream prepare request with session id a53099d5-1965-4deb-af54-606f34e0e5ca was received.
[07/16/2024 22:47:36]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:163]  Front Door GET 'AccessoryInformation / FirmwareRevision': <IP_ADDRESS>
[07/16/2024 22:47:36]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:163]  Front Door GET 'AccessoryInformation / FirmwareRevision': <IP_ADDRESS>
[07/16/2024 22:47:36]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:315]      Front Door Received request to start stream with id a53099d5-1965-4deb-af54-606f34e0e5ca
[07/16/2024 22:47:36]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:316]      Front Door request data: {
  sessionID: 'a53099d5-1965-4deb-af54-606f34e0e5ca',
  type: 'start',
  video: {
    codec: 0,
    profile: 2,
    level: 2,
    packetizationMode: 0,
    cvoId: undefined,
    width: 1280,
    height: 720,
    fps: 30,
    pt: 99,
    ssrc:<PHONE_NUMBER>,
    max_bit_rate: 299,
    rtcp_interval: 0.5,
    mtu: 1378
  },
  audio: {
    codec: 'AAC-eld',
    channel: 1,
    bit_rate: 0,
    sample_rate: 16,
    packet_time: 30,
    pt: 110,
    ssrc:<PHONE_NUMBER>,
    max_bit_rate: 24,
    rtcp_interval: 5,
    comfort_pt: 13,
    comfortNoiseEnabled: false
  }
}
[07/16/2024 22:47:36]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:183]      Front Door VIDEOCONFIG:  {
  vcodec: 'copy',
  useSeparateProcesses: true,
  debug: true
}
[07/16/2024 22:47:36]   [EufySecurity-3.4.2]    DEBUG   [utils.ts:143]  Front Door RTSP rtspStream: false
[07/16/2024 22:47:36]   [EufySecurity-3.4.2]    DEBUG   [utils.ts:145]  Front Door Looks like not compatible with RTSP
[07/16/2024 22:47:36]   [EufySecurity-3.4.2]    DEBUG   [LocalLivestreamManager.ts:59]  Front Door New instance requests livestream.
[07/16/2024 22:47:36]   [EufySecurity-3.4.2]    DEBUG   [LocalLivestreamManager.ts:72]  Front Door Start new station livestream...
[07/16/2024 22:47:36]   [EufySecurity-3.4.2]    DEBUG   [LocalLivestreamManager.ts:77]  Front Door stream is already starting. waiting...
[07/16/2024 22:47:39]   [EufySecurity-3.4.2]    DEBUG   [LocalLivestreamManager.ts:105] Front Door Stopping station livestream.
[07/16/2024 22:47:39]   [EufySecurity-3.4.2]    ERROR   [streamingDelegate.ts:239]      Front Door Unable to start the livestream: No livestream emited... Something wrong between HB and your cam!
[07/16/2024 22:47:48]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:197]      Front Door Device appears to be inactive. Stopping video stream.
[07/16/2024 22:47:48]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:343]      Front Door Stopping session with id: a53099d5-1965-4deb-af54-606f34e0e5ca
[07/16/2024 22:47:48]   [EufySecurity-3.4.2]    DEBUG   [streamingDelegate.ts:388]      Front Door No session to stop.
[07/16/2024 22:47:51]   [EufySecurity-3.4.2]    DEBUG   [LocalLivestreamManager.ts:105] Front Door Stopping station livestream.
[07/16/2024 22:47:51]   [EufySecurity-3.4.2]    ERROR   [streamingDelegate.ts:239]      Front Door Unable to start the livestream: No livestream emited... Something wrong between HB and your cam!
[07/16/2024 22:47:58]   [EufySecurity-3.4.2]    DEBUG   [platform.ts:678]       Looking for old cached accessories that seem to be outdated...
[07/16/2024 22:47:58]   [EufySecurity-3.4.2]    INFO    [platform.ts:694]       No outdated cached accessories found.
[7/16/2024, 10:48:01 PM] [Homebridge UI] [homebridge-eufy-security] [3.4.2]     DEBUG   [server.js:109] Using bropats eufy-security-client library in version 3.0.0
[7/16/2024, 10:48:01 PM] [Homebridge UI] [homebridge-eufy-security] Incoming Request: /storedAccessories
[7/16/2024, 10:48:01 PM] [Homebridge UI] [homebridge-eufy-security] Incoming Request: /storedAccessories
[7/16/2024, 10:48:12 PM] [Homebridge UI] [homebridge-eufy-security] [3.4.2]     DEBUG   [server.js:109] Using bropats eufy-security-client library in version 3.0.0
[7/16/2024, 10:48:12 PM] [Homebridge UI] [homebridge-eufy-security] Incoming Request: /storedAccessories
[7/16/2024, 10:48:12 PM] [Homebridge UI] [homebridge-eufy-security] Incoming Request: /storedAccessories
[07/16/2024 22:48:21]   [EufySecurity-3.4.2]    DEBUG   [SnapshotManager.ts:318]        Front Door Automatic snapshot refresh triggered.
[07/16/2024 22:48:21]   [EufySecurity-3.4.2]    DEBUG   [SnapshotManager.ts:356]        Front Door Locked refresh process.
[07/16/2024 22:48:21]   [EufySecurity-3.4.2]    DEBUG   [SnapshotManager.ts:357]        Front Door Fetching new snapshot from camera.
[07/16/2024 22:48:21]   [EufySecurity-3.4.2]    DEBUG   [utils.ts:143]  Front Door RTSP rtspStream: false
[07/16/2024 22:48:21]   [EufySecurity-3.4.2]    DEBUG   [utils.ts:145]  Front Door Looks like not compatible with RTSP
[07/16/2024 22:48:21]   [EufySecurity-3.4.2]    DEBUG   [LocalLivestreamManager.ts:59]  Front Door New instance requests livestream.
[07/16/2024 22:48:21]   [EufySecurity-3.4.2]    DEBUG   [LocalLivestreamManager.ts:72]  Front Door Start new station livestream...
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:112]  Front Door Property Changes: hidden-pictureUrl /media/mmcblk0p1/Camera00/event/202407/20240717/20240717123219_snapshot.jpg
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:467]        Front Door GET 'HomeKit Camera Active' enabled: /media/mmcblk0p1/Camera00/event/202407/20240717/20240717123219_snapshot.jpg
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:467]        Front Door GET 'Manually Disabled' enabled: /media/mmcblk0p1/Camera00/event/202407/20240717/20240717123219_snapshot.jpg
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:485]        Front Door INVERSED 'Manually Disabled' enabled: false
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:467]        Front Door GET 'Camera Operating Mode Indicator' statusLed: /media/mmcblk0p1/Camera00/event/202407/20240717/20240717123219_snapshot.jpg
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:467]        Front Door GET 'Night Vision' nightvision: /media/mmcblk0p1/Camera00/event/202407/20240717/20240717123219_snapshot.jpg
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:107]  Front Door Raw Property Changes: 6073 {
  cur_mode: 0,
  test_mode: 0,
  mode0: [
    {
      id: 1,
      sst: 4
    },
    {
      id: 2,
      sst: 4
    },
    {
      id: 3,
      sst: 4
    },
    {
      id: 4,
      sst: 4
    }
  ],
  mode1: [
    {
      id: 1,
      sst: 4
    },
    {
      id: 2,
      sst: 4
    },
    {
      id: 3,
      sst: 4
    },
    {
      id: 4,
      sst: 4
    }
  ],
  mode2: [
    {
      id: 1,
      sst: 4
    },
    {
      id: 2,
      sst: 4
    },
    {
      id: 3,
      sst: 4
    },
    {
      id: 4,
      sst: 4
    }
  ]
}
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:107]  Front Door Raw Property Changes: 2716 {
  num: 0,
  setting: []
}
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:107]  Front Door Raw Property Changes: 2713 {
  start_h: '20',
  start_m: '0'
}
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:107]  Front Door Raw Property Changes: 2723 {
  ai_bottom_switch: 1024,
  ai_front_switch: 0
}
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:107]  Front Door Raw Property Changes: 1295 {
  points: []
}
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:107]  Front Door Raw Property Changes: 6042 {
  polygens: []
}
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:107]  Front Door Raw Property Changes: 1271 {
  account_id: 'de21e957c3327574632913380c64d50df6ac9ad9',
  snooze_time: 0
}
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:107]  Front Door Raw Property Changes: 2731 {
  cur_mode: 5,
  mode_0: {
    quality: 3
  },
  mode_1: {
    quality: 3
  }
}
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:107]  Front Door Raw Property Changes: 2710 {
  auto_voice_id: 1,
  start_h: '0',
  start_m: '0',
  end_h: '23',
  end_m: '59',
  auto_voice_name: 'Excuse me,can I help you'
}
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:107]  Front Door Raw Property Changes: 2730 {
  mode_0: {
    quality: 0
  },
  mode_1: {
    quality: 0
  },
  cur_mode: 5
}
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:107]  Front Door Raw Property Changes: 2711 {
  start_h: '0',
  start_m: '0',
  end_h: '23',
  end_m: '59'
}
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [BaseAccessory.ts:112]  Front Door Property Changes: picture {
  data: '[***]',
  type: {
    ext: 'jpg',
    mime: 'image/jpeg'
  }
}
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:467]        Front Door GET 'HomeKit Camera Active' enabled: [object Object]
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:467]        Front Door GET 'Manually Disabled' enabled: [object Object]
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:485]        Front Door INVERSED 'Manually Disabled' enabled: false
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:467]        Front Door GET 'Camera Operating Mode Indicator' statusLed: [object Object]
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [CameraAccessory.ts:467]        Front Door GET 'Night Vision' nightvision: [object Object]
[07/16/2024 22:48:28]   [EufySecurity-3.4.2]    DEBUG   [SnapshotManager.ts:334]        Front Door Stored Image: /var/lib/homebridge/eufysecurity/T8214510234000CA.jpg
[07/16/2024 22:48:36]   [EufySecurity-3.4.2]    DEBUG   [LocalLivestreamManager.ts:105] Front Door Stopping station livestream.
[07/16/2024 22:48:36]   [EufySecurity-3.4.2]    WARN    [SnapshotManager.ts:431]        Front Door Could not get snapshot from livestream!
[07/16/2024 22:48:36]   [EufySecurity-3.4.2]    DEBUG   [SnapshotManager.ts:370]        Front Door Unlocked refresh process.
[07/16/2024 22:48:36]   [EufySecurity-3.4.2]    WARN    [SnapshotManager.ts:319]        Front Door No camera source detected.

config
"platform": "EufySecurity",
            "name": "EufySecurity",
            "username": "REDACTED",
            "password": "REDACTED",
            "country": "AU",
            "deviceName": "",
            "cameras": [
                {
                    "serialNumber": "T8214 REDACTED",
                    "rtsp": false,
                    "enableCamera": true,
                    "enableButton": false,
                    "motionButton": false,
                    "indoorChimeButton": false
                }
            ],
            "_bridge": {
                "username": "REDACTED",
                "port": REDACTED
            }

Same problem here. No streaming with E340 direct.

Have the same issue as well, tried the troubleshooting and reinstalling but no luck so far.

Same problem here. Fresh install of this plugin, fresh install of the camera. I've used the defaults, tried every setting. The snapshot seems to come through occasionally, but the livestream never works.


Enable Wasm Tests

This PR enables most (but not all!) tests for Wasm. We don't run the tests using wasm-pack, instead we use this approach. The reason is that using wasm_pack would require the tests to be public, including the entire module path leading to it. That did not seem feasible.
It also makes some changes so that this actually works:

disable parallelism for wasm

rayon: inline conditional compilation chooses whether to use (into_)iter or (into_)par_iter based on target_arch
disable default features for criterion

don't use the file system at runtime in tests

added the read_json macro that reads the test vectors at compile time

somehow it thinks the macro is unused, so I told it to ignore unused_macros here

in one test we write to a file and then reopen it. I replaced that by writing to a buffer (Vec<u8>) and then reeading it

use fluvio_wasm_timer instead of std::time

This PR reuses ~300 tests that all pass when used with Wasm. We should add more later, but it's a good start I think.

I have prevailed in my duel with the github actions yaml file, and this is now ready for review

Good questions!

Would it make sense to have some documentation (in the book and/or in the wiki) on the implications of using the WASM build (no parallelization, etc.)?

Yeah that's a good point, I'll write something up.

As I understand it, WASM currently comes with two workarounds: the rstest one and the fact that we're using fluvio-wasm-timer, which I understand to also be a workaround (although I might be wrong on that one). Should we add an issue to track the eventual removal of those workarounds, or document them somewhere else?

I'll create an issue for the wasm_bindgen_test module. Regarding fluvio-wasm-timer: I am not sure I'd call it a workaround, it's more of a shim. On wasm it gets the time using web_sys, and otherwise it just reexports the stdlib types. I suppose I should hide it behind the js feature though, which signals whether the wasm environment provides the expected JS APIs. That I should definitely document!

You say that not all tests are covered when using wasm. It doesn't seem obvious to me which ones are not covered, so could you give me an idea (at least generally) which ones are not covered and why not? This might also be worth including in documentation somewhere (an issue or the wiki maybe).

Unfortunately, running tests for wasm requires a different macro attribute than #[test]. I initially the wasm test macro manually to see if they worked, and then changed the macro templates that many tests use (the ones with e.g. #[apply(ciphersuites)]) to also add it when building for wasm. This means that the tests that only have the plain #[test] attribute do not yet run on wasm. It seems these are 49. Most of them should only require adding the attribute. Some will require easy fixes, and others may not be super feasible now (mostly those that work with the file system).
I can document it somewhere -- do you think the wiki is a better place than the book? I could just create a Wasm page in the book that explains all the caveats.

I added a page in the User Manual part of the book that focuses on what the user needs to know, including the js feature
I added a page in the wiki that captures the current state of wasm support and its caveats
I made sure you can't compile without the js feature set, in order to avoid unexpected runtime crashes

Should I create the issue for the workaround now or after the PR is merged?

I created issues #1484 and #1485


✨Feature Request: Webhook for Periodic Data Reporting

I'd like to propose a new feature that would greatly enhance the capabilities of umami for many users, especially those who want to integrate umami analytics with other platforms or tools.
Feature: Webhook for Periodic Data Reporting
Overview:
The idea is to have a webhook functionality that can send data to another site using an HTTP request. Users should be able to set a specific time interval (e.g., 10 minutes, 20 minutes, etc.) and at the end of that interval, the webhook will make a callback to a specified server with a summary of analytics data.
Detailed Requirements:

Configurable Time Interval: Users should be able to set a time interval for the webhook to trigger. This could be in the form of a dropdown or input field where users can specify the number of minutes (e.g., 10, 20, 30 minutes).
Data to be Sent: At the end of the specified interval, the webhook should send:
a. A list of all visited URLs during the previous x period.
b. Total views for each URL during the previous x period.
Webhook Configuration: Users should be able to:
a. Specify the endpoint URL where the HTTP request will be sent.
b. Choose the HTTP method (e.g., POST, PUT, `GET``).
c. Add custom headers if needed (e.g., for authentication purposes).
Error Handling: In case the webhook fails to send data (e.g., server not reachable, authentication failure), there should be a mechanism to retry sending the data or log the error for the user to review.

Use Case:
This feature would be particularly useful for users who want to integrate umami analytics with other platforms or tools in real-time or near-real-time. For instance, a user might want to send analytics data to a CRM platform every 10 minutes to track and analyze user behavior on their website.
Data Example
[
    {
        "path": "/",
        "total": 330
    },
    {
        "path": "/docs/getting-started",
        "total": 278
    },
    {
        "path": "/docs/install",
        "total": 98
    }
]

Conclusion:
I believe this feature would be a valuable addition to umami and would open up many integration possibilities for users. I'd love to hear feedback from the community and maintainers on this proposal.
Thank you for considering this feature request!

In general, webhooks are used to inform you when a random event happens, like a user signs up or logs into your website. Then the webhook is called to inform you. They usually don't work on a fixed schedule. I think what you want is a cronjob. You can set up a cronjob on another server to pull from the API whatever data you need.


[google_sign_in] Listen to authentication changes on the platform-side.

The current implementation of the google_sign_in plugin only listens to authentication (user) changes caused by its own methods, but for example, in web, it is possible to sign out in another tab.
The plugin can see this, platform-side, but currently there's no message channel from the platform to the plugin to notify the plugin of this change.
Modify the plugin so authentication changes in the platform side can be listened to by the app.
Originally posted by @ditman in https://github.com/flutter/flutter/issues/48527#issuecomment-572740495

This is not possible anymore in the new GIS SDK.

GoogleAuth.isSignedIn.listen() Remove. A user's current sign-in status on Google is unavailable. Users must be signed-in to Google for consent and sign-in moments.

Documentation: https://developers.google.com/identity/gsi/web/guides/migration?hl=en#object_migration_reference_for_user_sign-in
Closing.


Programmatic games by storing information as data

This PR adds the ability to store a game as a Game struct which has all the information we need to make a request for that game: default port, protocol (and protocol settings). It also has extra metadata.
In order to use the game structs with a common function a common return type had to be defined, here I chose to create a struct them implement from on other structs to convert them into the generic type. This has the benefit of not having to pass pointers around like if I had used traits but the downside of cloning the response as I chose to include the original response type within the generic response.
This draft only includes one game for each protocol for testing purposes, if everyone is happy I will go ahead and add the rest.
This would replace #42 however we could potentially use a similar build script to generate the game data structures e.g. from node-gamedig/games.txt
EDIT: in theory this could also replace the individual query functions for each specific game however it might be nice to keep them as they provide a way to easily get the specific response types.
EDIT: closes #36

... but the downside of cloning the response as I chose to include the original response type within the generic response.

Had a quick thought of making yet another struct for each protocol, something like a "NonGenericValveResponse" that would be the original struct, but without the fields that GenericResponse uses, this would eliminate the need of cloning but I'm not sure if it is worth doing.

I like this idea, didn't think of that.

I created a table of all the response types: https://github.com/Douile/rust-gamedig/blob/dev-programmatic-games-2/RESPONSES.md

The only real remaining problem I see is generating the list of game definitions: I'm not sure I want to write all 52 manually.
The other stuff still to be done:

Add generic response types for TheShip and FFOW?
Improve doc comments
Format code with cargo fmt (didn't do this because changes lots of stuff I didn't touch)

Formatting seems to fail, could you look into it to make it pass?
In rest, great job on managing the generic query and programmatic games, thank you a lot.
I do have some ideas to expand on it and/or to make it more maintainable, but firstly, let's merge this!


Added a shell script for highlighting on the console.

It originally required #84, but since that PR was basically rejected, I had to include the changes here, instead.
If hasLanguage() support really isn't needed, I will be more than happy to remove it.

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

1 of 1 (100.0%)  changed or added relevant line in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.08%) to 94.329%

Totals

Change from base Build<PHONE_NUMBER>:
0.08%

Covered Lines:
1181

Relevant Lines:
1252

💛  - Coveralls

Do I understand it correctly that this adds a script which you can give a string, and it'll return a rendered version?
What are the use cases for it? I can imagine some people may want to use the binary in other languages? Any other use cases for it?

Closed due to inactivity


Release v1.6.0-alpha.1

Codecov Report
Base: 71.89% // Head: 71.89% // No change to project coverage :thumbsup:

Coverage data is based on head (653bac6) compared to base (e058610).
Patch has no changes to coverable lines.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
Additional details and impacted files
@@           Coverage Diff           @@
##             main     #379   +/-   ##
=======================================
  Coverage   71.89%   71.89%
=======================================
  Files          63       63
  Lines       13711    13711
  Branches     1837     1837
=======================================
  Hits         9857     9857
  Misses       2042     2042
  Partials     1812     1812

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


build: add missing dependency for ruby2cpg tests

from what i can tell, this is the cause for the failing release build
2023-06-26T19:22:48.5629466Z [info] Code for method full name when method present in module
2023-06-26T19:22:48.6316411Z [ERROR] Error while configuring Gem Path: sh: 1: bundle: not found
2023-06-26T19:22:48.6369625Z [ERROR] Error while downloading dependency: sh: 1: bundle: not found


Publisher Fails in Release Pipeline

Release version
v4.1.2
Describe the bug
I have implemented the ApiOps and it works well with the recommended approach. However, In our env, we have Release pipelines. So that means a bit of tweaking the process.
First, is it possible or recommended to implement a publisher through the Release pipeline?
What have we done so far?

Extractor works well with a slight change to adapt our env. Instead of creating a PR, we directly merge it into the main branch. We don't need PR for our ApiOps repo. Therefore, we merge the changes directly into the main branch. (Works ok). This triggers CI publisher pipeline (step 2)
We publish the main branch as an artifact. (works ok). =>  I understand we are losing the incremental publishing as I am not getting the latest changes, but the whole main branch. This isn't an issue.
Release pipeline kicks and followings are performed;
Downloading the artifact from step 2 (works fine)
Setting publishing vars (works fine)
Fetching publisher (works fine)
Run Publisher fails with the below error

Code wise, it is a copy-paste of the steps from the pipeline approach.
The question is I am not getting this error with the pipeline approach, but why this happens in the release pipeline approach?
As the error seems to have a permission issue, What permissions should be applied in the azure portal?
2023-03-30T08:19:38.7001502Z ##[section]Starting: Run publisher
2023-03-30T08:19:38.7106410Z ==============================================================================
2023-03-30T08:19:38.7106540Z Task         : PowerShell
2023-03-30T08:19:38.7106615Z Description  : Run a PowerShell script on Linux, macOS, or Windows
2023-03-30T08:19:38.7106706Z Version      : 2.212.0
2023-03-30T08:19:38.7106759Z Author       : Microsoft Corporation
2023-03-30T08:19:38.7106844Z Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/powershell
2023-03-30T08:19:38.7106940Z ==============================================================================
2023-03-30T08:19:40.3275852Z Generating script.
2023-03-30T08:19:40.3276147Z ========================== Starting Command Output ===========================
2023-03-30T08:19:40.3276483Z ##[command]"C:\Program Files\PowerShell\7\pwsh.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'D:\a\_temp\7fd45350-9dc0-4018-a897-51d342cd82a2.ps1'"
2023-03-30T08:19:42.3409935Z info: Publisher[0]
2023-03-30T08:19:42.3410550Z       Beginning execution...
2023-03-30T08:19:42.3410758Z info: Publisher[0]
2023-03-30T08:19:42.3415455Z       Commit ID was not specified, will put all artifact files...
2023-03-30T08:19:42.3415818Z info: Microsoft.Hosting.Lifetime[0]
2023-03-30T08:19:42.3416075Z       Application started. Press Ctrl+C to shut down.
2023-03-30T08:19:42.3417109Z info: Microsoft.Hosting.Lifetime[0]
2023-03-30T08:19:42.3417362Z       Hosting environment: Production
2023-03-30T08:19:42.3417600Z info: Microsoft.Hosting.Lifetime[0]
2023-03-30T08:19:42.3417835Z       Content root path: D:\a\r1\a
2023-03-30T08:19:42.3418101Z info: Publisher[0]
2023-03-30T08:19:42.3418340Z       Putting service policy policy...
2023-03-30T08:19:43.3950278Z crit: Publisher[0]
2023-03-30T08:19:43.3962408Z       System.Net.Http.HttpRequestException: HTTP request to URI https://management.azure.com/subscriptions/***/resourceGroups/Gatsby-Dev-Playground/providers/Microsoft.ApiManagement/service/apim-sk-220323/policies/policy?api-version=2022-04-01-preview&format=rawxml failed with status code 403. Content is '{"error":{"code":"AuthorizationFailed","message":"The client xxxxxxxxxxxxxxxxxxxxxxx' with object id 'xxxxxxxxxxxxxxxxxxxxxxx' does not have authorization to perform action 'Microsoft.ApiManagement/service/policies/write' over scope '/subscriptions/***/resourceGroups/Gatsby-Dev-Playground/providers/Microsoft.ApiManagement/service/apim-sk-220323/policies/policy' or the scope is invalid. If access was recently granted, please refresh your credentials."}}'.
2023-03-30T08:19:43.3973733Z          at common.HttpPipelineExtensions.Validate(Response response, Uri requestUri)
2023-03-30T08:19:43.3983537Z          at common.HttpPipelineExtensions.PutResource(HttpPipeline pipeline, Uri uri, JsonObject resource, CancellationToken cancellationToken)
2023-03-30T08:19:43.3987846Z          at publisher.Program.<>c__DisplayClass12_0.<<GetPutRestResource>b__0>d.MoveNext()
2023-03-30T08:19:43.3996598Z       --- End of stack trace from previous location ---
2023-03-30T08:19:43.4000748Z          at publisher.ServicePolicy.PutPolicy(ServicePolicyName policyName, JsonObject json, ServiceUri serviceUri, PutRestResource putRestResource, ILogger logger, CancellationToken cancellationToken)
2023-03-30T08:19:43.4009463Z          at publisher.ServicePolicy.<>c__DisplayClass6_0.<<ProcessArtifactsToPut>b__0>d.MoveNext()
2023-03-30T08:19:43.4017828Z       --- End of stack trace from previous location ---
2023-03-30T08:19:43.4027017Z          at System.Threading.Tasks.Parallel.<>c__54`1.<<ForEachAsync>b__54_0>d.MoveNext()
2023-03-30T08:19:43.4031293Z       --- End of stack trace from previous location ---
2023-03-30T08:19:43.4040790Z          at common.IAsyncEnumerableExtensions.ForEachParallel[T](IAsyncEnumerable`1 enumerable, Func`2 action, CancellationToken cancellationToken)
2023-03-30T08:19:43.4059904Z          at publisher.ServicePolicy.ProcessArtifactsToPut(IReadOnlyCollection`1 files, JsonObject configurationJson, ServiceDirectory serviceDirectory, ServiceUri serviceUri, PutRestResource putRestResource, ILogger logger, CancellationToken cancellationToken)
2023-03-30T08:19:43.4101034Z          at publisher.Service.ProcessArtifactsToPut(IReadOnlyCollection`1 files, JsonObject configurationJson, ServiceDirectory serviceDirectory, ServiceUri serviceUri, ListRestResources listRestResources, PutRestResource putRestResource, DeleteRestResource deleteRestResource, ILogger logger, CancellationToken cancellationToken)
2023-03-30T08:19:43.4105551Z          at publisher.Publisher.RunWithoutCommitId(CancellationToken cancellationToken)
2023-03-30T08:19:43.4114636Z          at publisher.Publisher.Run(CancellationToken cancellationToken)
2023-03-30T08:19:43.4118740Z          at publisher.Publisher.ExecuteAsync(CancellationToken cancellationToken)
2023-03-30T08:19:43.4127408Z info: Microsoft.Hosting.Lifetime[0]
2023-03-30T08:19:43.4131573Z       Application is shutting down...
2023-03-30T08:19:43.4160400Z fail: Microsoft.Extensions.Hosting.Internal.Host[9]
2023-03-30T08:19:43.4161336Z       BackgroundService failed
2023-03-30T08:19:43.4166656Z       System.Net.Http.HttpRequestException: HTTP request to URI https://management.azure.com/subscriptions/***/resourceGroups/Gatsby-Dev-Playground/providers/Microsoft.ApiManagement/service/apim-sk-220323/policies/policy?api-version=2022-04-01-preview&format=rawxml failed with status code 403. Content is '{"error":{"code":"AuthorizationFailed","message":"The client 'xxxxxxxxxxxxxxxxxxxxxxx' with object id 'xxxxxxxxxxxxxxxxxxxxxxx' does not have authorization to perform action 'Microsoft.ApiManagement/service/policies/write' over scope '/subscriptions/***/resourceGroups/Gatsby-Dev-Playground/providers/Microsoft.ApiManagement/service/apim-sk-220323/policies/policy' or the scope is invalid. If access was recently granted, please refresh your credentials."}}'.
2023-03-30T08:19:43.4249894Z          at common.HttpPipelineExtensions.Validate(Response response, Uri requestUri)
2023-03-30T08:19:43.4252338Z          at common.HttpPipelineExtensions.PutResource(HttpPipeline pipeline, Uri uri, JsonObject resource, CancellationToken cancellationToken)
2023-03-30T08:19:43.4252987Z          at publisher.Program.<>c__DisplayClass12_0.<<GetPutRestResource>b__0>d.MoveNext()
2023-03-30T08:19:43.4254367Z       --- End of stack trace from previous location ---
2023-03-30T08:19:43.4254885Z          at publisher.ServicePolicy.PutPolicy(ServicePolicyName policyName, JsonObject json, ServiceUri serviceUri, PutRestResource putRestResource, ILogger logger, CancellationToken cancellationToken)
2023-03-30T08:19:43.4255400Z          at publisher.ServicePolicy.<>c__DisplayClass6_0.<<ProcessArtifactsToPut>b__0>d.MoveNext()
2023-03-30T08:19:43.4255794Z       --- End of stack trace from previous location ---
2023-03-30T08:19:43.4256195Z          at System.Threading.Tasks.Parallel.<>c__54`1.<<ForEachAsync>b__54_0>d.MoveNext()
2023-03-30T08:19:43.4256841Z       --- End of stack trace from previous location ---
2023-03-30T08:19:43.4257270Z          at common.IAsyncEnumerableExtensions.ForEachParallel[T](IAsyncEnumerable`1 enumerable, Func`2 action, CancellationToken cancellationToken)
2023-03-30T08:19:43.4257862Z          at publisher.ServicePolicy.ProcessArtifactsToPut(IReadOnlyCollection`1 files, JsonObject configurationJson, ServiceDirectory serviceDirectory, ServiceUri serviceUri, PutRestResource putRestResource, ILogger logger, CancellationToken cancellationToken)
2023-03-30T08:19:43.4258749Z          at publisher.Service.ProcessArtifactsToPut(IReadOnlyCollection`1 files, JsonObject configurationJson, ServiceDirectory serviceDirectory, ServiceUri serviceUri, ListRestResources listRestResources, PutRestResource putRestResource, DeleteRestResource deleteRestResource, ILogger logger, CancellationToken cancellationToken)
2023-03-30T08:19:43.4259336Z          at publisher.Publisher.RunWithoutCommitId(CancellationToken cancellationToken)
2023-03-30T08:19:43.4260484Z          at publisher.Publisher.Run(CancellationToken cancellationToken)
2023-03-30T08:19:43.4260887Z          at publisher.Publisher.ExecuteAsync(CancellationToken cancellationToken)
2023-03-30T08:19:43.4261337Z          at Microsoft.Extensions.Hosting.Internal.Host.TryExecuteBackgroundServiceAsync(BackgroundService backgroundService)
2023-03-30T08:19:44.5221740Z ##[error]Running publisher failed.
At D:\a\_temp\7fd45350-9dc0-4018-a897-51d342cd82a2.ps1:10 char:28
+ if ($LASTEXITCODE -ne 0) { throw "Running publisher failed."}
+                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : OperationStopped: (Running publisher failed.:String) [], RuntimeException
+ FullyQualifiedErrorId : Running publisher failed.
2023-03-30T08:19:44.5698284Z ##[error]PowerShell exited with code '1'.
2023-03-30T08:19:44.6015540Z ##[section]Finishing: Run publisher

Expected behavior
The publisher should publish accordingly.
Actual behavior
Publisher throws error
Reproduction Steps
As mentioned in the bug description.

@arahmancsd - You're right, it looks like a permissions issue. The service principal used by your pipeline needs permissions to make changes to APIM. You can assign it the API Management Service Contributor on your APIM instance.


FAB position not exactly correct

First of all thank you for this wonderful library. I tried it and it is working great but I noticed a small bug when I am using it with almost the default settings. The fab is upper and more to the left side than most of the Google native apps (Gmail, Keep, Photos..). It seems that the margin to the edges begins from the end of the shadows instead of the exact button. When I enabled elevation (which automatically disables shadows) the fab is located correctly at the exact same spot as the Google apps.
Here is some screenshots if my explanation wasn't good enough :)
FAB with the default settings
Here is the XML code with RelativeLayout
<com.software.shell.fab.ActionButton
    android:id="@+id/action_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_marginRight="@dimen/fab_margin"
    android:layout_marginBottom="@dimen/fab_margin"
    fab:button_color="@color/fab_material_blue_500"
    fab:button_colorPressed="@color/fab_material_blue_900"
    fab:image="@drawable/fab_plus_icon"
    fab:rippleEffect_enabled="true"
    fab:show_animation="@anim/fab_scale_up"
    fab:hide_animation="@anim/fab_scale_down" />

Here is a screenshot from Gmail app

And here is a screenshot from FAB button with the same XML code but with added elevation in java code:
if (Build.VERSION.SDK_INT >=21) {
actionButton.setElevation(10);
}

Hi asbozh,
Thank you.
This is the desired behavior.
If you refer ActionButton documentation you can find there an explanation of the Shadow Responsive Effect, which is enabled by default:

Note, that having Shadow Responsive Effect enabled leads to increasing of the ActionButton general view size. In this case view size calculated based on the maximum value of the shadow radius. This means, that event if there is a place near the ActionButton unfilled, it is actually used by Shadow Responsive Effect

That is, if you have it enabled the additional margin space is added. It is used by Shadow Responsive Effect, so that when shadow is increasing (PRESSED state) these spaces are filled with shadow.
If there were no space, in case when ActionButton is pressed and Shadow Responsive Effect enabled, it will be moved in an unexpected way (instead of just increasing the shadow).
So far as there is no possibility to draw the shadow outside the View this is the only solution to implement Shadow Responsive Effect for pre-Lollipop devices.
May be in future Google will provide a more convenient way to apply elevation using compat library, but this is not yet available.
So in your case I suggest you either to disable Shadow Responsive Effect or change the offset values (like in your screens).

Thanks.


fix the styles path

related to #622

Hi @lixonic, I'm your friendly neighborhood Microsoft Pull Request Bot (You can call me MSBOT). Thanks for your contribution!
You've already signed the contribution license agreement. Thanks!
The agreement was validated by Microsoft and real humans are currently evaluating your PR.
TTYL, MSBOT;

Approved 👍
Thanks for the contribution, and for cleaning up the unnecessary spaces/tabs!

Approved
Thanks @lixonic !


[fix] url shortner for long explore url

fix #6414
@mistercrunch @michellethomas

Codecov Report

Merging #6449 into master will decrease coverage by 0.03%.
The diff coverage is 0%.

@@            Coverage Diff             @@
##           master    #6449      +/-   ##
==========================================
- Coverage   73.36%   73.33%   -0.04%
==========================================
  Files          67       67
  Lines        9584     9588       +4
==========================================
  Hits         7031     7031
- Misses       2553     2557       +4

Impacted Files
Coverage Δ

superset/views/core.py
74.74% <0%> (-0.22%)
:arrow_down:

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 8a8e840...47cb3a3. Read the comment docs.

ping @mistercrunch ?

LGTM @graceguo-supercat


Add support for rfc 2833

worked in comments from last pr, also added some tests

Hey Jim. This looks pretty good from a functional standpoint, just mostly some formatting stuff. Thanks!

I think that this looks alright. I will let it sit for a few days for any other comments, then merge if nothing comes up.


[cxx-interop] Reenable test

Additional errors were triggered due to missing availability attributes.
rdar://136620623

@swift-ci please smoke test

@swift-ci please smoke test


Implement skill sleep

Implement Summoner Sleep Skill
https://github.com/orgs/MUnique/projects/3/views/1?pane=issue&itemId=67145119
Tasks

[x] Add new stat IsAsleep
[x] Implement logic for new stat IsAsleep
[x] Update Skills initializer to fix Sleep
[x] Create update plugin to fix sleep into existing databases

I have implemented a new RandomElement class that is not being used.
We would have to analyze the best way to make the sleep have a random value for the duration of the magic effect.

Why do we need a random sleep duration? I couldn't find anything about that in the web or other server sources

True, it's not random, I was checking the source of a GS and I saw this. I noticed that it doesn't always "sleep", it has a success ratio.

How do we implement this? Is there a similar example?
On the other hand, should I delete the new RandomElement class? Or do you think it could be useful at some point?

I don't think we need the RandomElement then.
About the attack success rate: I think it could make sense to add a "Stats.SleepAttackRate" (expected value between 0 and 1) and some AttributeRelationships for that to the character class. It will require some code changes in GameLogic to apply that, too.

From what I can see, depending on whether you're attacking a monster or a player, the ratio changes. I understand that we can't manage this use case with a Stat, can we?

Oh yes, well we could add two stats for that. For example, the attack rate has one for pvp and one for pvm as well.

I was looking at the architecture of MagicEffectDefinition and I'm thinking about how to make it generic.
Many Summoner effects involve a success ratio when the "Buff" type magic is applied to the enemy.
Do you think it would be convenient to modify this class to optionally include a success ratio specification?
If so, should we use PowerUpDefinition?
On the other hand, do you think it would be interesting to extend AttributeRelationship to be able to indicate if that attribute applies under certain restrictions? For example, being able to restrict that relationship by Target.
This would allow us to modify the formula, without needing to add new "Stats".


update the reference implementation

In particular, there need to be changes made to address #38/#39 and #55. The test cases added in #68 can be used for verification against the demes-python implementation.

The linked issues have been resolved, at least as far as the reference implementation is concerned.


Oops, fix code coverage

And add comments explaining why.

Can we test this?

It's currently failing on Travis, so in some sense we already are.
(I don't understand why it wasn't caught by the presubmit, though.)

(I don't understand why it wasn't caught by the presubmit, though.)

Because we don't run overage on PRs - it takes too long.

This reduced our coverage to zero. I'm going to say that didn't fix the problem. :-)

Well, I didn't really look at it, just made tests pass again :-) I guess we need a test that coverage is not zero.

This wiki page talks about how coverage for Flutter: https://github.com/flutter/flutter/wiki/Test-coverage-for-package%3Aflutter


[Gradle plugin] add an option to fail compilation if a deprecated field is used

To improve awareness of when deprecated schema fields are used, add a configuration option to the plugin to make the build fail:
apollo {
  failOnDeprecatedFieldUsage.set(true) // defaults to false
}

On failure, display the file and line where the field is used.

Would like to have an option to have it show warnings for all usages too.
We have so many in our project that it'll take a while to fix 😔

👍  Makes sense, this was my initial thought as well but I'm not sure how widespread it is to use enums in Gradle DSL Apis:
enum class DeprecatedFieldReporting {
  IGNORE,
  WARNING,
  ERROR
}

class CompilerParams {
  val deprecatedFieldReporting: Property<DeprecatedFieldReporting>
}

Does that feel ok?

Seems ok to me :-)
Maybe also add an Info level as well?  So it just prints out stuff instead of causing warnings in case people have their builds set to "warning = fail build"...

So it just prints out stuff instead of causing warnings in case people have their builds set to "warning = fail build"...

I had project.logger.warn("") in mind for the WARNING case. Can this be configured to make the build fail? Or are there any other ways to output warnings you were thinking about?

looks like that should work for warning levels:
https://docs.gradle.org/current/userguide/logging.html#sec:sending_your_own_log_messages
But I think you have to throw a GradleException to get build to fail.  Would also be great to have some sort of standard prefix like "Deprecated GraphQL Field: xxx in file yyyy" that's consistent so it's parseable by CI scripts that build summary page like BuildKite does.


Remove a wrong assert in the specializer and enable old Collection index functions in stdlib

In case of partial specialization, the replacement type of a substitution can be generic.
I couldn't find a small unit test for this bug fix. But it is tested by compiling the stdlib with the change in Collection.swift.
This change also enables the temporarily disabled deprecated Collection index functions, which are needed for source compatibility.
rdar://problem/36033852

@swift-ci test


Fix radio button procs example in guide

There's a bug in the guide where clicking the radio button labels in the last example doesn't focus the right radio.
It's because the passed-in values are symbols rather than strings.
When a value is passed into the collection helper via a proc as a symbol, it wasn't applied properly when constructing the elements within. This could lead to inputs not having a value, labels not linking to the corresponding input and hints not describing their intended target.
This change ensures that any symbols are converted to strings and adds some tests ensuring that when symbols are supplied via procs the output is rendered properly.

[ ] Check it still works ok when HTML safe strings are passed in

Double checked that this change doesn't affect HTML-safe strings:
This input:
<%= form.govuk_collection_radio_buttons(
  :department_id,
  %i(technology sales marketing) ,
  -> (item) { item },
  -> (item) { tag.span(item.capitalize, class: %(#{item}-fancy-label)) },
  legend: { text: "Which department do you work in?" }
) %>

  <fieldset class="govuk-fieldset">
    <legend class="govuk-fieldset__legend govuk-fieldset__legend--m">Which department do you work in?</legend>

        <input id="person-department-id-technology-field" class="govuk-radios__input" type="radio" value="technology" name="person[department_id]" />
        Technology

        <input id="person-department-id-sales-field" class="govuk-radios__input" type="radio" value="sales" name="person[department_id]" />
        Sales

        <input id="person-department-id-marketing-field" class="govuk-radios__input" type="radio" value="marketing" name="person[department_id]" />
        Marketing

  </fieldset>

Everything's working as expected 😌

Double checked that this change doesn't affect HTML-safe strings:
This input:
<%= form.govuk_collection_radio_buttons(
  :department_id,
  %i(technology sales marketing) ,
  -> (item) { item },
  -> (item) { tag.span(item.capitalize, class: %(#{item}-fancy-label)) },
  legend: { text: "Which department do you work in?" }
) %>

  <fieldset class="govuk-fieldset">
    <legend class="govuk-fieldset__legend govuk-fieldset__legend--m">Which department do you work in?</legend>

        <input id="person-department-id-technology-field" class="govuk-radios__input" type="radio" value="technology" name="person[department_id]" />
        Technology

        <input id="person-department-id-sales-field" class="govuk-radios__input" type="radio" value="sales" name="person[department_id]" />
        Sales

        <input id="person-department-id-marketing-field" class="govuk-radios__input" type="radio" value="marketing" name="person[department_id]" />
        Marketing

  </fieldset>

Everything's working as expected 😌