Grant access to users to manage specific databases

Maybe I missed something in the doc but I'm unable to modify additional user permissions dynamically due to read-only storage of user configurations. there is a conflict between different permission-setting methods in the CHI manifest.
Admin user lacks sufficient privileges to modify other users' permissions.
Attempt to use admin user to modify permissions but this fails
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TABLE, DROP TABLE, ALTER TABLE,
      SHOW TABLES, SHOW COLUMNS, TRUNCATE, OPTIMIZE
ON pantry_assistant.* TO veronica;

The combination of grants and allow_databases also fails in the manifest
veronica/allow_databases/pantry_assistant: 1
veronica/grants:
  - SELECT ON pantry_assistant.*
  - INSERT ON pantry_assistant.*
  - UPDATE ON pantry_assistant.*
  - DELETE ON pantry_assistant.*

tested with this but not working
    veronica/grants:
      - SELECT ON pantry_assistant.*
      - INSERT ON pantry_assistant.*
      - ALTER ON pantry_assistant.*
      - CREATE TABLE ON pantry_assistant.*
      - DROP TABLE ON pantry_assistant.*
      - SHOW TABLES ON pantry_assistant.*
      - SHOW COLUMNS ON pantry_assistant.*
      - TRUNCATE ON pantry_assistant.*
      - OPTIMIZE ON pantry_assistant.*
      - SHOW DATABASES

so far I have this on but this is still not working
  configuration:
    users:
      admin/password: xxx
      admin/networks/ip: <IP_ADDRESS>/0
      admin/access_management: 1

      veronica/password: trapagositrurinred12r
      veronica/networks/ip: <IP_ADDRESS>/0
      veronica/profile: default
      veronica/quota: default
      veronica/allow_databases/pantry_assistant: 1
      veronica/settings/default_database: pantry_assistant

my intention is to add user veronica with full access to this one database "pantry_assistant" only so she can add/edit/remove tables within and no access to other sections of the DB. Is this doable?

Attempt to use admin user to modify permissions but this fails
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TABLE, DROP TABLE, ALTER TABLE,
     SHOW TABLES, SHOW COLUMNS, TRUNCATE, OPTIMIZE
ON pantry_assistant.* TO veronica;

XML users can't be modified with SQL RBAC commands
moreover
https://github.com/ClickHouse/ClickHouse/blob/d7c485b8abe64ea3e5883667c412ddf9c9335551/docs/en/operations/settings/settings-users.md?plain=1#L126-L145
allow_databases + grant doesn't work together this is expected behavior

tested with this but not working
   veronica/grants:
     - SELECT ON pantry_assistant.*
     - INSERT ON pantry_assistant.*
     - ALTER ON pantry_assistant.*
     - CREATE TABLE ON pantry_assistant.*
     - DROP TABLE ON pantry_assistant.*
     - SHOW TABLES ON pantry_assistant.*
     - SHOW COLUMNS ON pantry_assistant.*
     - TRUNCATE ON pantry_assistant.*
     - OPTIMIZE ON pantry_assistant.*
     - SHOW DATABASES

this should work, could you check
could you share
grep -C 10 grants -r /var/lib/clickhouse/preprocessed_configs/

yeah in theory this should work from looking at this config
nsible@lb:~$ kubectl exec -it chi-ck3-replicated-0-0-0 -n ck -- bash
Defaulted container "clickhouse-pod" out of: clickhouse-pod, clickhouse-backup
root@chi-ck3-replicated-0-0-0:/# grep -C 10 grants -r /var/lib/clickhouse/preprocessed_configs/
/var/lib/clickhouse/preprocessed_configs/config.xml-        <!-- Enables logic that users without permissive row policies can still read rows using a SELECT query.
/var/lib/clickhouse/preprocessed_configs/config.xml-             For example, if there two users A, B and a row policy is defined only for A, then
/var/lib/clickhouse/preprocessed_configs/config.xml-             if this setting is true the user B will see all rows, and if this setting is false the user B will see no rows.
/var/lib/clickhouse/preprocessed_configs/config.xml-             By default this setting is false for compatibility with earlier access configurations. -->
/var/lib/clickhouse/preprocessed_configs/config.xml-        <users_without_row_policies_can_read_rows>false</users_without_row_policies_can_read_rows>
/var/lib/clickhouse/preprocessed_configs/config.xml-
/var/lib/clickhouse/preprocessed_configs/config.xml-        <!-- By default, for backward compatibility ON CLUSTER queries ignore CLUSTER grant,
/var/lib/clickhouse/preprocessed_configs/config.xml-             however you can change this behaviour by setting this to true -->
/var/lib/clickhouse/preprocessed_configs/config.xml-        <on_cluster_queries_require_cluster_grant>false</on_cluster_queries_require_cluster_grant>
/var/lib/clickhouse/preprocessed_configs/config.xml-
/var/lib/clickhouse/preprocessed_configs/config.xml:        <!-- By default, for backward compatibility "SELECT * FROM system.<table>" doesn't require any grants and can be executed
/var/lib/clickhouse/preprocessed_configs/config.xml-             by any user. You can change this behaviour by setting this to true.
/var/lib/clickhouse/preprocessed_configs/config.xml-             If it's set to true then this query requires "GRANT SELECT ON system.<table>" just like as for non-system tables.
/var/lib/clickhouse/preprocessed_configs/config.xml-             Exceptions: a few system tables ("tables", "columns", "databases", and some constant tables like "one", "contributors")
/var/lib/clickhouse/preprocessed_configs/config.xml-             are still accessible for everyone; and if there is a SHOW privilege (e.g. "SHOW USERS") granted the corresponding system
/var/lib/clickhouse/preprocessed_configs/config.xml-             table (i.e. "system.users") will be accessible. -->
/var/lib/clickhouse/preprocessed_configs/config.xml-        <select_from_system_db_requires_grant>false</select_from_system_db_requires_grant>
/var/lib/clickhouse/preprocessed_configs/config.xml-
/var/lib/clickhouse/preprocessed_configs/config.xml:        <!-- By default, for backward compatibility "SELECT * FROM information_schema.<table>" doesn't require any grants and can be
/var/lib/clickhouse/preprocessed_configs/config.xml-             executed by any user. You can change this behaviour by setting this to true.
/var/lib/clickhouse/preprocessed_configs/config.xml-             If it's set to true then this query requires "GRANT SELECT ON information_schema.<table>" just like as for ordinary tables. -->
/var/lib/clickhouse/preprocessed_configs/config.xml-        <select_from_information_schema_requires_grant>false</select_from_information_schema_requires_grant>
/var/lib/clickhouse/preprocessed_configs/config.xml-
/var/lib/clickhouse/preprocessed_configs/config.xml-        <!-- By default, for backward compatibility a settings profile constraint for a specific setting inherit every not set field from
/var/lib/clickhouse/preprocessed_configs/config.xml-             previous profile. You can change this behaviour by setting this to true.
/var/lib/clickhouse/preprocessed_configs/config.xml-             If it's set to true then if settings profile has a constraint for a specific setting, then this constraint completely cancels all
/var/lib/clickhouse/preprocessed_configs/config.xml-             actions of previous constraint (defined in other profiles) for the same specific setting, including fields that are not set by new constraint.
/var/lib/clickhouse/preprocessed_configs/config.xml-             It also enables 'changeable_in_readonly' constraint type -->
/var/lib/clickhouse/preprocessed_configs/config.xml-        <settings_constraints_replace_previous>false</settings_constraints_replace_previous>
--
/var/lib/clickhouse/preprocessed_configs/users.xml-                <ip><IP_ADDRESS></ip>
/var/lib/clickhouse/preprocessed_configs/users.xml-                <ip><IP_ADDRESS>/0</ip>
/var/lib/clickhouse/preprocessed_configs/users.xml-            </networks>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <password_sha256_hex>921443c5e72aac9f10321d52f095edd5ed04ab8deeca8cd0eb425ad46c135c14</password_sha256_hex>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <profile>clickhouse_operator</profile>
/var/lib/clickhouse/preprocessed_configs/users.xml-        </admin>
/var/lib/clickhouse/preprocessed_configs/users.xml-
/var/lib/clickhouse/preprocessed_configs/users.xml-        <veronica>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <access_management>0</access_management>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <default_database>pantry_assistant</default_database>
/var/lib/clickhouse/preprocessed_configs/users.xml:            <grants>SHOW DATABASES</grants>
/var/lib/clickhouse/preprocessed_configs/users.xml:            <grants>SELECT,INSERT,ALTER,CREATE TABLE,DROP TABLE,TRUNCATE,OPTIMIZE ON pantry_assistant.*</grants>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <networks>
/var/lib/clickhouse/preprocessed_configs/users.xml-                <host_regexp>(chi-ck3-[^.]+\d+-\d+|clickhouse\-ck3)\.ck\.svc\.cluster\.local$</host_regexp>
/var/lib/clickhouse/preprocessed_configs/users.xml-                <ip>::1</ip>
/var/lib/clickhouse/preprocessed_configs/users.xml-                <ip><IP_ADDRESS></ip>
/var/lib/clickhouse/preprocessed_configs/users.xml-                <ip><IP_ADDRESS>/0</ip>
/var/lib/clickhouse/preprocessed_configs/users.xml-            </networks>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <password_sha256_hex>7782cdcfbd26f37ea4f93ade227e83a0bcaca996e1941ebc57430bcb32ec4f2b</password_sha256_hex>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <profile>default</profile>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <quota>default</quota>
/var/lib/clickhouse/preprocessed_configs/users.xml-        </veronica>

however
ansible@lb:~$ kubectl exec -it chi-ck3-replicated-0-0-0 -n ck -- clickhouse-client --user veronica --password xxxxx
Defaulted container "clickhouse-pod" out of: clickhouse-pod, clickhouse-backup
ClickHouse client version <IP_ADDRESS> (official build).
Connecting to localhost:9000 as user veronica.
Connected to ClickHouse server version 23.8.12 revision 54465.

Warnings:
 * Obsolete setting ['max_memory_usage_for_all_queries'] is changed. Please check 'select * from system.settings where changed and is_obsolete' and read the changelog.

chi-ck3-replicated-0-0-0.chi-ck3-replicated-0-0.ck.svc.cluster.local :) SHOW DATABASES;

SHOW DATABASES

Query id: 16300254-0256-44c2-b652-f600de4a4c80

Ok.

0 rows in set. Elapsed: 0.002 sec.

chi-ck3-replicated-0-0-0.chi-ck3-replicated-0-0.ck.svc.cluster.local :) USE pantry_assistant;

USE pantry_assistant

Query id: 3d3850a5-2d53-4851-91a1-c4d55b92b107

0 rows in set. Elapsed: 0.004 sec.

Received exception from server (version 23.8.12):
Code: 497. DB::Exception: Received from localhost:9000. DB::Exception: veronica: Not enough privileges. To execute this query, it's necessary to have the grant SHOW DATABASES ON pantry_assistant.*. (ACCESS_DENIED)

chi-ck3-replicated-0-0-0.chi-ck3-replicated-0-0.ck.svc.cluster.local :) SHOW TABLES;

SHOW TABLES

Query id: 2f4eaf2b-0064-442d-806a-9de3c4a07c4f

Ok.

0 rows in set. Elapsed: 0.003 sec.

chi-ck3-replicated-0-0-0.chi-ck3-replicated-0-0.ck.svc.cluster.local :) CREATE TABLE test (id UInt32, name String) ENGINE = MergeTree() ORDER BY id;
INSERT INTO test VALUES (1, 'Test');
SELECT * FROM test;

