Perhaps you can check whether any methods are constructors? This is
effectively the information I look at when parsing GIR files for my TS
definitions...

http://devdocs.baznga.org/girepository20~2.0_api/girepository.functioninfoflags#default-is_constructor

On 8 November 2017 at 12:37, Andrea Giammarchi <andrea.giammar...@gmail.com>
wrote:

> the documentation doesn't say if I can instantiate those classes, or does
> it?
>
> if I could understand via GIRepository.Repository if a class could be
> extended/instantiated I could improve cgjs-about to show that right away.
>
> So far I thought that `objects` where all usable as `new Class` but that's
> not the case at all. Maybe I should check for an `is_abstract_object` ?
>
> Not sure there is anything like that though.
>
> Thanks.
>
>
> On Wed, Nov 8, 2017 at 3:41 AM, <philip.chime...@gmail.com> wrote:
>
>> This comes a bit too late to help you, sorry, but the C docs will tell
>> you which classes extend a base class, e.g. for GInputStream
>> (Gio.InputStream in GJS): https://developer.gnome.
>> org/gio/stable/GInputStream.html#GInputStream.object-hierarchy
>>
>> On Tue, Nov 7, 2017 at 2:36 PM Andrea Giammarchi <
>> andrea.giammar...@gmail.com> wrote:
>>
>>> so, just FYI ...
>>>
>>> Buffered, Converter, Data, File, Memory and Unix InputStream are
>>> available.
>>>
>>> Buffered, Converter, and Data need a base_stream to work ... not a
>>> primitive.
>>>
>>> File and Unix need attributes or fd pointers
>>>
>>> The Memory seems to be the "base/primitive" I was looking for together
>>> with its MemoryOutputStream counterpart.
>>>
>>> Regards
>>>
>>>
>>>
>>> On Tue, Nov 7, 2017 at 7:28 PM, Andrea Giammarchi <
>>> andrea.giammar...@gmail.com> wrote:
>>>
>>>> oh gosh, my own utility ... that is less useful in pretty print for
>>>> these kind of things .... although the list has many non-usable streams but
>>>> now I want to know which one is usable.
>>>>
>>>> P.S. for namespaces you don't' need gi prefix ... cgjs-about Gio would
>>>> do the same ;-)
>>>>
>>>> Thanks again
>>>>
>>>> On Tue, Nov 7, 2017 at 7:09 PM, Sam Jansen <sam.jan...@starleaf.com>
>>>> wrote:
>>>>
>>>>>
>>>>>
>>>>> On 7 November 2017 at 21:55, Andrea Giammarchi <
>>>>> andrea.giammar...@gmail.com> wrote:
>>>>>
>>>>>> this is gold, thank you!!!
>>>>>>
>>>>>> do you know if MemoryInputStream is the only one usable? is there
>>>>>> any list of available GJS streams one can use? I think memory is just 
>>>>>> fine
>>>>>> though, thanks again a lot!
>>>>>>
>>>>>>
>>>>> I just took an educated guess: I figured anything useful would extend
>>>>> Gio.InputStream. I then just browsed through the docs, looking for 
>>>>> anything
>>>>> with "InputStream" in their name, which isn't so many...
>>>>>
>>>>> This is a good place to start perhaps:
>>>>>
>>>>> $ cgjs-about gi.Gio --json | grep InputStream | grep -Ev
>>>>> "Class|Private"
>>>>>
>>>>>
>>>>> It would be a neat extension to cgjs-about if one could have it list
>>>>> the classes known to implement an interface or extend from a class...
>>>>>
>>>>>
>>>>>> On Tue, Nov 7, 2017 at 6:46 PM, Sam Jansen <sam.jan...@starleaf.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi Andrea,
>>>>>>>
>>>>>>> I've come up with something that... almost does what you're looking
>>>>>>> at here. Perhaps it's useful as a guide of what one can do with the Gio
>>>>>>> interface.
>>>>>>>
>>>>>>> I think you may hit some awkward problems with modelling Node-style
>>>>>>> streams with GLib ones. But perhaps it is possible and this helps. I 
>>>>>>> don't
>>>>>>> really know the Node stream semantics so I have assumed various things 
>>>>>>> in
>>>>>>> my Readable implementation as you'll see... Note that MemoryInputStream
>>>>>>> really is just a byte stream; so there is no guarantee you'll receive 
>>>>>>> the
>>>>>>> exact block of bytes that was written -- for example, when I run this I 
>>>>>>> get
>>>>>>> a first chunk of "12", followed by "3", "4", etc.
>>>>>>>
>>>>>>>
>>>>>>> let Gio = imports.gi.Gio;
>>>>>>> let byteArray = imports.byteArray;
>>>>>>> let mainloop = imports.mainloop;
>>>>>>>
>>>>>>> class Readable {
>>>>>>>   constructor() {
>>>>>>>     this._mio = Gio.MemoryInputStream.new();
>>>>>>>     this._callbacks = {};
>>>>>>>     this._startNext();
>>>>>>>   }
>>>>>>>
>>>>>>>   _startNext() {
>>>>>>>     // Enqueue an async read; and re-enqueue when it finishes, so
>>>>>>> we're
>>>>>>>     // always waiting for data...
>>>>>>>     this._mio.read_bytes_async(4096, 1, null, (source, res) => {
>>>>>>> this._onData(this._mio.read_bytes_finish(res));
>>>>>>>         this._startNext();
>>>>>>> });
>>>>>>>   }
>>>>>>>
>>>>>>>   _onData(bytes) {
>>>>>>>     if (this._callbacks['data']) {
>>>>>>>       let ba = byteArray.fromGBytes(bytes);
>>>>>>>       this._callbacks['data'](ba);
>>>>>>>       this._read();
>>>>>>>     }
>>>>>>>   }
>>>>>>>
>>>>>>>   push(bytes) {
>>>>>>>     if (bytes == null) {
>>>>>>>       mainloop.quit('main');
>>>>>>>       return;
>>>>>>>     }
>>>>>>>     this._mio.add_bytes(bytes);
>>>>>>>   }
>>>>>>>
>>>>>>>   on(name, callback) {
>>>>>>>     this._callbacks[name] = callback;
>>>>>>>     if (name === 'data') {
>>>>>>>       this._read();
>>>>>>>     }
>>>>>>>   }
>>>>>>> }
>>>>>>>
>>>>>>> class Counter extends Readable {
>>>>>>>   constructor(opt) {
>>>>>>>     super(opt);
>>>>>>>     this._max = 1000;
>>>>>>>     this._index = 1;
>>>>>>>   }
>>>>>>>
>>>>>>>   _read() {
>>>>>>>     const i = this._index++;
>>>>>>>     if (i > this._max)
>>>>>>>       this.push(null);
>>>>>>>     else {
>>>>>>>       const str = '' + i;
>>>>>>>       const buf = byteArray.fromString(str); // Buffer.from(str,
>>>>>>> 'ascii');
>>>>>>>       this.push(buf);
>>>>>>>     }
>>>>>>>   }
>>>>>>> }
>>>>>>>
>>>>>>> (new Counter).on('data', (str) => {
>>>>>>>     print("data", str.toString());
>>>>>>> });
>>>>>>>
>>>>>>> mainloop.run('main');
>>>>>>>
>>>>>>>
>>>>>>> On 7 November 2017 at 10:08, Andrea Giammarchi <
>>>>>>> andrea.giammar...@gmail.com> wrote:
>>>>>>>
>>>>>>>> I am trying to implement a stream module and apparently I have
>>>>>>>> everything I need but practically I'm unable to use streams.
>>>>>>>>
>>>>>>>> If I instantiate a `new Gio.InputStream` I have the following error:
>>>>>>>> cannot create instance of abstract (non-instantiatable) type
>>>>>>>> 'GInputStream'
>>>>>>>>
>>>>>>>> I cannot even extend it ... so I've though "ok, maybe it's like an
>>>>>>>> interface, I implement it and that's it"
>>>>>>>>
>>>>>>>> But then a JS class wouldn't work as base_stream for a
>>>>>>>> Gio.BufferedInputStream, and if I extend the JS class to be a
>>>>>>>> GObject.Object then:
>>>>>>>> Gjs-WARNING **: JS ERROR: TypeError: Object is of type
>>>>>>>> GObject.Object - cannot convert to GInputStream
>>>>>>>>
>>>>>>>> where GInputStream is the one I cannot use in the first place.
>>>>>>>>
>>>>>>>> I've reached full circle then so ... I wonder if anyone has any
>>>>>>>> idea how to use/create/extend streams in GJS (not talking about file
>>>>>>>> streams but streams in general) or if it's even possible.
>>>>>>>>
>>>>>>>> In node, as example, I could do this and it will work:
>>>>>>>>
>>>>>>>> ```js
>>>>>>>>
>>>>>>>> const { Readable } = require('stream');
>>>>>>>>
>>>>>>>> class Counter extends Readable {
>>>>>>>> constructor(opt) {
>>>>>>>> super(opt);
>>>>>>>> this._max = 1000;
>>>>>>>> this._index = 1;
>>>>>>>> }
>>>>>>>>
>>>>>>>> _read() {
>>>>>>>> const i = this._index++;
>>>>>>>> if (i > this._max)
>>>>>>>> this.push(null);
>>>>>>>> else {
>>>>>>>> const str = '' + i;
>>>>>>>> const buf = Buffer.from(str, 'ascii');
>>>>>>>> this.push(buf);
>>>>>>>> }
>>>>>>>> }
>>>>>>>> }
>>>>>>>>
>>>>>>>> (new Counter).on('data', console.log);
>>>>>>>>
>>>>>>>> ```
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> javascript-list mailing list
>>>>>>>> javascript-list@gnome.org
>>>>>>>> https://mail.gnome.org/mailman/listinfo/javascript-list
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>> _______________________________________________
>>> javascript-list mailing list
>>> javascript-list@gnome.org
>>> https://mail.gnome.org/mailman/listinfo/javascript-list
>>>
>>
>
_______________________________________________
javascript-list mailing list
javascript-list@gnome.org
https://mail.gnome.org/mailman/listinfo/javascript-list

Reply via email to