cloudprint icon indicating copy to clipboard operation
cloudprint copied to clipboard

Trying to print returns nil

Open bpdarlyn opened this issue 8 years ago • 5 comments

p = CloudPrint::Client.new(refresh_token: "refresh", client_id: "id", client_secret: "secret", callback_url: "Valid callback url") my_printer = p.printers.find("id") my_printer.print(content: "html", content_type: "text/html")

return nil :(

bpdarlyn avatar Jan 20 '17 20:01 bpdarlyn

Hmm, there's plenty of things that could be going on here. Let's see:

  • Do you see any print jobs in Google CloudPrint's console?
  • Do you see your printer in Google CloudPrint's console.
  • If you select your printer in the console and click 'Details', does it say "Printer is online and ready to print"
  • In that same screen, can you click 'Advanced' and paste the contents of the page here?

thegengen avatar Jan 24 '17 11:01 thegengen

Thank you a lot for all the work on that library! :)

In case of an error, the response from the Google API that we get looks like this (as documented here: https://developers.google.com/cloud-print/docs/appInterfaces):

{
  "success": false,
  "request": {...},
  "errorCode": 403,
  "message": "Could not convert to PDF."
}

However, the print() method only returns nil unless the response has a job property. This makes it very hard for us to figure out what was going wrong and to display a helpful error message to the user. This is probably also related to #18.

Would it be possible that the print() method returns a more specific error? I would be happy to work on this.

ChristianBoehlke avatar Jul 19 '17 14:07 ChristianBoehlke

Hi. I'm not sure without looking into the details. Unfortunately, I won't be able to look into this until the middle of next week. In the meantime, if you could share a sanitized version of your content, that could prove very useful.

Next, I'll get back to you with my findings. Sorry for the delay.

thegengen avatar Jul 19 '17 14:07 thegengen

Sorry for the delay @ChristianBoehlke, had a look and I understand what you mean by this now. So the way I see it, there are a few ways to go about this:

  • We introduce some kind of PrintResult class which has a job and an error (or array of errors)
  • We raise an exception when printing fails and we let people rescue and handle it however they wish.
  • We create print! to raise an exception, like the Rails stuff typically does.

I'm inclined to raise when print is called and not introduce another method. Either way this is a breaking change, and I'll be sure to add it to the ChangeLog and the README. But I feel like people upgrading and getting exceptions for code that fails to print is the best of all outcomes here.

Let me know what you think. I should have the code for this ready tomorrow or on Saturday.

thegengen avatar Aug 03 '17 08:08 thegengen

@ChristianBoehlke there is a branch for this now: print-exceptions.

Would you mind taking it for a spin and seeing if everything's OK?

thegengen avatar Aug 05 '17 10:08 thegengen