Syntax error (Multi-statements are not allowed): failed at position 76 (end of query) (line 1, col 76):

CREATE TABLE test (id UInt32, name String) ENGINE = MergeTree() ORDER BY id;
INSERT INTO test VALUES (1, 'Test');
SELECT * FROM test;

chi-ck3-replicated-0-0-0.chi-ck3-replicated-0-0.ck.svc.cluster.local :)

restarting pods not helping either, any idea what else can I try ?

I have the same issue. I've tried several configurations, but still has the same error.
spec:
  configuration:
    users:
      username/grants/databases/MS: 1
      username/grants:
        - SELECT ON MS.*

or
spec:
  configuration:
    users:
      username/grants/query:
        - GRANT SELECT ON MS.*

I even tried to grant permissions from another user:
spec:
  configuration:
    users:
      dev/access_management: 1
      dev/named_collection_control: 1
      dev/show_named_collections: 1
      dev/show_named_collections_secrets: 1
      dev/grants:
        - SELECT ON MS.* TO username

but every time I have the same error

2024.08.21 12:35:15.686647 [ 1 ] {}  Application: DB::Exception: Any other access control settings can't be specified with grants: while parsing user 'username' in users configuration file: while loading configuration file '/etc/clickhouse-server/users.xml'

@Philippians413 all your three variants wrong, read error message
use only
spec:
  configuration:
    user_name/grants:
     - <GRANT_NAME> ON db.table

@darioneto any news from your side?

@Slach
I specified
spec:
  configuration:
    username/grants:
      - SELECT ON MS.*

but it fails on kubectl apply step:
error: error validating "dev.yaml": error validating data: ValidationError(ClickHouseInstallation.spec.configuration): unknown field "dkt/grants" in com.altinity.clickhouse.v1.ClickHouseInstallation.spec.configuration; if you choose to ignore these errors, turn validation off with --validate=false

I've tried a lot of things, but nothing works.

@Philippians413  sorry missed users section
spec:
  configuration:
    users:
      user_name/grants:
      - <GRANT_NAME> ON db.table

@Slach I made with this configuration, but the error in the same

2024.08.22 12:01:05.460214 [ 1 ] {}  Application: DB::Exception: Any other access control settings can't be specified with grants: while parsing user 'username' in users configuration file: while loading configuration file '/etc/clickhouse-server/users.xml'

spec:
  configuration:
    users:
      username/grants:
        - SELECT ON MS.MSTABLE

@Philippians413
grep grants -C 10 -r /var/lib/clickhouse/preprocessed_configs/

sorry @Slach , been busy and missed your reply
so with the latest suggestion, I can see the use can perform selection on this
ansible@lb:~$ kubectl exec -it chi-ck3-replicated-0-0-0 -n ck -- clickhouse-client --user veronica --password xxxx
Defaulted container "clickhouse-pod" out of: clickhouse-pod, clickhouse-backup
ClickHouse client version <IP_ADDRESS> (official build).
Connecting to localhost:9000 as user veronica.
Connected to ClickHouse server version 23.8.12 revision 54465.

Warnings:
 * Obsolete setting ['max_memory_usage_for_all_queries'] is changed. Please check 'select * from system.settings where changed and is_obsolete' and read the changelog.

chi-ck3-replicated-0-0-0.chi-ck3-replicated-0-0.ck.svc.cluster.local :) SELECT currentUser(), currentDatabase();

SELECT
    currentUser(),
    currentDatabase()

Query id: d0c616cf-1270-4773-b30e-3c633c1cbbf3

┌─currentUser()─┬─currentDatabase()─┐
│ veronica      │ pantry_assistant  │
└───────────────┴───────────────────┘

however, nothing else is permitted
chi-ck3-replicated-0-0-0.chi-ck3-replicated-0-0.ck.svc.cluster.local :) SHOW DATABASES;

SHOW DATABASES

Query id: b2aec9a5-24a7-459f-8232-71eea7ae73f2

Ok.

0 rows in set. Elapsed: 0.004 sec.

chi-ck3-replicated-0-0-0.chi-ck3-replicated-0-0.ck.svc.cluster.local :)

my values settings are:
spec:
  defaults:
    templates:
      dataVolumeClaimTemplate: default
      podTemplate: clickhouse:20.7-with-backup

  configuration:
    users:
      admin/password: xxxxx
      admin/networks/ip: <IP_ADDRESS>/0
      admin/access_management: 1

      veronica/password: xxxxxx
      veronica/networks/ip: <IP_ADDRESS>/0
      veronica/profile: default
      veronica/quota: default
      veronica/access_management: 0
      veronica/default_database: pantry_assistant
      veronica/grants:
        - SHOW DATABASES
        - SHOW DATABASES,SELECT,INSERT,ALTER,CREATE TABLE,DROP TABLE,TRUNCATE,OPTIMIZE ON pantry_assistant.*
      veronica/grants/databases/pantry_assistant: 1

oot@chi-ck3-replicated-0-0-0:/# grep -C 10 grants -r /var/lib/clickhouse/preprocessed_configs/
/var/lib/clickhouse/preprocessed_configs/config.xml-        <!-- Enables logic that users without permissive row policies can still read rows using a SELECT query.
/var/lib/clickhouse/preprocessed_configs/config.xml-             For example, if there two users A, B and a row policy is defined only for A, then
/var/lib/clickhouse/preprocessed_configs/config.xml-             if this setting is true the user B will see all rows, and if this setting is false the user B will see no rows.
/var/lib/clickhouse/preprocessed_configs/config.xml-             By default this setting is false for compatibility with earlier access configurations. -->
/var/lib/clickhouse/preprocessed_configs/config.xml-        <users_without_row_policies_can_read_rows>false</users_without_row_policies_can_read_rows>
/var/lib/clickhouse/preprocessed_configs/config.xml-
/var/lib/clickhouse/preprocessed_configs/config.xml-        <!-- By default, for backward compatibility ON CLUSTER queries ignore CLUSTER grant,
/var/lib/clickhouse/preprocessed_configs/config.xml-             however you can change this behaviour by setting this to true -->
/var/lib/clickhouse/preprocessed_configs/config.xml-        <on_cluster_queries_require_cluster_grant>false</on_cluster_queries_require_cluster_grant>
/var/lib/clickhouse/preprocessed_configs/config.xml-
/var/lib/clickhouse/preprocessed_configs/config.xml:        <!-- By default, for backward compatibility "SELECT * FROM system.<table>" doesn't require any grants and can be executed
/var/lib/clickhouse/preprocessed_configs/config.xml-             by any user. You can change this behaviour by setting this to true.
/var/lib/clickhouse/preprocessed_configs/config.xml-             If it's set to true then this query requires "GRANT SELECT ON system.<table>" just like as for non-system tables.
/var/lib/clickhouse/preprocessed_configs/config.xml-             Exceptions: a few system tables ("tables", "columns", "databases", and some constant tables like "one", "contributors")
/var/lib/clickhouse/preprocessed_configs/config.xml-             are still accessible for everyone; and if there is a SHOW privilege (e.g. "SHOW USERS") granted the corresponding system
/var/lib/clickhouse/preprocessed_configs/config.xml-             table (i.e. "system.users") will be accessible. -->
/var/lib/clickhouse/preprocessed_configs/config.xml-        <select_from_system_db_requires_grant>false</select_from_system_db_requires_grant>
/var/lib/clickhouse/preprocessed_configs/config.xml-
/var/lib/clickhouse/preprocessed_configs/config.xml:        <!-- By default, for backward compatibility "SELECT * FROM information_schema.<table>" doesn't require any grants and can be
/var/lib/clickhouse/preprocessed_configs/config.xml-             executed by any user. You can change this behaviour by setting this to true.
/var/lib/clickhouse/preprocessed_configs/config.xml-             If it's set to true then this query requires "GRANT SELECT ON information_schema.<table>" just like as for ordinary tables. -->
/var/lib/clickhouse/preprocessed_configs/config.xml-        <select_from_information_schema_requires_grant>false</select_from_information_schema_requires_grant>
/var/lib/clickhouse/preprocessed_configs/config.xml-
/var/lib/clickhouse/preprocessed_configs/config.xml-        <!-- By default, for backward compatibility a settings profile constraint for a specific setting inherit every not set field from
/var/lib/clickhouse/preprocessed_configs/config.xml-             previous profile. You can change this behaviour by setting this to true.
/var/lib/clickhouse/preprocessed_configs/config.xml-             If it's set to true then if settings profile has a constraint for a specific setting, then this constraint completely cancels all
/var/lib/clickhouse/preprocessed_configs/config.xml-             actions of previous constraint (defined in other profiles) for the same specific setting, including fields that are not set by new constraint.
/var/lib/clickhouse/preprocessed_configs/config.xml-             It also enables 'changeable_in_readonly' constraint type -->
/var/lib/clickhouse/preprocessed_configs/config.xml-        <settings_constraints_replace_previous>false</settings_constraints_replace_previous>
--
/var/lib/clickhouse/preprocessed_configs/users.xml-                <ip><IP_ADDRESS></ip>
/var/lib/clickhouse/preprocessed_configs/users.xml-                <ip><IP_ADDRESS>/0</ip>
/var/lib/clickhouse/preprocessed_configs/users.xml-            </networks>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <password_sha256_hex>921443c5e72aac9f10321d52f095edd5ed04ab8deeca8cd0eb425ad46c135c14</password_sha256_hex>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <profile>clickhouse_operator</profile>
/var/lib/clickhouse/preprocessed_configs/users.xml-        </admin>
/var/lib/clickhouse/preprocessed_configs/users.xml-
/var/lib/clickhouse/preprocessed_configs/users.xml-        <veronica>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <access_management>0</access_management>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <default_database>pantry_assistant</default_database>
/var/lib/clickhouse/preprocessed_configs/users.xml:            <grants>SHOW DATABASES</grants>
/var/lib/clickhouse/preprocessed_configs/users.xml:            <grants>SHOW DATABASES,SELECT,INSERT,ALTER,CREATE TABLE,DROP TABLE,TRUNCATE,OPTIMIZE ON pantry_assistant.*</grants>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <networks>
/var/lib/clickhouse/preprocessed_configs/users.xml-                <host_regexp>(chi-ck3-[^.]+\d+-\d+|clickhouse\-ck3)\.ck\.svc\.cluster\.local$</host_regexp>
/var/lib/clickhouse/preprocessed_configs/users.xml-                <ip>::1</ip>
/var/lib/clickhouse/preprocessed_configs/users.xml-                <ip><IP_ADDRESS></ip>
/var/lib/clickhouse/preprocessed_configs/users.xml-                <ip><IP_ADDRESS>/0</ip>
/var/lib/clickhouse/preprocessed_configs/users.xml-            </networks>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <password_sha256_hex>7782cdcfbd26f37ea4f93ade227e83a0bcaca996e1941ebc57430bcb32ec4f2b</password_sha256_hex>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <profile>default</profile>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <quota>default</quota>
/var/lib/clickhouse/preprocessed_configs/users.xml-        </veronica>
root@chi-ck3-replicated-0-0-0:/#

remove access_management from yaml manifest

