Re: Vibe.d download function, how to get callback when done or error?

2023-09-23 Thread Christian Köstlin via Digitalmars-d-learn

On 23.09.23 14:07, j...@bloow.edu wrote:

I'm using download(url, filename) to download files in vibe.d.

The issue is that I do not know when the download is finished or errors. 
There is a callback for the streaming side but not for the file download.


A small test program shows, that if the function return normally the 
transfer was done (and the file saved).
The function raises an exception if there is e,g, an http error status 
communicated.


I am not sure what happens if the download is interrupted in the middle. 
I guess there will be an exception, but the file might be written partially.




Kind regards,
Christian



Re: C to D: please help translate this weird macro

2023-09-23 Thread Ki Rill via Digitalmars-d-learn

On Wednesday, 20 September 2023 at 13:53:08 UTC, Ki Rill wrote:

Here is the macro:

```C
#define NK_CONTAINER_OF(ptr,type,member)\
(type*)((void*)((char*)(1 ? (ptr): &((type*)0)->member) - 
NK_OFFSETOF(type, member)))

```

I'm trying to translate the Nuklear GUI library to D 
[here](https://github.com/rillki/nuklear-d/tree/nuklear-d-translation).


I did translate the library. Wow! That was a lot. It successfully 
builds, but does not work for long and crashes if I try to do 
something: it's either an assertion that fails or out of bounds 
array access is thrown by D. The only thing that works is 
pressing a button.


Now I need to somehow find and fix these things. Nuclear uses 
flexible array members in structs and I am a bit puzzled how to 
handle this without a major code refactor.


Re: Vibe.d download function, how to get callback when done or error?

2023-09-23 Thread Elias via Digitalmars-d-learn

On Saturday, 23 September 2023 at 12:07:38 UTC, Joe wrote:

I'm using download(url, filename) to download files in vibe.d.

The issue is that I do not know when the download is finished 
or errors. There is a callback for the streaming side but not 
for the file download.


You don’t need a callback for that. It’s done when the download() 
returns.


Vibe.d download function, how to get callback when done or error?

2023-09-23 Thread Joe--- via Digitalmars-d-learn

I'm using download(url, filename) to download files in vibe.d.

The issue is that I do not know when the download is finished or 
errors. There is a callback for the streaming side but not for 
the file download.




Re: change object class

2023-09-23 Thread Christian Köstlin via Digitalmars-d-learn

On 23.09.23 05:11, Vitaliy Fadeev wrote:

On Friday, 22 September 2023 at 19:50:17 UTC, Christian Köstlin wrote:

another option could be to model your own VTable in a struct like this:
https://run.dlang.io/is/3LTjP5

Kind regards,
Christian


Thank, Christian !
True nice tasty solution with ```VTable```!
And further... the project is growing.
```
void Draw()
{
   DrawBG();
   DrawFG();
}
```

And we want use ```DrawBG()``` code  from ```initial``` in other states, 
like ```Selected```.


How to use some functions from ```initial``` via ```VTable``` ?

I see solution in ```classes``` and methods with ```override``` keyword.

```VTable``` does the same thing as ```__vptr``` ?


VTable is your structure .. it does exactly what you want it to do.
__vptr is the internal implementation of virtual methods in the dlang 
object model.
Line 20 and 21 in my example initialize the two `VTable`s Initial and 
Hovered. You can change VTable to contain two function pointers and 
initialize those as you like for the instances of the VTable structs.


e.g.
```d
struct DrawVTable
{
   void function(Chip, Renderer) background;
   void function(Chip, Renderer) foreground;
}

// define functions to draw the different fore and backgrounds
...
...

VTable initial = VTable(&drawInitialBackground, &drawInitialForeground);
VTable hovered = VTable(&drawHoveredBackground, &drawHoveredForeground);
VTable selected = VTable(&drawInitialBackground, &drawHoveredForegtround);

```

Kind regards,
Christian