Skip to content

Commit

Permalink
Introduce clean_media function in class openxml_document and use it i…
Browse files Browse the repository at this point in the history
…n remove_slide function
  • Loading branch information
SteffenWolfFA-ERF committed May 6, 2024
1 parent 659d15b commit bebc304
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
24 changes: 23 additions & 1 deletion R/openxml_document.R
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,30 @@ openxml_document <- R6Class(
},
relationship = function(){
private$rels_doc
}
},
clean_media = function() {
# get package directory
package_dir <- dirname(dirname(dirname(private$rels_filename)))
# find .xml.rels files
rel_files <- list.files(package_dir, pattern = "\\.xml.rels$", recursive = TRUE, full.names = TRUE)

# collect media files that are referenced in .xml.rels files
media_file_rels <- lapply(rel_files, function(xml){
zz <- xml2::read_xml(xml)
rels <- xml2::xml_children(zz)
targets <- xml2::xml_attr(rels, "Target")
grep("^\\.\\./media/", targets, value = TRUE)
})
media_file_rels <- file.path(dirname(dirname(private$rels_filename)), sub("\\.\\./", "", unique(unlist(media_file_rels))))

# get files in media folder
media_folder <- grep("/media$", list.dirs(package_dir), value = TRUE)
media_files <- list.files(media_folder, recursive = TRUE, full.names = TRUE)

# delete unused files
files_to_delete <- media_files[!(media_files %in% media_file_rels)]
unlink(files_to_delete, force = TRUE)
}
),
private = list(

Expand Down
1 change: 1 addition & 0 deletions R/ppt_classes.R
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ presentation <- R6Class(
private$slide_rid <- private$slide_rid[-dropid]

private$update_xml()
self$clean_media()

self
}
Expand Down

0 comments on commit bebc304

Please sign in to comment.