I removed it
Defaulted container "clickhouse-pod" out of: clickhouse-pod, clickhouse-backup
root@chi-ck3-replicated-0-0-0:/# grep -C 10 grants -r /var/lib/clickhouse/preprocessed_configs/
/var/lib/clickhouse/preprocessed_configs/config.xml-        <!-- Enables logic that users without permissive row policies can still read rows using a SELECT query.
/var/lib/clickhouse/preprocessed_configs/config.xml-             For example, if there two users A, B and a row policy is defined only for A, then
/var/lib/clickhouse/preprocessed_configs/config.xml-             if this setting is true the user B will see all rows, and if this setting is false the user B will see no rows.
/var/lib/clickhouse/preprocessed_configs/config.xml-             By default this setting is false for compatibility with earlier access configurations. -->
/var/lib/clickhouse/preprocessed_configs/config.xml-        <users_without_row_policies_can_read_rows>false</users_without_row_policies_can_read_rows>
/var/lib/clickhouse/preprocessed_configs/config.xml-
/var/lib/clickhouse/preprocessed_configs/config.xml-        <!-- By default, for backward compatibility ON CLUSTER queries ignore CLUSTER grant,
/var/lib/clickhouse/preprocessed_configs/config.xml-             however you can change this behaviour by setting this to true -->
/var/lib/clickhouse/preprocessed_configs/config.xml-        <on_cluster_queries_require_cluster_grant>false</on_cluster_queries_require_cluster_grant>
/var/lib/clickhouse/preprocessed_configs/config.xml-
/var/lib/clickhouse/preprocessed_configs/config.xml:        <!-- By default, for backward compatibility "SELECT * FROM system.<table>" doesn't require any grants and can be executed
/var/lib/clickhouse/preprocessed_configs/config.xml-             by any user. You can change this behaviour by setting this to true.
/var/lib/clickhouse/preprocessed_configs/config.xml-             If it's set to true then this query requires "GRANT SELECT ON system.<table>" just like as for non-system tables.
/var/lib/clickhouse/preprocessed_configs/config.xml-             Exceptions: a few system tables ("tables", "columns", "databases", and some constant tables like "one", "contributors")
/var/lib/clickhouse/preprocessed_configs/config.xml-             are still accessible for everyone; and if there is a SHOW privilege (e.g. "SHOW USERS") granted the corresponding system
/var/lib/clickhouse/preprocessed_configs/config.xml-             table (i.e. "system.users") will be accessible. -->
/var/lib/clickhouse/preprocessed_configs/config.xml-        <select_from_system_db_requires_grant>false</select_from_system_db_requires_grant>
/var/lib/clickhouse/preprocessed_configs/config.xml-
/var/lib/clickhouse/preprocessed_configs/config.xml:        <!-- By default, for backward compatibility "SELECT * FROM information_schema.<table>" doesn't require any grants and can be
/var/lib/clickhouse/preprocessed_configs/config.xml-             executed by any user. You can change this behaviour by setting this to true.
/var/lib/clickhouse/preprocessed_configs/config.xml-             If it's set to true then this query requires "GRANT SELECT ON information_schema.<table>" just like as for ordinary tables. -->
/var/lib/clickhouse/preprocessed_configs/config.xml-        <select_from_information_schema_requires_grant>false</select_from_information_schema_requires_grant>
/var/lib/clickhouse/preprocessed_configs/config.xml-
/var/lib/clickhouse/preprocessed_configs/config.xml-        <!-- By default, for backward compatibility a settings profile constraint for a specific setting inherit every not set field from
/var/lib/clickhouse/preprocessed_configs/config.xml-             previous profile. You can change this behaviour by setting this to true.
/var/lib/clickhouse/preprocessed_configs/config.xml-             If it's set to true then if settings profile has a constraint for a specific setting, then this constraint completely cancels all
/var/lib/clickhouse/preprocessed_configs/config.xml-             actions of previous constraint (defined in other profiles) for the same specific setting, including fields that are not set by new constraint.
/var/lib/clickhouse/preprocessed_configs/config.xml-             It also enables 'changeable_in_readonly' constraint type -->
/var/lib/clickhouse/preprocessed_configs/config.xml-        <settings_constraints_replace_previous>false</settings_constraints_replace_previous>
--
/var/lib/clickhouse/preprocessed_configs/users.xml-                <ip><IP_ADDRESS></ip>
/var/lib/clickhouse/preprocessed_configs/users.xml-                <ip><IP_ADDRESS>/0</ip>
/var/lib/clickhouse/preprocessed_configs/users.xml-            </networks>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <password_sha256_hex>921443c5e72aac9f10321d52f095edd5ed04ab8deeca8cd0eb425ad46c135c14</password_sha256_hex>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <profile>default</profile>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <quota>default</quota>
/var/lib/clickhouse/preprocessed_configs/users.xml-        </admin>
/var/lib/clickhouse/preprocessed_configs/users.xml-
/var/lib/clickhouse/preprocessed_configs/users.xml-        <veronica>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <default_database>pantry_assistant</default_database>
/var/lib/clickhouse/preprocessed_configs/users.xml:            <grants>SHOW DATABASES</grants>
/var/lib/clickhouse/preprocessed_configs/users.xml:            <grants>SHOW DATABASES,SELECT,INSERT,ALTER,CREATE TABLE,DROP TABLE,TRUNCATE,OPTIMIZE ON pantry_assistant.*</grants>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <networks>
/var/lib/clickhouse/preprocessed_configs/users.xml-                <host_regexp>(chi-ck3-[^.]+\d+-\d+|clickhouse\-ck3)\.ck\.svc\.cluster\.local$</host_regexp>
/var/lib/clickhouse/preprocessed_configs/users.xml-                <ip>::1</ip>
/var/lib/clickhouse/preprocessed_configs/users.xml-                <ip><IP_ADDRESS></ip>
/var/lib/clickhouse/preprocessed_configs/users.xml-                <ip><IP_ADDRESS>/0</ip>
/var/lib/clickhouse/preprocessed_configs/users.xml-            </networks>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <password_sha256_hex>7782cdcfbd26f37ea4f93ade227e83a0bcaca996e1941ebc57430bcb32ec4f2b</password_sha256_hex>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <profile>default</profile>
/var/lib/clickhouse/preprocessed_configs/users.xml-            <quota>default</quota>
/var/lib/clickhouse/preprocessed_configs/users.xml-        </veronica>

and still the same
SHOW DATABASES

Query id: bb1b7779-0965-4cf5-919a-a3992c6d792a

Ok.

0 rows in set. Elapsed: 0.007 sec.

chi-ck3-replicated-0-0-0.chi-ck3-replicated-0-0.ck.svc.cluster.local :) show tables

SHOW TABLES

Query id: b0ba79f7-fdd6-4ac7-be33-e8a42fa81066

Ok.

0 rows in set. Elapsed: 0.004 sec.

chi-ck3-replicated-0-0-0.chi-ck3-replicated-0-0.ck.svc.cluster.local :) create table test;

CREATE TABLE test

Query id: ae13b649-b50a-43a7-a363-1d58889838c8

0 rows in set. Elapsed: 0.027 sec.

Received exception from server (version 23.8.12):
Code: 497. DB::Exception: Received from localhost:9000. DB::Exception: veronica: Not enough privileges. To execute this query, it's necessary to have the grant CREATE TABLE ON pantry_assistant.test. (ACCESS_DENIED)

current manifest
spec:
  defaults:
    templates:
      dataVolumeClaimTemplate: default
      podTemplate: clickhouse:20.7-with-backup

  configuration:
    users:
      admin/password: xxxx
      admin/networks/ip: <IP_ADDRESS>/0
      # admin/access_management: 1

      veronica/password: xxxx
      veronica/networks/ip: <IP_ADDRESS>/0
      veronica/profile: default
      veronica/quota: default
      # veronica/access_management: 0
      veronica/default_database: pantry_assistant
      veronica/grants:
        - SHOW DATABASES
        - SHOW DATABASES,SELECT,INSERT,ALTER,CREATE TABLE,DROP TABLE,TRUNCATE,OPTIMIZE ON pantry_assistant.*
      veronica/grants/databases/pantry_assistant: 1

@darioneto not sure if it helps, but in my case, this didn’t work:
    metabase/grants:
      - GRANT SELECT ON default.*
      - GRANT SELECT ON metrics.*

but this worked:
    metabase/grants/query:
      - GRANT SELECT ON default.*
      - GRANT SELECT ON metrics.*


Broken reference to sokol submodule

https://github.com/pplux/sokol/tree/c07c12b1eac7fe56ca28c81bf88fb039dbdb7375

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Local commit not pushed yet?

To reproduce:
git clone https://github.com/pplux/imgui-app.git
cd imgui-app
git submodule update --init --recursive

Got error:
fatal: reference is not a tree: c07c12b1eac7fe56ca28c81bf88fb039dbdb7375
Unable to checkout 'c07c12b1eac7fe56ca28c81bf88fb039dbdb7375' in submodule path 'sokol'

