]> 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:43:04 +0000 (10:43 -0400)
committerMichael R Sweet <msweet@msweet.org>
Sun, 11 May 2025 14:43:04 +0000 (10:43 -0400)
scheduler/ipp.c

index 8febd60f37c05d947019912ba575e6502ffbf8a4..1748d1036baa989ac984bd0feaa85568cf300cd0 100644 (file)
@@ -5105,6 +5105,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",
@@ -5280,6 +5281,10 @@ create_local_bg_thread(
 
     cupsRWUnlock(&printer->lock);
 
+   /*
+    * Try opening the created PPD file...
+    */
+
     if ((from = cupsFileOpen(fromppd, "r")) == NULL)
     {
       cupsdLogPrinter(printer, CUPSD_LOG_ERROR, "Unable to read generated PPD: %s", strerror(errno));
@@ -5294,7 +5299,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)
     {
       cupsdLogPrinter(printer, CUPSD_LOG_ERROR, "Unable to create PPD for printer: %s", strerror(errno));
@@ -5310,6 +5325,10 @@ create_local_bg_thread(
       goto finish_response;
     }
 
+   /*
+    * Copy the PPD file over...
+    */
+
     while (cupsFileGets(from, line, sizeof(line)))
       cupsFilePrintf(to, "%s\n", line);
 
@@ -5330,6 +5349,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);
       cupsdLogClient(con, CUPSD_LOG_INFO, "Printer \"%s\" is now available.", printer->name);
     }