11var FulltextAttachEndpoint ;
22var OpenCodeWriteEndpoint ;
33var PluginVersionEndpoint ;
4- var PLUGIN_VERSION = "3.1.4 " ;
4+ var PLUGIN_VERSION = "3.1.7 " ;
55var FULLTEXT_ATTACH_PATH = "/fulltext-attach" ;
66var LOCAL_WRITE_PATH = "/opencode-zotero-write" ;
77var VERSION_PATH = "/opencode-zotero-plugin-version" ;
@@ -14,6 +14,7 @@ var TESTED_ZOTERO_VERSION = "8.0.1";
1414var PLUGIN_CAPABILITIES = [
1515 "fulltext_attach" ,
1616 "local_write" ,
17+ "create_item" ,
1718 "version_probe" ,
1819] ;
1920
@@ -617,6 +618,49 @@ async function handleMergeItems(data) {
617618 } ) ;
618619}
619620
621+ async function handleCreateItem ( data ) {
622+ let itemType = requireNonEmptyString ( data . item_type , "item_type" ) ;
623+ let fields = data . fields ? requireObject ( data . fields , "fields" ) : { } ;
624+ let tags = data . tags ? normalizeStringList ( data . tags , "tags" ) : [ ] ;
625+ let collectionKeys = data . collection_keys
626+ ? normalizeStringList ( data . collection_keys , "collection_keys" )
627+ : [ ] ;
628+
629+ for ( let collectionKey of collectionKeys ) {
630+ await getUserCollectionOrThrow ( collectionKey ) ;
631+ }
632+
633+ let item = new Zotero . Item ( itemType ) ;
634+ item . libraryID = userLibraryID ( ) ;
635+
636+ let json = item . toJSON ( ) ;
637+ Object . assign ( json , fields ) ;
638+ item . fromJSON ( json ) ;
639+
640+ if ( tags . length ) {
641+ item . setTags ( tags ) ;
642+ }
643+ if ( collectionKeys . length ) {
644+ item . setCollections ( collectionKeys ) ;
645+ }
646+
647+ await item . saveTx ( ) ;
648+
649+ return successResult (
650+ "create_item" ,
651+ {
652+ item_type : itemType ,
653+ field_names : Object . keys ( fields ) . sort ( ) ,
654+ tag_count : tags . length ,
655+ collection_count : collectionKeys . length ,
656+ } ,
657+ {
658+ item_key : item . key ,
659+ item_id : item . id ,
660+ }
661+ ) ;
662+ }
663+
620664async function runOpenCodeWrite ( data ) {
621665 let operation = requireNonEmptyString ( data . operation , "operation" ) ;
622666 switch ( operation ) {
@@ -660,6 +704,8 @@ async function runOpenCodeWrite(data) {
660704 return handleCopyItem ( data ) ;
661705 case "merge_items" :
662706 return handleMergeItems ( data ) ;
707+ case "create_item" :
708+ return handleCreateItem ( data ) ;
663709 default :
664710 throw new Error ( "Unsupported operation: " + operation ) ;
665711 }
0 commit comments