I'm using ubuntu 16.04, maybe it's my problem (as mentioned here: https://stackoverflow.com/questions/2155887/git-submodule-head-reference-is-not-a-tree-error).


Exoplayer giving exception- android.media.MediaCodec$CodecException: Error 0xfffffff4,

Giving these exception and errors while loading multiple videos in list and play one by one. Please provide or update this library for this issue.
I/OplusFeedbackInfo(28663): [sendFeedbackInfo:L309]  send:MM_FB_EventID#21001#ClientPid#28663#ReportLevel#0#timeUsage#0#videoComponent#OMX.qcom.video.decoder.avc#videoHeight#768#videoMime#video/avc#videoWidth#432
D/AtlasEventUploadUtils(28663): setEvent event:atlas_event_atlasserver_feedback
W/MediaCodecRenderer(28663): Failed to initialize decoder: OMX.qcom.video.decoder.avc
W/MediaCodecRenderer(28663):   android.media.MediaCodec$CodecException: Error 0xfffffff4
W/MediaCodecRenderer(28663):       at android.media.MediaCodec.native_configure(Native Method)
W/MediaCodecRenderer(28663):       at android.media.MediaCodec.configure(MediaCodec.java:2176)
W/MediaCodecRenderer(28663):       at android.media.MediaCodec.configure(MediaCodec.java:2092)
W/MediaCodecRenderer(28663):       at com.google.android.exoplayer2.mediacodec.AsynchronousMediaCodecAdapter.initialize(AsynchronousMediaCodecAdapter.java:156)
W/MediaCodecRenderer(28663):       at com.google.android.exoplayer2.mediacodec.AsynchronousMediaCodecAdapter.access$100(AsynchronousMediaCodecAdapter.java:50)
W/MediaCodecRenderer(28663):       at com.google.android.exoplayer2.mediacodec.AsynchronousMediaCodecAdapter$Factory.createAdapter(AsynchronousMediaCodecAdapter.java:103)
W/MediaCodecRenderer(28663):       at com.google.android.exoplayer2.mediacodec.DefaultMediaCodecAdapterFactory.createAdapter(DefaultMediaCodecAdapterFactory.java:108)
W/MediaCodecRenderer(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodec(MediaCodecRenderer.java:1108)
W/MediaCodecRenderer(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:1019)
W/MediaCodecRenderer(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecOrBypass(MediaCodecRenderer.java:546)
W/MediaCodecRenderer(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1450)
W/MediaCodecRenderer(28663):       at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:877)
W/MediaCodecRenderer(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readSourceOmittingSampleData(MediaCodecRenderer.java:963)
W/MediaCodecRenderer(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:779)
W/MediaCodecRenderer(28663):       at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:989)
W/MediaCodecRenderer(28663):       at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:490)
W/MediaCodecRenderer(28663):       at android.os.Handler.dispatchMessage(Handler.java:102)
W/MediaCodecRenderer(28663):       at android.os.Looper.loopOnce(Looper.java:238)
W/MediaCodecRenderer(28663):       at android.os.Looper.loop(Looper.java:349)
W/MediaCodecRenderer(28663):       at android.os.HandlerThread.run(HandlerThread.java:67)
E/MediaCodecVideoRenderer(28663): Video codec error
E/MediaCodecVideoRenderer(28663):   com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.qcom.video.decoder.avc, Format(1, null, null, video/avc, avc1.64000A, -1, null, [432, 768, 28.372639], [-1, -1])
E/MediaCodecVideoRenderer(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:1030)
E/MediaCodecVideoRenderer(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecOrBypass(MediaCodecRenderer.java:546)
E/MediaCodecVideoRenderer(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1450)
E/MediaCodecVideoRenderer(28663):       at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:877)
E/MediaCodecVideoRenderer(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readSourceOmittingSampleData(MediaCodecRenderer.java:963)
E/MediaCodecVideoRenderer(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:779)
E/MediaCodecVideoRenderer(28663):       at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:989)
E/MediaCodecVideoRenderer(28663):       at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:490)
E/MediaCodecVideoRenderer(28663):       at android.os.Handler.dispatchMessage(Handler.java:102)
E/MediaCodecVideoRenderer(28663):       at android.os.Looper.loopOnce(Looper.java:238)
E/MediaCodecVideoRenderer(28663):       at android.os.Looper.loop(Looper.java:349)
E/MediaCodecVideoRenderer(28663):       at android.os.HandlerThread.run(HandlerThread.java:67)
E/MediaCodecVideoRenderer(28663):   Caused by: android.media.MediaCodec$CodecException: Error 0xfffffff4
E/MediaCodecVideoRenderer(28663):       at android.media.MediaCodec.native_configure(Native Method)
E/MediaCodecVideoRenderer(28663):       at android.media.MediaCodec.configure(MediaCodec.java:2176)
E/MediaCodecVideoRenderer(28663):       at android.media.MediaCodec.configure(MediaCodec.java:2092)
E/MediaCodecVideoRenderer(28663):       at com.google.android.exoplayer2.mediacodec.AsynchronousMediaCodecAdapter.initialize(AsynchronousMediaCodecAdapter.java:156)
E/MediaCodecVideoRenderer(28663):       at com.google.android.exoplayer2.mediacodec.AsynchronousMediaCodecAdapter.access$100(AsynchronousMediaCodecAdapter.java:50)
E/MediaCodecVideoRenderer(28663):       at com.google.android.exoplayer2.mediacodec.AsynchronousMediaCodecAdapter$Factory.createAdapter(AsynchronousMediaCodecAdapter.java:103)
E/MediaCodecVideoRenderer(28663):       at com.google.android.exoplayer2.mediacodec.DefaultMediaCodecAdapterFactory.createAdapter(DefaultMediaCodecAdapterFactory.java:108)
E/MediaCodecVideoRenderer(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodec(MediaCodecRenderer.java:1108)
E/MediaCodecVideoRenderer(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:1019)
E/MediaCodecVideoRenderer(28663):       ... 11 more
E/ExoPlayerImplInternal(28663): Playback error
E/ExoPlayerImplInternal(28663):   com.google.android.exoplayer2.ExoPlaybackException: MediaCodecVideoRenderer error, index=0, format=Format(1, null, null, video/avc, avc1.64000A, -1, null, [432, 768, 28.372639], [-1, -1]), format_supported=YES
E/ExoPlayerImplInternal(28663):       at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:566)
E/ExoPlayerImplInternal(28663):       at android.os.Handler.dispatchMessage(Handler.java:102)
E/ExoPlayerImplInternal(28663):       at android.os.Looper.loopOnce(Looper.java:238)
E/ExoPlayerImplInternal(28663):       at android.os.Looper.loop(Looper.java:349)
E/ExoPlayerImplInternal(28663):       at android.os.HandlerThread.run(HandlerThread.java:67)
E/ExoPlayerImplInternal(28663):   Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.qcom.video.decoder.avc, Format(1, null, null, video/avc, avc1.64000A, -1, null, [432, 768, 28.372639], [-1, -1])
E/ExoPlayerImplInternal(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:1030)
E/ExoPlayerImplInternal(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecOrBypass(MediaCodecRenderer.java:546)
E/ExoPlayerImplInternal(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1450)
E/ExoPlayerImplInternal(28663):       at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:877)
E/ExoPlayerImplInternal(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readSourceOmittingSampleData(MediaCodecRenderer.java:963)
E/ExoPlayerImplInternal(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:779)
E/ExoPlayerImplInternal(28663):       at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:989)
E/ExoPlayerImplInternal(28663):       at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:490)
E/ExoPlayerImplInternal(28663):       ... 4 more
E/ExoPlayerImplInternal(28663):   Caused by: android.media.MediaCodec$CodecException: Error 0xfffffff4
E/ExoPlayerImplInternal(28663):       at android.media.MediaCodec.native_configure(Native Method)
E/ExoPlayerImplInternal(28663):       at android.media.MediaCodec.configure(MediaCodec.java:2176)
E/ExoPlayerImplInternal(28663):       at android.media.MediaCodec.configure(MediaCodec.java:2092)
E/ExoPlayerImplInternal(28663):       at com.google.android.exoplayer2.mediacodec.AsynchronousMediaCodecAdapter.initialize(AsynchronousMediaCodecAdapter.java:156)
E/ExoPlayerImplInternal(28663):       at com.google.android.exoplayer2.mediacodec.AsynchronousMediaCodecAdapter.access$100(AsynchronousMediaCodecAdapter.java:50)
E/ExoPlayerImplInternal(28663):       at com.google.android.exoplayer2.mediacodec.AsynchronousMediaCodecAdapter$Factory.createAdapter(AsynchronousMediaCodecAdapter.java:103)
E/ExoPlayerImplInternal(28663):       at com.google.android.exoplayer2.mediacodec.DefaultMediaCodecAdapterFactory.createAdapter(DefaultMediaCodecAdapterFactory.java:108)
E/ExoPlayerImplInternal(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodec(MediaCodecRenderer.java:1108)
E/ExoPlayerImplInternal(28663):       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:1019)
E/ExoPlayerImplInternal(28663):       ... 11 more
D/OplusACodec(28663): ~OplusACodec [212]:

[✓] Flutter (Channel stable, 3.3.10, on macOS 11.6.1 20G224 darwin-x64, locale
    en-GB)
    • Flutter version 3.3.10 on channel stable at /Volumes/SSDDATADRIVE/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 135454af32 (4 weeks ago), 2022-12-15 07:36:55 -0800
    • Engine revision 3316dd8728
    • Dart version 2.18.6
    • DevTools version 2.15.0

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/kaif/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0
    • Java binary at: /Applications/Android
      Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.0)
    • Xcode at /Volumes/data drive/Xcode.app/Contents/Developer
    • Build 13A233
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2020.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165)

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-x64     • macOS 11.6.1 20G224 darwin-x64
    • Chrome (web)    • chrome • web-javascript • Google Chrome 108.0.5359.124

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

Hello @Sayedmdkaif. Thank you for filing this issue. Can you please provide the following information?

A complete and minimal, reproducible example. Ideally, a single main.dart file that can be run directly.
The output of flutter doctor -v
The output of flutter run -v

Please provide the information in the form of text. See how to make collapsible sections with Markdown here.

Hello,
please find the above information with following files.
The main files of my app is Feedpage. In this dart file i have used
autoplay videos with this library inview_notifier_list.
I have three types of post in this feedpage it can be image,network video
and youtube video. Problem is coming in loading network videos.
On Mon, Jan 9, 2023 at 6:29 PM Nabeel Parkar @.***>
wrote:

Hello @Sayedmdkaif https://github.com/Sayedmdkaif. Thank you for filing
this issue. Can you please provide the following information?

A complete and minimal, reproducible example
https://stackoverflow.com/help/minimal-reproducible-example.
Ideally, a single main.dart file that can be run directly.
The output of flutter doctor -v
The output of flutter run -v

Please provide the information in the form of text. See how to make
collapsible sections with Markdown here
https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/organizing-information-with-collapsed-sections
.
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/118170#issuecomment-1375588351,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGPNLJEWMSFLE25UKYLCH5DWRQDUZANCNFSM6AAAAAATVDZU7M
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Thanks & Regards
Mohd. Kaif

Hey @Sayedmdkaif. I would need a complete and minimal code sample to verify the issue. Please provide a code sample so that I may take the issue further

I have used this AutoplayVIdeoWIdget.dart file in the following listview.
Widget showGlobalPostListGrid() {
var key = RandomInt.generate(max: 50);
log('kaifKey$key');
return Container(
  margin: const EdgeInsets.only(
    left: 10,
    right: 10,
  ),
  child: GridView.custom(

//cacheExtent: 9999,
primary: false,
shrinkWrap: true,
gridDelegate: SliverWovenGridDelegate.count(
crossAxisCount: 2, //no. of columns
/* mainAxisSpacing: 4,// vertical item spacing
crossAxisSpacing: 4,// horizontal item spacing*/
pattern: [
const WovenGridTile(1.2 / 1.7),
const WovenGridTile(
1.4 / 2.6,
crossAxisRatio: 0.9,
alignment: AlignmentDirectional.topCenter,
),
],
),
childrenDelegate: SliverChildBuilderDelegate(
addAutomaticKeepAlives: false,
addRepaintBoundaries: false,
      (context, index) => ,
      childCount: feedController.timelineList.length,
    ),
  ),
);

}
On Mon, Jan 9, 2023 at 7:45 PM Nabeel Parkar @.***>
wrote:

Hey @Sayedmdkaif https://github.com/Sayedmdkaif. I would need a
complete and minimal code sample to verify the issue. Please provide a code
sample so that I may take the issue further
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/118170#issuecomment-1375687355,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGPNLJCTJFTCOMBIEJBP7NLWRQMOVANCNFSM6AAAAAATVDZU7M
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Thanks & Regards
Mohd. Kaif

Or i have prepare same code file you can go through it.
This is the api i am using to fetch the post for feedpage.
http://<IP_ADDRESS>:5000/timelinePosts/0
headers-(send headers )
Authorization-Bearer
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpbiI6ImtodXNoYnVraGFuMThkZWNAZ21haWwuY29tIiwiaWQiOiIyIiwiaWF0IjoxNjczMjQwNjY0LCJleHAiOjE2MzU0OTcyNDA2NjR9.fZlZk553Svm_HW1TAs4WSZ9oHWairwAdkhHyY5Dw6qE
On Tue, Jan 10, 2023 at 9:57 AM Md Kaif @.***> wrote:

I have used this AutoplayVIdeoWIdget.dart file in the following listview.
Widget showGlobalPostListGrid() {
var key = RandomInt.generate(max: 50);
log('kaifKey$key');
return Container(
  margin: const EdgeInsets.only(
    left: 10,
    right: 10,
  ),
  child: GridView.custom(

//cacheExtent: 9999,
primary: false,
shrinkWrap: true,
gridDelegate: SliverWovenGridDelegate.count(
crossAxisCount: 2, //no. of columns
/* mainAxisSpacing: 4,// vertical item spacing
crossAxisSpacing: 4,// horizontal item spacing*/
pattern: [
const WovenGridTile(1.2 / 1.7),
const WovenGridTile(
1.4 / 2.6,
crossAxisRatio: 0.9,
alignment: AlignmentDirectional.topCenter,
),
],
),
childrenDelegate: SliverChildBuilderDelegate(
addAutomaticKeepAlives: false,
addRepaintBoundaries: false,
      (context, index) => ,
      childCount: feedController.timelineList.length,
    ),
  ),
);

}
On Mon, Jan 9, 2023 at 7:45 PM Nabeel Parkar @.***>
wrote:

