Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bIuS3-00065i-8g for pgadmin-hackers@arkaria.postgresql.org; Fri, 01 Jul 2016 09:09:31 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1bIuS2-0003mn-Ro for pgadmin-hackers@arkaria.postgresql.org; Fri, 01 Jul 2016 09:09:30 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1bIuRp-0003Hp-7M for pgadmin-hackers@postgresql.org; Fri, 01 Jul 2016 09:09:17 +0000 Received: from mail-io0-x231.google.com ([2607:f8b0:4001:c06::231]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1bIuRm-0002Hi-1S for pgadmin-hackers@postgresql.org; Fri, 01 Jul 2016 09:09:16 +0000 Received: by mail-io0-x231.google.com with SMTP id f30so95170893ioj.2 for ; Fri, 01 Jul 2016 02:09:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pgadmin-org.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=PjzgsYHp3EE2PPQfivDSRZzQfW0DYbqQZx9bL3r7tgY=; b=ZQhc1F9ciwEXx/EbQmpWYMRIfgtLWwe5zexoNLLXM3M4Itlm0Zf8HNuOssgWiwUMfW O/HW3URcKwhiqBtLshVpNFeIhcg+dFh/c4EbHgk9uCl/0WdPW8wowFXTxXgjs97REtnH gUNsGjSjmE2S+LU9SNBHPdI3U1OgeOrq/AUwB0PLBYy2M53lJHv8pWsBWNZZP1GEfKS6 V9Kp6uRi2Xeru6t/rtahoe/hf3ku39YrLrZLwYn3kuEWAdeZYHqrqixBTDoiFLQo6Eiw 7BimrVmuDY8DnRUqc9O7/j3M1wkcB4nGAs+AumOL1wAXGrJ2sFY4S4GOa3EtCyJLTU52 xxwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=PjzgsYHp3EE2PPQfivDSRZzQfW0DYbqQZx9bL3r7tgY=; b=Z37pi0i/JQYldU3Gq1Izfja8q5MLGfSkvI6cyL2+8oS7zVHN0emZoME44GfwNUL3AD BnLFMnpxKjqZkEiTfF+QsgbUv4331uKqIHOWF3JnCnF8YJbKoW3ZBUQLGxNeDclveO3P HW52FF6yuL3K5FkKfW0gSUGIIrsPoyqhV0he1TdL5U9yM+MUefqhiSTJ5XjcQ3X8X6wV +dkOYWndzA7PkCyZaLXBVGjSlot8C8NsUXgI910mPPSbp65H/Hx9WG8vLqF/VMjb3I+X inkLft3/7xpLtAJCSV5ZLJOnVVczPjFlgJb7wlDd//u3fUDAsexrBlD4urC2usEaGX4E dT3Q== X-Gm-Message-State: ALyK8tJfrg16BeSeQxKmWH4KoR7JeiAc0dmiqvydaeGsT6B2Dwzn/vHY2HlS9lhvQF2aQuC3zWMYfSTtZ3Vttg== X-Received: by 10.107.183.2 with SMTP id h2mr19241658iof.63.1467364152480; Fri, 01 Jul 2016 02:09:12 -0700 (PDT) MIME-Version: 1.0 Received: by 10.64.24.233 with HTTP; Fri, 1 Jul 2016 02:09:11 -0700 (PDT) In-Reply-To: References: From: Dave Page Date: Fri, 1 Jul 2016 10:09:11 +0100 Message-ID: Subject: Re: [pgAdmin4][runtime]: Download feature in runtime To: Neel Patel Cc: pgadmin-hackers Content-Type: text/plain; charset=UTF-8 X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org On Fri, Jul 1, 2016 at 5:43 AM, Neel Patel wrote: > Hi Dave, > > On Thu, Jun 30, 2016 at 7:31 PM, Dave Page wrote: >> >> Hi >> >> On Thu, Jun 30, 2016 at 10:42 AM, Neel Patel >> wrote: >> > Hi, >> > >> > Please find attached patch file for initial version of download file in >> > runtime application. >> >> I've attached an update with some improved messages, and setting the >> progress dialogue to be modal (seeing as we cannot have multiple >> downloads, and it's easy to lose the dialogue). >> >> > With this patch, we have implemented two features. >> > >> > Feature 1 :- Normal "Download file" from runtime application >> > >> > Previously "Download file" was not implemented in runtime application. >> > With this patch file, we have handled Qt signal for download file >> > properly. >> >> This seems to work fine. I did get one crash (after I cancelled a >> download, then tried it again), but I couldn't reproduce that. > > > Okay. I will try to reproduce the issue and also i will try to review the > code again if i can find something regrading crash. Thanks. > >> >> > Feature 2 :- "download" attribute support for 'a' tag for client side >> > download >> > >> > As per our knowledge, webkit has not implemented the download attribute >> > at >> > 'a' tag. >> > Currently it shows under development from below link. >> > >> > https://bugreports.qt.io/browse/QTBUG-47732 >> > >> > We did not found any signal in Qt for download attribute feature but to >> > implement this feature in runtime application, we added one workaround >> > to >> > make it work with download CSV file. >> > >> > When we click on download buttons, we are getting Qt signal >> > "urlLinkClicked" >> > and in that url we are finding "data:text/csv" from encoded URL >> > generated >> > from sqleditor. Once we found that tag then we are decoding the csv data >> > and >> > writing to file. >> > >> > Is that right approach ? Should we add our own custom mime-type to >> > header ? >> > Let us know your thoughts on this feature. >> >> This doesn't work so well, for a number of reasons: >> >> 1) QT Creator is complaining that your regexp contains an invalid >> escape sequence (line 546). > > > I will fix. >> >> >> 2) The default file name seems to be the entire data blob. I would >> suggest making the file name "download.csv" if we don't know anything >> better. The "csv" part should be taken from the mime type (see below) >> >> 3) Should we handle all "data:" downloads in this way? Taking the file >> type and default extension from the mimetype offered. > > > We can handle all "data:" download. We will extract the filename and > extension from mime type. > As i know, Qt provides QUrlQuery class which will be useful to find the key > value pair. I will test and let you know. > > e.g. If we have header as below > > "data:text/csv;charset=utf-8;Content-disposition:attachment;filename=download.csv;" > > From the QurlQuery class we can query "filename" and "data:" and accordingly > save the data to filename provided. > > Please suggest. Sounds good. >> 4) When I change the filename the data is properly saved, but then I >> get a confirmation message that still has the full data blob as the >> filename. >> >> 5) It somehow seems to have let me save files with forward slashes in >> the name. See attachment. > > > I think we should not ask for "Save as" dialog. If there is no key found of > "filename" in encodedURI then we should create the file "download.csv" in > user's download directory and save the csv data. Well we can get the extension from the mimetype in that instance, but otherwise I agree with the naming. I do think we need a Save As dialogue, as the user should be able to choose the location for the file (and rename it). We should also remember the last save location for convenience. >> 6) I get all sorts of weird redrawing on the screen when downloading a >> data blob. I suspect it's because the filename (which is still the >> entire data blob) is shown on the progress dialogue. >> > > I will try to fix as per above comments and submit the patch again. > Let us know for any misunderstanding. Cool, thanks. -- Dave Page Blog: http://pgsnake.blogspot.com Twitter: @pgsnake EnterpriseDB UK: http://www.enterprisedb.com The Enterprise PostgreSQL Company -- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers