]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Send printer-added/modified events after creating and installing IPP Everywhere PPDs...
authorMichael R Sweet <msweet@msweet.org>
Sun, 11 May 2025 14:46:33 +0000 (10:46 -0400)
committerMichael R Sweet <msweet@msweet.org>
Sun, 11 May 2025 14:46:33 +0000 (10:46 -0400)
CHANGES.md
scheduler/ipp.c

index ef8457ef02f19e79f0f70431f1cd64613038e1c8..9f2d51ccd47ad1fa39c7ee8f056a14387a12ede7 100644 (file)
@@ -5,6 +5,8 @@ CHANGES - OpenPrinting CUPS
 Changes in CUPS v2.4.13 (YYYY-MM-DD)
 ------------------------------------
 
+- Updated the scheduler to send the "printer-added" or "printer-modified" events
+  whenever an IPP Everywhere PPD is installed (Issue #1244)
 - Updated the scheduler to send the "printer-modified" event whenever the system
   default printer is changed (Issue #1246)
 - Fixed a memory leak in `httpClose` (Issue #1223)
index 68b8be99cb1597df2f1a833e9d7f238f4cb5ac81..8b01ba16a6fa5d53a5b37502c5d4b65748995479 100644 (file)
@@ -5268,6 +5268,7 @@ create_local_bg_thread(
                *response = NULL;       /* Response from printer */
   ipp_attribute_t *attr;               /* Attribute in response */
   ipp_status_t status;                 /* Status code */
+  cupsd_eventmask_t event;             /* Event (CUPSD_EVENT_PRINTER_ADDED or CUPSD_EVENT_PRINTER_MODIFIED) */
   static const char * const pattrs[] = /* Printer attributes we need */
   {
     "all",
@@ -5456,6 +5457,10 @@ create_local_bg_thread(
 
     _cupsRWUnlock(&printer->lock);
 
+   /*
+    * Try opening the created PPD file...
+    */
+
     if ((from = cupsFileOpen(fromppd, "r")) == NULL)
     {
       cupsdLogMessage(CUPSD_LOG_ERROR, "%s: Unable to read generated PPD: %s", printer->name, strerror(errno));
@@ -5470,7 +5475,17 @@ create_local_bg_thread(
       goto finish_response;
     }
 
+   /*
+    * Then the destination PPD for the queue...
+    */
+
     snprintf(toppd, sizeof(toppd), "%s/ppd/%s.ppd", ServerRoot, printer->name);
+
+    if (access(toppd, 0))              /* Determine whether to log an "added" or "modified" event */
+      event = CUPSD_EVENT_PRINTER_ADDED;
+    else
+      event = CUPSD_EVENT_PRINTER_MODIFIED;
+
     if ((to = cupsdCreateConfFile(toppd, ConfigFilePerm)) == NULL)
     {
       cupsdLogMessage(CUPSD_LOG_ERROR, "%s: Unable to create PPD for printer: %s", printer->name, strerror(errno));
@@ -5486,6 +5501,10 @@ create_local_bg_thread(
       goto finish_response;
     }
 
+   /*
+    * Copy the PPD file over...
+    */
+
     while (cupsFileGets(from, line, sizeof(line)))
       cupsFilePrintf(to, "%s\n", line);
 
@@ -5506,6 +5525,7 @@ create_local_bg_thread(
 
       cupsdSetPrinterAttrs(printer);
 
+      cupsdAddEvent(event, printer, NULL, "Printer \"%s\" was %s.", printer->name, event == CUPSD_EVENT_PRINTER_ADDED ? "added" : "modified");
       cupsdAddEvent(CUPSD_EVENT_PRINTER_CONFIG, printer, NULL, "Printer \"%s\" is now available.", printer->name);
       cupsdLogMessage(CUPSD_LOG_INFO, "Printer \"%s\" is now available.", printer->name);
     }