Hey @Sayedmdkaif https://github.com/Sayedmdkaif. I would need a
complete and minimal code sample to verify the issue. Please provide a code
sample so that I may take the issue further
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/118170#issuecomment-1375687355,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGPNLJCTJFTCOMBIEJBP7NLWRQMOVANCNFSM6AAAAAATVDZU7M
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Thanks & Regards
Mohd. Kaif

--
Thanks & Regards
Mohd. Kaif

Hi @Sayedmdkaif
For the issue to be workable, it needs to be reproducible with a completed and minimal reproducible code sample that doesn’t include 3rd party plugins or complex production code. (please access that url and see how to create a such sample code)

I have created a TestScreen file for your. You can go through this file. In
this page i have used third party library that is for refreshing the
listview
On Tue, Jan 10, 2023 at 2:51 PM huycozy @.***> wrote:

Hi @Sayedmdkaif https://github.com/Sayedmdkaif
For the issue to be workable, it needs to be reproducible with a completed
and minimal reproducible code sample
https://stackoverflow.com/help/minimal-reproducible-example that
doesn’t include 3rd party plugins or complex production code. (please
access that url and see how to create a such sample code)
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/118170#issuecomment-1376957619,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGPNLJEDT5WKWRVT5WLVMIDWRUS3DANCNFSM6AAAAAATVDZU7M
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Thanks & Regards
Mohd. Kaif

Hello hope you are doing well.
I hope you are looking this issues.
On Tue, Jan 10, 2023 at 3:42 PM Md Kaif @.***> wrote:

I have created a TestScreen file for your. You can go through this file.
In this page i have used third party library that is for refreshing the
listview
On Tue, Jan 10, 2023 at 2:51 PM huycozy @.***> wrote:

Hi @Sayedmdkaif https://github.com/Sayedmdkaif
For the issue to be workable, it needs to be reproducible with a completed
and minimal reproducible code sample
https://stackoverflow.com/help/minimal-reproducible-example that
doesn’t include 3rd party plugins or complex production code. (please
access that url and see how to create a such sample code)
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/118170#issuecomment-1376957619,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGPNLJEDT5WKWRVT5WLVMIDWRUS3DANCNFSM6AAAAAATVDZU7M
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Thanks & Regards
Mohd. Kaif

--
Thanks & Regards
Mohd. Kaif

@Sayedmdkaif It seems you forgot to attach that file here so I don't see it. However, you may want to refer to Creating and highlighting code blocks for better format sample code rather than attaching a file. And the sample code should be minimal and completed so that we may verify it. Thank you!

Hello please have a look of  sample code
Widget showDataList() {
return customList(
itemSpace: 15.0,
shrinkWrap: false,
physics: const BouncingScrollPhysics(),
axis: Axis.vertical,
list: feedController.timelineList,
child: (data, i) {
return Container(
height: 150,
width: screenWidth(context),
margin: 15.marginAll(),
child: Stack(
children: [
AutoPlayVideoWidget(
selectedIndex: selectedIndex,
key: ObjectKey(feedController.timelineList[i].id!),
url: feedController.timelineList[i].contentUrl!,
updatePostCallbackFunction: updatePostCallbackFunction,
index: i,
play: true,
thumbnail: feedController.timelineList[i].thumbnail!,
postId: feedController.timelineList[i].id!,
)  ,
        ],
      ),
    );
  });

}
class _VideoWidgetState extends State {
VideoPlayerController? _controller;
Future? _initializeVideoPlayerFuture;
var videoEnded = false;
@override
void initState() {
super.initState();
printLog('videoUrl_'+widget.url!);

_controller = VideoPlayerController.network(widget.url!);
_initializeVideoPlayerFuture = _controller!.initialize().then((_) {
  setState(() {
    printLog('videoStatus'+widget.play.toString()+"

"+widget.index.toString());
    if (widget.play!) {
      _controller!.setVolume(1.0);
      _controller!.play();

    }

  });
});

}
@override
void dispose() {
_controller!.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: _initializeVideoPlayerFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return Stack(children: [
GestureDetector(
                onTap: ()  {
                  _controller!.pause();
                  Navigator.push(
                      context,
                      MaterialPageRoute(
                          builder: (BuildContext context) =>

ViewFullPostScreen(videoPlayerController:
_controller,updatePostCallbackFunction:widget.updatePostCallbackFunction,index:widget.index,from:Strings.video2,mediaURL:widget.url!,postId:
widget.postId!)));
},
child:VideoPlayer(_controller!)),
          ]);
        } else {
          return Stack(
            children: const [

               Center(
                child: CircularProgressIndicator(),
              ),
            ],
          );
      }}
    );

}
On Wed, Jan 11, 2023 at 10:06 AM huycozy @.***> wrote:

@Sayedmdkaif https://github.com/Sayedmdkaif It seems you forgot to
attach that file here so I don't see it. However, you may want to refer to Creating
and highlighting code blocks
https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-and-highlighting-code-blocks
for better format sample code rather than attaching a file. And the sample
code should be minimal and completed so that we may verify it. Thank you!
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/118170#issuecomment-1378230697,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGPNLJEOWDF34ATKOZOA4VTWRY2FFANCNFSM6AAAAAATVDZU7M
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Thanks & Regards
Mohd. Kaif

Hello @Sayedmdkaif. Looks like your code sample is missing some code. Please be sure to include a complete sample, that can be directly run when copied into a blank main.dart file. Please read about complete and minimal, reproducible code samples for more information about this

hello, please find the complete example code that can be directly run .
import 'dart:convert';
import 'dart:developer';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
Future main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: TestScreen(),
);
}
}
class TestScreen extends StatefulWidget {
const TestScreen({
Key? key,
}) : super(key: key);
@override
_TestScreenState createState() => _TestScreenState();
}
class _TestScreenState extends State {
List timelineList = [];
@override
void initState() {
super.initState();
fetchDataFromAPi();
}
fetchDataFromAPi() async {
try {
Response response = await Dio().get("http://<IP_ADDRESS>:5000/posts",
options: Options(
headers: {
'Authorization':
'Bearer
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpbiI6ImtodXNoYnVraGFuMThkZWNAZ21haWwuY29tIiwiaWQiOiIyIiwiaWF0IjoxNjczMjQwNjY0LCJleHAiOjE2MzU0OTcyNDA2NjR9.fZlZk553Svm_HW1TAs4WSZ9oHWairwAdkhHyY5Dw6qE'
},
));
  //   printLog('ApiRes$response');

  Map<String, dynamic> userdata = json.decode(response.toString());
  var dataResponse = FetchPostModal.fromJson(userdata);
  log('apieResponse_${dataResponse.status}');
  log('apieResponse_${dataResponse.data!.length}');
  if (dataResponse.status == 1) {
    if (timelineList.isNotEmpty) {
      timelineList.clear();
    }

    for (int i = 0; i < dataResponse.data!.length; i++) {
      if (dataResponse.data![i].contentType == 'video') {
        timelineList.add(dataResponse.data![i]);
      }
    }

    setState(() {});
  }
} catch (error) {
  log('apiError$error');
}

}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Column(
children: [
Expanded(
child: timelineList.isNotEmpty ? showDataList() : const SizedBox(),
)
],
)),
);
}
Widget showDataList() {
return customList(
itemSpace: 15.0,
shrinkWrap: false,
physics: const BouncingScrollPhysics(),
axis: Axis.vertical,
list: timelineList,
child: (data, i) {
return Container(
height: 300,
width: double.infinity,
margin:const EdgeInsets.all(15.0),
child: Stack(
children: [
AutoPlayVideoWidget(
key: ObjectKey(timelineList[i].id!),
url: timelineList[i].contentUrl!,
updatePostCallbackFunction: null,
index: i,
play: true,
thumbnail: timelineList[i].thumbnail!,
postId: timelineList[i].id!,
),
],
),
);
});
}
}
class FetchPostModal {
FetchPostModal({
this.status,
this.data,
});
int? status;
List? data;
factory FetchPostModal.fromJson(Map<String, dynamic> json) => FetchPostModal(
status: json["status"],
data: List.from(json["data"].map((x) => Datum.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"status": status,
"data": List.from(data!.map((x) => x.toJson())),
};
}
class Datum {
Datum({
this.text,
this.followee,
this.restrict,
this.request,
this.liked,
this.saved,
this.comment,
this.id,
this.contentUrl,
this.thumbnail,
this.contentType,
this.userId,
this.user,
this.likeCount,
this.comCount,
this.createdAt,
});
String? text;
bool? request;
bool? followee;
bool? restrict;
bool? liked;
bool? saved;
bool? comment;
int? id;
String? contentUrl;
String? thumbnail;
String? contentType;
String? createdAt;
int? userId;
UserFetchPost? user;
LikeCommentCount? likeCount;
LikeCommentCount? comCount;
factory Datum.fromJson(Map<String, dynamic> json) => Datum(
text: json["text"],
request: json["request"],
followee: json["followee"],
restrict: json["restrict"],
liked: json["liked"],
saved: json["saved"],
comment: json["comment"],
id: json["id"],
contentUrl: json["contentUrl"],
thumbnail: json["thumbnail"],
createdAt: json["createdAt"],
contentType: json["contentType"],
likeCount: LikeCommentCount.fromJson(json["likeCount"]),
comCount: LikeCommentCount.fromJson(json["comCount"]),
userId: json["userId"],
user: UserFetchPost.fromJson(json["user"]),
);
Map<String, dynamic> toJson() => {
"text": text,
"restrict": restrict,
"followee": followee,
"request": request,
"liked": liked,
"saved": saved,
"comment": comment,
"id": id,
"contentUrl": contentUrl,
"thumbnail": thumbnail,
"createdAt": createdAt,
"contentType": contentType,
"likeCount": likeCount?.toJson(),
"comCount": comCount?.toJson(),
"userId": userId,
"user": user?.toJson(),
};
}
class LikeCommentCount {
LikeCommentCount({
this.count,
});
int? count;
factory LikeCommentCount.fromJson(Map<String, dynamic> json) =>
LikeCommentCount(
count: json["count"],
);
Map<String, dynamic> toJson() => {
"count": count,
};
}
class UserFetchPost {
UserFetchPost({
this.userId,
this.fullName,
this.profilePicture,
this.status,
this.commentStatus,
this.tagStatus,
});
int? userId;
String? fullName;
String? profilePicture;
String? status;
String? commentStatus;
String? tagStatus;
factory UserFetchPost.fromJson(Map<String, dynamic> json) => UserFetchPost(
userId: json["userId"],
fullName: json["fullname"],
profilePicture: json["profilePicture"],
commentStatus: json["commentStatus"],
tagStatus: json["tagStatus"],
);
Map<String, dynamic> toJson() => {
"userId": userId,
"fullname": fullName,
"profilePicture": profilePicture,
"commentStatus": commentStatus,
"tagStatus": tagStatus,
};
}
class User {
User({
this.userId,
this.fullName,
this.profilePicture,
});
int? userId;
String? fullName;
String? profilePicture;
factory User.fromJson(Map<String, dynamic> json) => User(
userId: json["userId"],
fullName: json["fullname"],
profilePicture: json["profilePicture"],
);
Map<String, dynamic> toJson() => {
"userId": userId,
"fullname": fullName,
"profilePicture": profilePicture,
};
}
Widget customList(
{required Widget Function(T, int) child,
List list = const [],
double itemSpace = 16,
ScrollPhysics? physics,
String? key,
required bool shrinkWrap,
bool? primary,
ScrollController? scrollController,
EdgeInsets padding = const EdgeInsets.all(0.0),
Axis axis = Axis.vertical}) {
return ListView.separated(
padding: padding,
cacheExtent: 9999,
addAutomaticKeepAlives: false,
addRepaintBoundaries: false,
controller: scrollController,
shrinkWrap: shrinkWrap,
primary: primary,
physics: physics ?? const BouncingScrollPhysics(),
scrollDirection: axis,
separatorBuilder: (context, index) => SizedBox(
width: axis == Axis.vertical ? 0 : itemSpace,
height: axis == Axis.horizontal ? 0 : itemSpace,
),
itemBuilder: (context, index) =>
Container(child: child(list[index], index)),
itemCount: list.length,
);
}
class AutoPlayVideoWidget extends StatefulWidget {
final String? url;
final String? thumbnail;
final bool? play;
final int? postId;
final int? index;
final Function? updatePostCallbackFunction;
const AutoPlayVideoWidget({Key? key,  @required
@.*** this.index, @required
this.url, @required this.thumbnail, @required @.***
this.postId}) : super(key: key);
@override
State createState() => _VideoWidgetState();
}
class _VideoWidgetState extends State {
VideoPlayerController? _controller;
Future? _initializeVideoPlayerFuture;
var videoEnded = false;
@override
void initState() {
super.initState();
log('videoUrl_'+widget.url!);

_controller = VideoPlayerController.network(widget.url!);
_initializeVideoPlayerFuture = _controller!.initialize().then((_) {
  setState(() {
    log('videoStatus'+widget.play.toString()+" "+widget.index.toString());

    if (widget.play!) {
      _controller!.setVolume(1.0);
      _controller!.play();

        _controller!.setVolume(1.0);

    }
    _controller?.addListener(checkVideo);
    //}

  });
});

}
void checkVideo() {
if (_controller!.value.position ==
const Duration(seconds: 0, minutes: 0, hours: 0)) {
log('video Started');
}
if (_controller!.value.position == _controller!.value.duration) {
  log('video Ended');

}

}
@override
void didUpdateWidget(AutoPlayVideoWidget oldWidget) {
if (oldWidget.play != widget.play) {
if (widget.play!) {
_controller!.play();
} else {
_controller!.pause();
}
}
super.didUpdateWidget(oldWidget);
}
@override
void dispose() {
log('disposecalled');
_controller!.dispose();
videoEnded=false;
super.dispose();
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: _initializeVideoPlayerFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return Stack(children: [
VideoPlayer(_controller!),
        ]);
      } else {
        return const Center(
          child: CircularProgressIndicator(),
        );
      }}
);

}
}
On Wed, Jan 11, 2023 at 4:22 PM Nabeel Parkar @.***>
wrote:

