https://bugs.kde.org/show_bug.cgi?id=430041

            Bug ID: 430041
           Summary: libkis: Resource.data() returns nothing for many types
                    of resources [Krita v4.4]
           Product: krita
           Version: 4.4.2-beta1
          Platform: Debian unstable
                OS: Linux
            Status: REPORTED
          Severity: normal
          Priority: NOR
         Component: Scripting
          Assignee: krita-bugs-n...@kde.org
          Reporter: nmaghfurus...@gmail.com
  Target Milestone: ---

SUMMARY
The data() method in Krita's v4.x Resource Python API returns a raw QByteArray
which might be useful for consumption in a script. For example, the data()
method for workspace resources should return an XML string as a QByteArray,
which can then be passed to QMainWindow.restoreState() to activate a specific
workspace.

However only a handful of resource types return a populated QByteArray, while
other resource types return an empty one, including workspaces.

STEPS TO REPRODUCE
1. Open the Scripter in a default installation of krita 4.3 or 4.4
2. Paste the following script and run it:

``` python
# build a list of resources to test
tested_resources = [
    Application.resources('pattern')['01_canvas.png'],
    Application.resources('pattern')['Cross02.pat'],
    Application.resources('pattern')['DITH 0404 CLUS'],
    Application.resources('gradient')['Foreground to Background'],
    Application.resources('gradient')['GPS eye (Blue)'],
    Application.resources('brush')['A -2 Sparkle 3'],
    Application.resources('brush')['tree flowers speedpainting strokes'],
    Application.resources('preset')['a)_Eraser_Circle'],
    Application.resources('preset')['z)_Stamp_Water'],
    Application.resources('palette')['Swatch RGB'],
    Application.resources('palette')['Default'],
    Application.resources('workspace')['VFX_Paint'],
    Application.resources('workspace')['Minimal']]

# retrieve their data and print its length
for r in tested_resources:
    print(r.data().length())
```

OBSERVED RESULT

```
175363
0
0
0
0
0
0
24295
25746
0
0
0
0
```

EXPECTED RESULT

```
175363
1636
103
433
893
4139
1659
24264
25712
11165
2594
6862
7672
```

SOFTWARE/OS VERSIONS

Krita

 Version: 4.4.2-alpha (git 0935bb4)
 Languages: id_ID, id
 Hidpi: false

Qt

  Version (compiled): 5.12.9
  Version (loaded): 5.12.9

OS Information

  Build ABI: x86_64-little_endian-lp64
  Build CPU: x86_64
  CPU: x86_64
  Kernel Type: linux
  Kernel Version: 5.8.0-2-amd64
  Pretty Productname: Debian GNU/Linux bullseye/sid
  Product Type: debian
  Product Version: unknown
  Desktop: 

ADDITIONAL INFORMATION

I obtained the expected values by patching Resource.cpp in libkis with the
following diff:

```
diff --git a/libs/libkis/Resource.cpp b/libs/libkis/Resource.cpp
index d773f367c7..7f4f2d04c7 100644
--- a/libs/libkis/Resource.cpp
+++ b/libs/libkis/Resource.cpp
@@ -107,7 +107,9 @@ QByteArray Resource::data() const
     if (!d->resource) return ba;

     QBuffer buf(&ba);
+    buf.open(QIODevice::WriteOnly);
     d->resource->saveToDevice(&buf);
+    buf.close();
     return ba;
 }
```

But I'm not sure if it makes sense to continue fixing/testing/maintaining the
old and creaky resource system and exposing it to python, since the new krita
5.0 resource system is upon us soon. Thoughts?

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to