Hello @Sayedmdkaif https://github.com/Sayedmdkaif. Looks like your code
sample is missing some code. Please be sure to include a complete sample,
that can be directly run when copied into a blank main.dart file. Please
read about complete and minimal, reproducible code samples
https://stackoverflow.com/help/minimal-reproducible-example for more
information about this
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/118170#issuecomment-1378566326,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGPNLJBOVJZY74IPRZE7WGTWR2GIDANCNFSM6AAAAAATVDZU7M
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Thanks & Regards
Mohd. Kaif

I cant short the provided code. You have told you want a code which can be
directly copy in mai.dart file and then run. Then I have prepared a sample
code which can directly run. Please try to look into it which I have just
shared with you.
On Wed, 11 Jan, 2023, 7:43 pm Nabeel Parkar, @.***>
wrote:

Hey. Your code is long and complex. Please try to reduce it to the
absolute minimal code to reproduce the issue
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/118170#issuecomment-1378814428,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGPNLJEGCKNL4XTPR3VBXYTWR25YDANCNFSM6AAAAAATVDZU7M
.
You are receiving this because you were mentioned.Message ID:
@.***>

I'm sorry but that code sample will not work. Not only is it using a 3rd party package (Dio), it also is getting URLs from an API I believe. Could you produce a sample that either has a hardcoded URL, or provide the asset so that it can be used locally from VideoPlayerController.asset?

Hello , please have a look of sample code. I have removed the third party
library that is dio package.
import 'dart:convert';
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:video_player/video_player.dart';
Future main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: TestScreen(),
);
}
}
class TestScreen extends StatefulWidget {
const TestScreen({
Key? key,
}) : super(key: key);
@override
_TestScreenState createState() => _TestScreenState();
}
class _TestScreenState extends State {
List timelineList = [];
@override
void initState() {
super.initState();
// fetchDataFromAPi();
getPosts();
}
Future getPosts() async {
Response res = await get(Uri.parse("http://<IP_ADDRESS>:5000/posts"),
  headers: {
    'Authorization':
    'Bearer

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpbiI6ImtodXNoYnVraGFuMThkZWNAZ21haWwuY29tIiwiaWQiOiIyIiwiaWF0IjoxNjczMjQwNjY0LCJleHAiOjE2MzU0OTcyNDA2NjR9.fZlZk553Svm_HW1TAs4WSZ9oHWairwAdkhHyY5Dw6qE'
},
);
log('apieResponse_${res.body}');
try{
Map<String, dynamic> userdata = json.decode(res.body.toString());
FetchPostModal dataResponse= FetchPostModal.fromJson(userdata);
if (dataResponse.status == 1) {
if (timelineList.isNotEmpty) {
timelineList.clear();
}
for (int i = 0; i < dataResponse.data!.length; i++) {
  if (dataResponse.data![i].contentType == 'video') {
    timelineList.add(dataResponse.data![i]);
  }
}

setState(() {});

}
} catch (error) {
log('apiError$error');
}
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Column(
children: [
Expanded(
child: timelineList.isNotEmpty ? showDataList() :
const SizedBox(),
)
],
)),
);
}
Widget showDataList() {
return customList(
itemSpace: 15.0,
shrinkWrap: false,
physics: const BouncingScrollPhysics(),
axis: Axis.vertical,
list: timelineList,
child: (data, i) {
return Container(
height: 300,
width: double.infinity,
margin:const EdgeInsets.all(15.0),
child: Stack(
children: [
AutoPlayVideoWidget(
key: ObjectKey(timelineList[i].id!),
url: timelineList[i].contentUrl!,
updatePostCallbackFunction: null,
index: i,
play: true,
thumbnail: timelineList[i].thumbnail!,
postId: timelineList[i].id!,
),
],
),
);
});
}
}
class FetchPostModal {
FetchPostModal({
this.status,
this.data,
});
int? status;
List? data;
factory FetchPostModal.fromJson(Map<String, dynamic> json) => FetchPostModal(
status: json["status"],
data: List.from(json["data"].map((x) => Datum.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"status": status,
"data": List.from(data!.map((x) => x.toJson())),
};
}
class Datum {
Datum({
this.text,
this.followee,
this.restrict,
this.request,
this.liked,
this.saved,
this.comment,
this.id,
this.contentUrl,
this.thumbnail,
this.contentType,
this.userId,
this.user,
this.likeCount,
this.comCount,
this.createdAt,
});
String? text;
bool? request;
bool? followee;
bool? restrict;
bool? liked;
bool? saved;
bool? comment;
int? id;
String? contentUrl;
String? thumbnail;
String? contentType;
String? createdAt;
int? userId;
UserFetchPost? user;
LikeCommentCount? likeCount;
LikeCommentCount? comCount;
factory Datum.fromJson(Map<String, dynamic> json) => Datum(
text: json["text"],
request: json["request"],
followee: json["followee"],
restrict: json["restrict"],
liked: json["liked"],
saved: json["saved"],
comment: json["comment"],
id: json["id"],
contentUrl: json["contentUrl"],
thumbnail: json["thumbnail"],
createdAt: json["createdAt"],
contentType: json["contentType"],
likeCount: LikeCommentCount.fromJson(json["likeCount"]),
comCount: LikeCommentCount.fromJson(json["comCount"]),
userId: json["userId"],
user: UserFetchPost.fromJson(json["user"]),
);
Map<String, dynamic> toJson() => {
"text": text,
"restrict": restrict,
"followee": followee,
"request": request,
"liked": liked,
"saved": saved,
"comment": comment,
"id": id,
"contentUrl": contentUrl,
"thumbnail": thumbnail,
"createdAt": createdAt,
"contentType": contentType,
"likeCount": likeCount?.toJson(),
"comCount": comCount?.toJson(),
"userId": userId,
"user": user?.toJson(),
};
}
class LikeCommentCount {
LikeCommentCount({
this.count,
});
int? count;
factory LikeCommentCount.fromJson(Map<String, dynamic> json) =>
LikeCommentCount(
count: json["count"],
);
Map<String, dynamic> toJson() => {
"count": count,
};
}
class UserFetchPost {
UserFetchPost({
this.userId,
this.fullName,
this.profilePicture,
this.status,
this.commentStatus,
this.tagStatus,
});
int? userId;
String? fullName;
String? profilePicture;
String? status;
String? commentStatus;
String? tagStatus;
factory UserFetchPost.fromJson(Map<String, dynamic> json) => UserFetchPost(
userId: json["userId"],
fullName: json["fullname"],
profilePicture: json["profilePicture"],
commentStatus: json["commentStatus"],
tagStatus: json["tagStatus"],
);
Map<String, dynamic> toJson() => {
"userId": userId,
"fullname": fullName,
"profilePicture": profilePicture,
"commentStatus": commentStatus,
"tagStatus": tagStatus,
};
}
class User {
User({
this.userId,
this.fullName,
this.profilePicture,
});
int? userId;
String? fullName;
String? profilePicture;
factory User.fromJson(Map<String, dynamic> json) => User(
userId: json["userId"],
fullName: json["fullname"],
profilePicture: json["profilePicture"],
);
Map<String, dynamic> toJson() => {
"userId": userId,
"fullname": fullName,
"profilePicture": profilePicture,
};
}
Widget customList(
{required Widget Function(T, int) child,
List list = const [],
double itemSpace = 16,
ScrollPhysics? physics,
String? key,
required bool shrinkWrap,
bool? primary,
ScrollController? scrollController,
EdgeInsets padding = const EdgeInsets.all(0.0),
Axis axis = Axis.vertical}) {
return ListView.separated(
padding: padding,
cacheExtent: 9999,
addAutomaticKeepAlives: false,
addRepaintBoundaries: false,
controller: scrollController,
shrinkWrap: shrinkWrap,
primary: primary,
physics: physics ?? const BouncingScrollPhysics(),
scrollDirection: axis,
separatorBuilder: (context, index) => SizedBox(
width: axis == Axis.vertical ? 0 : itemSpace,
height: axis == Axis.horizontal ? 0 : itemSpace,
),
itemBuilder: (context, index) =>
Container(child: child(list[index], index)),
itemCount: list.length,
);
}
class AutoPlayVideoWidget extends StatefulWidget {
final String? url;
final String? thumbnail;
final bool? play;
final int? postId;
final int? index;
final Function? updatePostCallbackFunction;
const AutoPlayVideoWidget({Key? key,  @required
@.*** this.index, @required
this.url, @required this.thumbnail, @required @.***
this.postId}) : super(key: key);
@override
State createState() => _VideoWidgetState();
}
class _VideoWidgetState extends State {
VideoPlayerController? _controller;
Future? _initializeVideoPlayerFuture;
var videoEnded = false;
@override
void initState() {
super.initState();
log('videoUrl_'+widget.url!);

_controller = VideoPlayerController.network(widget.url!);
_initializeVideoPlayerFuture = _controller!.initialize().then((_) {
  setState(() {
    log('videoStatus'+widget.play.toString()+" "+widget.index.toString());

    if (widget.play!) {
      _controller!.setVolume(1.0);
      _controller!.play();

      _controller!.setVolume(1.0);

    }
    _controller?.addListener(checkVideo);
    //}

  });
});

}
void checkVideo() {
if (_controller!.value.position ==
const Duration(seconds: 0, minutes: 0, hours: 0)) {
log('video Started');
}
if (_controller!.value.position == _controller!.value.duration) {
  log('video Ended');

}

}
@override
void didUpdateWidget(AutoPlayVideoWidget oldWidget) {
if (oldWidget.play != widget.play) {
if (widget.play!) {
_controller!.play();
} else {
_controller!.pause();
}
}
super.didUpdateWidget(oldWidget);
}
@override
void dispose() {
log('disposecalled');
_controller!.dispose();
videoEnded=false;
super.dispose();
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: _initializeVideoPlayerFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return Stack(children: [
VideoPlayer(_controller!),
        ]);
      } else {
        return const Center(
          child: CircularProgressIndicator(),
        );
      }}
);

}
}
On Thu, Jan 12, 2023 at 12:48 PM Nabeel Parkar @.***>
wrote:

I'm sorry but that code sample will not work. Not only is it using a 3rd
party package (Dio), it also is getting URLs from an API I believe. Could
you produce a sample that either has a hardcoded URL, or provide the asset
so that it can be used locally from VideoPlayerController.asset?
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/118170#issuecomment-1379907170,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGPNLJCKWCCZDYB74XZHWG3WR6V35ANCNFSM6AAAAAATVDZU7M
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Thanks & Regards
Mohd. Kaif

Could you provide a URL to a video asset that I can use directly? I'm afraid since the APIs you use are authenticated, this code will be invalid once the JWT expires

This token does not expire. You don't worry. I don't have video asset. I
only test thorough APIs. You will see the actual problem when lots of
videos are loaded. For some videos it's works fine.
On Thu, 12 Jan, 2023, 8:47 pm Nabeel Parkar, @.***>
wrote:

Could you provide a URL to a video asset that I can use directly? I'm
afraid since the APIs you use are authenticated, this code will be invalid
once the JWT expires
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/118170#issuecomment-1380548510,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGPNLJG37VOYDNCT7S7G5Y3WSAOA3ANCNFSM6AAAAAATVDZU7M
.
You are receiving this because you were mentioned.Message ID:
@.***>

I cannot reproduce the issue with the code you have provided. I need a reliable reproducible sample to take this issue further. Please provide such a sample or unfortunately, I cannot proceed to label the issue and take it forward

may i know what problem you are getting to reproduce this issue?
On Fri, Jan 13, 2023 at 1:26 PM Nabeel Parkar @.***>
wrote:

I cannot reproduce the issue with the code you have provided. I need a
reliable reproducible sample to take this issue further. Please provide
such a sample or unfortunately, I cannot proceed to label the issue and
take it forward
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/118170#issuecomment-1381442252,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGPNLJFELP4HW2FOHFIK2N3WSEDBJANCNFSM6AAAAAATVDZU7M
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Thanks & Regards
Mohd. Kaif

I see no exception in the console. Not sure what the app is supposed to do, but some are static images and some are playing a video. But after scrolling for a bit, I cannot see any exceptions. Have you tried reproducing this issue on the master channel?

Yes, I did. Should is send you a demo video of exception?
On Fri, 13 Jan, 2023, 6:21 pm Nabeel Parkar, @.***>
wrote:

I see no exception in the console. Not sure what the app is supposed to
do, but some are static images and some are playing a video. But after
scrolling for a bit, I cannot see any exceptions. Have you tried
reproducing this issue on the master channel?
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/118170#issuecomment-1381808248,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGPNLJGPHHLGK7C4ISV6Y7DWSFFUZANCNFSM6AAAAAATVDZU7M
.
You are receiving this because you were mentioned.Message ID:
@.***>

Hello sir,
I hope you are doing well.
I have attached a video of exception along with sample code which i have
provided. In this video you will be notifice the exceptions of videos are
coming. Alos i have attached a mobile app screenshot which some of
videos are not loaded, which shows blank container.Please have a look of
this video link.
https://drive.google.com/file/d/1LTgRZnkdDVl0GAvSDHB4N4NLGeafWLKH/view?usp=sharing
[image: WhatsApp Image 2023-01-14 at 11.32.50 AM.jpeg]
Thanks
On Fri, Jan 13, 2023 at 6:42 PM Md Kaif @.***> wrote:

Yes, I did. Should is send you a demo video of exception?
On Fri, 13 Jan, 2023, 6:21 pm Nabeel Parkar, @.***>
wrote:

I see no exception in the console. Not sure what the app is supposed to
do, but some are static images and some are playing a video. But after
scrolling for a bit, I cannot see any exceptions. Have you tried
reproducing this issue on the master channel?
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/118170#issuecomment-1381808248,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGPNLJGPHHLGK7C4ISV6Y7DWSFFUZANCNFSM6AAAAAATVDZU7M
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Thanks & Regards
Mohd. Kaif

Hello, I hope you are looking at this issue.
Thanks
On Sat, Jan 14, 2023 at 11:33 AM Md Kaif @.***> wrote:

Hello sir,
I hope you are doing well.
I have attached a video of exception along with sample code which i have
provided. In this video you will be notifice the exceptions of videos are
coming. Alos i have attached a mobile app screenshot which some of
videos are not loaded, which shows blank container.Please have a look of
this video link.
https://drive.google.com/file/d/1LTgRZnkdDVl0GAvSDHB4N4NLGeafWLKH/view?usp=sharing
[image: WhatsApp Image 2023-01-14 at 11.32.50 AM.jpeg]
Thanks
On Fri, Jan 13, 2023 at 6:42 PM Md Kaif @.***> wrote:

Yes, I did. Should is send you a demo video of exception?
On Fri, 13 Jan, 2023, 6:21 pm Nabeel Parkar, @.***>
wrote:

I see no exception in the console. Not sure what the app is supposed to
do, but some are static images and some are playing a video. But after
scrolling for a bit, I cannot see any exceptions. Have you tried
reproducing this issue on the master channel?
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/118170#issuecomment-1381808248,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGPNLJGPHHLGK7C4ISV6Y7DWSFFUZANCNFSM6AAAAAATVDZU7M
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Thanks & Regards
Mohd. Kaif

--
Thanks & Regards
Mohd. Kaif

Using an API 33 emulator, I can see the video playing normally. Here is the code a came up with:
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: TestScreen(),
    );
  }
}

class TestScreen extends StatefulWidget {
  const TestScreen({
    Key? key,
  }) : super(key: key);

  @override
  State<TestScreen> createState() => _TestScreenState();
}

class _TestScreenState extends State<TestScreen> {
  late final VideoPlayerController _controller;

  @override
  void initState() {
    super.initState();
    _controller = VideoPlayerController.asset('assets/video.mov')
      ..initialize().then((_) {
        setState(() {
          _controller.play();
        });
      });
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: Center(
          child: _controller.value.isInitialized
              ? AspectRatio(
                  aspectRatio: _controller.value.aspectRatio,
                  child: VideoPlayer(_controller),
                )
              : const CircularProgressIndicator(),
        ),
      ),
    );
  }
}

Sorry you din't get my issue. The issue is coming when lots of videos are
initialize in listview then that exception is coming. Single video playing
fine. Please try to look my code and video which i was sent.
Thanks
On Mon, Jan 16, 2023 at 1:16 PM Nabeel Parkar @.***>
wrote:

Using an API 33 emulator, I can see the video playing normally. Here is
the code a came up with:
import 'package:flutter/material.dart';import 'package:video_player/video_player.dart';
Future main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: TestScreen(),
);
}
}
class TestScreen extends StatefulWidget {
const TestScreen({
Key? key,
}) : super(key: key);
@override
State createState() => _TestScreenState();
}
class _TestScreenState extends State {
late final VideoPlayerController _controller;
@override
void initState() {
super.initState();
controller = VideoPlayerController.asset('assets/video.mov')
..initialize().then(() {
setState(() {
_controller.play();
});
});
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Center(
child: _controller.value.isInitialized
? AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: VideoPlayer(_controller),
)
: const CircularProgressIndicator(),
),
),
);
}
}
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/118170#issuecomment-1383613307,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGPNLJBEBBIN6QWLWBUMK3LWST4HHANCNFSM6AAAAAATVDZU7M
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Thanks & Regards
Mohd. Kaif

Can you provide non-authenticated links to all the video files? There may be an issue with one of the video codecs, as explained by the error you are observing

All the videos links are not authenticated and can be accessed directly.
On Mon, 16 Jan, 2023, 7:49 pm Nabeel Parkar, @.***>
wrote:

Can you provide non-authenticated links to all the video files? There may
be an issue with one of the video codecs, as explained by the error you are
observing
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/118170#issuecomment-1384135582,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGPNLJC6X5XRKJRPFSBW7PLWSVKHDANCNFSM6AAAAAATVDZU7M
.
You are receiving this because you were mentioned.Message ID:
@.***>

Using the first code sample, which has a list of videos, I could not reproduce the issue. With a specific video file you provided, I still could not reproduce the issue. What sort of devices are you running on and which Android OS version?

I am running on moto g51 5g of 12 os version.
On Tue, Jan 17, 2023 at 12:19 PM Nabeel Parkar @.***>
wrote:

Using the first code sample, which has a list of videos, I could not
reproduce the issue. With a specific video file you provided, I still could
not reproduce the issue. What sort of devices are you running on and which
Android OS version?
—
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/118170#issuecomment-1384909382,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGPNLJD72DBO4FWLLD7JIP3WSY6FZANCNFSM6AAAAAATVDZU7M
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Thanks & Regards
Mohd. Kaif

@Sayedmdkaif
We are unfortunately not sure how to resolve this issue when your sample code is not minimal and complete.
You should provide a completed and minimal reproducible code sample that represents the problem. Please access the link and see how to create such a sample.
You may take a look at video_player example which also has a list of video, and modify it to show the issue you're facing here.
Also, taking a look at the logs, it seems the issue is ExoPlayer's issue internally than video_player plugin issue. See related Exoplayer issue: https://github.com/google/ExoPlayer/issues/6168


P4_16 spec: Document that methods/functions may not return references to stateful objects

This PR for p4lang/p4c: https://github.com/p4lang/p4c/pull/815 proposes making it an error for a method to have a return type that is a parser, control, package, or extern.
Without this restriction, it is definitely possible to create an extern method that returns references to controls that enables a loop of apply() calls between controls, or similarly for parsers.  The test program testdata/p4_16_errors/issue807.p4 added by that PR is one such program.
If this is considered a reasonable restriction on all P4_16 programs, it would be good to document it so in the spec (Note: I haven't checked thoroughly to see if this is already disallowed by the current v1.0.0 P4_16 spec, but if so, please point it out and we can close this issue with no changes).

Are parser, control, package, or externs allowed as arguments?  If so, I
think banning them as a return type is insufficient to achieve the result
you are trying for, since you can express the same thing with an out
parameter.
-the other andy:)
On August 1, 2017 at 9:15:14 PM, Andy Fingerhut<EMAIL_ADDRESS>wrote:
This PR for p4lang/p4c: p4lang/p4c#815
https://github.com/p4lang/p4c/pull/815 proposes making it an error for a
method to have a return type that is a parser, control, package, or extern.
Without this restriction, it is definitely possible to create an extern
method that returns references to controls that enables a loop of apply()
calls between controls, or similarly for parsers. The test program
testdata/p4_16_errors/issue807.p4 added by that PR is one such program.
If this is considered a reasonable restriction on all P4_16 programs, it
would be good to document it so in the spec (Note: I haven't checked
thoroughly to see if this is already disallowed by the current v1.0.0 P4_16
spec, but if so, please point it out and we can close this issue with no
changes).
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/p4lang/p4-spec/issues/367, or mute the thread
https://github.com/notifications/unsubscribe-auth/AAG5r2MD9DVMc6qlrUN_s12uyQAAU7knks5sT82RgaJpZM4Oqezz
.

@akeep Good point.  I don't know if the current spec already disallows controls/parameters/packages/externs to be parameters with an 'out' direction, but if they are currently allowed in the spec, it would be good to explicitly disallow them as well.

These should only be allowed as directionless parameters.

 It harnesses the recursion available in parsers to call a pair of controls in a loop forever.
#include <core.p4>

// Architecture
parser P();
control C();
package S(P p);
extern BoolReg {
  BoolReg();
  bool get();
  void flip();
}
extern WrapControl {
  WrapControl(C c);
  void execute();
}

// User Program
BoolReg() r;

parser Loop()(WrapControl c1, WrapControl c2) {
  state start {
    r.flip();
    transition select(r.get()) {
      true: q1;
      false: q2;
      default: accept;
    }
  }
  state q1 {
    c1.execute();
    transition start;
  }
  state q2 {
    c2.execute();
    transition start;
  }
}

control MyC1() {
  apply {
    // Code for Control 1
  }
}
control MyC2() {
  apply {
    // Code for Control 2
  }
}

S(Loop(WrapControl(MyC1()), WrapControl(MyC2()))) main;

As best I can tell, none of the restrictions that have been proposed so far forbid this program, although the compiler currently rejects it with a mysterious error (see p4c #818).
cyclic.p4(50): error: Could not find declaration for tmp_0
S(Loop(WrapControl(MyC1()), WrapControl(MyC2()))) main;
                   ^^^^^^
cyclic.p4(50): error: Could not find declaration for tmp_1
S(Loop(WrapControl(MyC1()), WrapControl(MyC2()))) main;
                                        ^^^^^^

It seems like we need to also forbid controls as constructor parameters to externs, or impose a deeper restriction forbidding controls from being used  in parsers.
However, I'm not sure if the latter restrictions would be in-line with the design for P4-16 as @mbudiu-vmw and others originally envisioned it. I vaguely recall some discussions of architectures people were imagining in which parsers and controls might invoke each other...

And actually, this version is accepted by the compiler.
#include <core.p4>

// Architecture
parser P();
control C();
package S(P p);
extern BoolReg {
  BoolReg();
  bool get();
  void flip();
}
extern WrapControl {
  WrapControl(C c);
  void execute();
}

// User Program
BoolReg() r;

parser Loop()(WrapControl c1, WrapControl c2) {
  state start {
    r.flip();
    transition select(r.get()) {
      true: q1;
      false: q2;
      default: accept;
    }
  }
  state q1 {
    c1.execute();
    transition start;
  }
  state q2 {
    c2.execute();
    transition start;
  }
}

control MyC1() {
  apply {
    // Code for Control 1
  }
}
control MyC2() {
  apply {
    // Code for Control 2
  }
}

WrapControl(MyC1()) c1;
WrapControl(MyC2()) c2;

S(Loop(c1,c2)) main;

Here's another version that doesn't use parser loops.
#include <core.p4>

// Architecture
control C();
package S(C c);

extern WrapControls<T1,T2> {
  WrapControls(T1 t1, T2 t2);
  void execute1(); // invokes c1.apply on self
  void execute2(); // invokes c2.apply on self
}

//User Program
control MyC1(WrapControls<_,_> wc) {
  apply {
    wc.execute2();
  }
}
control MyC2(WrapControls<_,_> wc) {
  apply {
    wc.execute1();
  }
}
control MyC3() {
  MyC1() c1;
  MyC2() c2;
  WrapControls<MyC1,MyC2>(c1,c2) wc;
  apply {
    c1.apply(wc);
  }
}

S(MyC3()) main;

This makes the compiler crash with a pretty serious bug.
In file: p4c/ir/visitor.cpp:54
Compiler Bug: IR loop detected

This actually shouldn't type check with our current restrictions on generics -- the underscores cannot be filled in with suitable types. But if we were to add them back, then I believe it would be possible to make it a well-typed program.

@jnfoster wrote: "It seems like we need to also forbid controls as constructor parameters to externs, or impose a deeper restriction forbidding controls from being used in parsers.
However, I'm not sure if the latter restrictions would be in-line with the design for P4-16 as @mbudiu-vmw and others originally envisioned it. I vaguely recall some discussions of architectures people were imagining in which parsers and controls might invoke each other..."
Andy's response:
I don't know who wrote the relevant part of the P4_16 spec, but it explicitly says that it is illegal to instantiate a control block within a parser: https://github.com/p4lang/p4-spec/blob/master/p4-16/spec/P4-16-spec.mdk#L4066-L4067
I understand that calling a control from a parser is not the same thing as instantiating a control within a parser, but why make instantiating illegal if you wanted to allow calling controls from parsers?
Similarly, it is illegal to instantiate parsers within control blocks, as stated here: https://github.com/p4lang/p4-spec/blob/master/p4-16/spec/P4-16-spec.mdk#L4731-L4732

Your WrapControl extern seems intended for its execute() method to call apply() on the control it was given when a WrapControl instance is constructed.
This seems to me against the following intent given in the P4_16 spec here: https://github.com/p4lang/p4-spec/blob/master/p4-16/spec/P4-16-spec.mdk#L1563-L1572
In particular the parts about limiting the possible side effects that extern calls can have on objects in the P4 program.

I agree -- this is a naughty program!
Language design is interesting because features tend to interact in unintended ways...

See the discussion of #361 (https://github.com/p4lang/p4-spec/issues/361#issuecomment-319612892). I don't think this repair fully fixes the problem.

With the merging of this PR: https://github.com/p4lang/p4-spec/pull/427
I believe it is now explicitly documented that extern methods cannot return references to stateful objects, nor can they accept references to parsers or controls as run-time parameters, nor can they call them.
I am therefore closing this issue.  Feel free to reopen or create other issues if I've missed anything.


Improve npm run eject description

I feel as if the description for npm run eject is incredibly vague. eject does more than just removing the tool and that should be explained to the user.

Thank you for your pull request and welcome to our community. We require contributors to sign our Contributor License Agreement, and we don't seem to have you on file. In order for us to review and merge your code, please sign up at https://code.facebook.com/cla - and if you have received this in error or have any questions, please drop us a line at<EMAIL_ADDRESS>Thanks!

Thank you for signing our Contributor License Agreement. We can now accept your code for this (and any) Facebook open source project. Thanks!

Can you show the screenshot?
If this doesn't look very well we should just reformat the whole message.
We can use chalk inversion to highlight commands, and write small descriptions below.

@gaearon screenshots supplied. Looks OK.

Sorry for the massive images!

I don’t like that npm run eject prints multiple lines, inconsistent with earlier commands.
Can you please split list into separate sections with headers?
I was thinking something like
npm start

  Starts...

npm run build

  ...

npm test

  ...

npm run eject

  ...

We suggest that you ...

Where all commands (npm start etc) are wrapped in chalk.cyan() (see scripts/build.js for example of this) so that they appear highlighted.
What do you think?

@gaearon sounds good to me, I'll have some time Monday to implement this. 👍

@gaearon I've committed the changes that add better formatting and highlighting. Unfortunately, I've generated a node-debug log that I can't seem to get rid of 😦

@btnwtn You can get rid of the npm-debug.log file with git rm:
git rm npm-debug.log
git commit -m "Remove npm-debug.log"
git push origin master  # Push to your GitHub remote

Alternatively you can also remove it directly from the GitHub web interface, if you go to https://github.com/btnwtn/create-react-app/blob/master/npm-debug.log and click the thrash can icon.

Deleted npm-debug.log and fit npm script descriptions to 80 characters. Looks good to me 😄

Thanks @btnwtn! Can you also merge create-react-app master branch into yours to resolve the conflicts. Happy to merge as soon as that's done.

Having issues with git... git pull says everything is up-to-date. I tried rebasing the commit(?) but that hasn't done anything. @fson what should I do?

@btnwtn: Add the main repo as a remote, here named upstream (unless you've already done so):
git remote add upstream git@github.com:facebookincubator/create-react-app.git

Pull latest changes from the main repo, while rebasing your changes on top:
git pull --rebase upstream master

Open scripts/init.js and manually fix any conflicts. Then run:
git add scripts/init.js
git rebase --continue

Everything should be good, you can push your branch to GitHub.
In the future, it can be easier to make your changes in a separate feature branch (not master), so you can always keep the master up-to-date with git pull and just merge it to your feature branches, if needed.

Oh for fucks sake.


The ord running on testnet3 will pause at a certain block for a long time and cannot keep up with the actual block height

Is there any way to speed up or solve this problem?

I have same issue. it seems every ord stopped in testnet

dupe of #3935


Get Subscribers Infos

hi friends how do i get someone's subscription information?
for example : a user 3 months got sub ***** channel

If I'm understanding correctly, you're going to want to listen to the resub event.
client.on('resub', (channel, username, months, message, userstate, methods) => {
    client.say(channel, `${userstate['display-name']} just resubscribed!`);
});

hmm good but i want who write !giveaway command, the author sub info ?


Postgresql got updated and helm's chart for clair is not running with that new version

Description of Problem / Feature Request
Hi,
we are using clair with postgresql, but because postgresql has a new version, we are not able to start clair.
We noticed the error when we saw that the configmap generated for the postgresql previously, was called "clair-postgresql" and now it is called "clair-postgresql-init-scripts.
Expected Outcome
We expected getting clair running with postgresql.
Actual Outcome
Clair is not running.
Environment

Kubernetes version (use kubectl version): 1.9
Helm version (use helm version): 2.11.0

I am facing the same Issue! I tried to install Clair in my Cluster.
After the startup of the Database i get the following errors:
ERROR:  column "parent_id" does not exist STATEMENT:  CREATE INDEX ON Layer (parent_id);
My Clair Pods shows these logs:
{"Event":"running` database migrations","Level":"info","Location":"pgsql.go:216","Time":"2019-02-07 11:54:51.740184"} {"Event":"pgsql: an error occured while running migrations: migration 2 failed: pq: column \"parent_id\" does not exist","Level":"fatal","Location":"main.go:96","Time":"2019-02-07 11:54:51.748945"}
I am using the helm chart from the master branch. I changed the clair image from clair-git:latest to clair:latest

@NiklasKnoll hey which postgres version are you using?

I tried installing Clair via Helm release.  I just used the default configuration that came with the Helm Release package. Not sure if I have to do anything. The configuration indicated postgresql user/password to be clair/clair.
Thanks in advance for any pointers. Has anyone had experience deploying the Helm Package of Clair from
banzaicloud-stable - clair ?
Version
CHART VERSION
0.1.1
DETAILS & LINKS
Type Helm Chart
Published March 25, 2019

The postgresql container shows error such as :
DETAIL: Role "clair" does not exist. Connection matched pg_hba.conf line 1
FATAL: password authentication failed for user "clair" kubernetes.pod:

@pradeepn-altran
Claim helm chart "clair-0.1.1" comes with postgres installation but neither the "clair" user nor "clair" database will be created. So you have to login into postgres pod in order to create the "clair" user and "clair" database. Keep in mind, in the clair configmap the postgres connection string has user "clair" with password "clair".

We’re declaring bug bankruptcy as part of the release process for a new major version of Clair. Please open a ticket in our issue tracker if you feel this still needs to be addressed, and we'll triage as part of our v4 development process. Thanks!