1
+ # coding=utf-8
1
2
"""Wrapping Autodesk Desktop Connector API."""
2
- #pylint: disable=bare-except,broad-except
3
+
3
4
import os .path as op
4
5
from pyrevit import PyRevitException
5
6
from pyrevit .framework import clr , Process
6
7
from pyrevit .coreutils import logger
7
8
9
+ from pyrevit import HOST_APP
8
10
9
11
mlogger = logger .get_logger (__name__ )
10
12
11
-
12
13
ADC_NAME = "Autodesk Desktop Connector"
13
14
ADC_SHORTNAME = "ADC"
14
- ADC_DRIVE_SCHEMA = '{drive_name}://'
15
+ ADC_DRIVE_SCHEMA = "{drive_name}://"
16
+
17
+ if HOST_APP .is_newer_than ("2024" ): # .net8 core version of the desktop connector API
18
+ ADC_DEFAULT_INSTALL_PATH = (
19
+ r"C:\Program Files\Autodesk\Desktop Connector\FOS\AddInProcess\Civil3DOE"
20
+ )
21
+ else : # .net framework version of the desktop connector API
22
+ ADC_DEFAULT_INSTALL_PATH = r"C:\Program Files\Autodesk\Desktop Connector"
15
23
16
- ADC_DEFAULT_INSTALL_PATH = \
17
- r'C:\Program Files\Autodesk\Desktop Connector'
18
- ADC_API_DLL = 'Autodesk.DesktopConnector.API.dll'
24
+ ADC_API_DLL = "Autodesk.DesktopConnector.API.dll"
19
25
ADC_API_DLL_PATH = op .join (ADC_DEFAULT_INSTALL_PATH , ADC_API_DLL )
20
26
21
27
API = None
22
28
if op .exists (ADC_API_DLL_PATH ):
23
29
try :
24
30
clr .AddReferenceToFileAndPath (ADC_API_DLL_PATH )
25
- import Autodesk .DesktopConnector .API as API # pylint: disable=import-error
31
+ import Autodesk .DesktopConnector .API as API # pylint: disable=import-error
26
32
except :
27
33
pass
28
34
35
+
29
36
def _ensure_api ():
30
37
if not API :
31
38
raise PyRevitException ("{} is not loaded" .format (ADC_NAME ))
@@ -66,10 +73,7 @@ def _get_drive_from_local_path(adc, local_path):
66
73
def _drive_path_to_local_path (drv_info , path ):
67
74
drive_schema = ADC_DRIVE_SCHEMA .format (drive_name = drv_info .Name )
68
75
return op .normpath (
69
- op .join (
70
- drv_info .WorkspaceLocation ,
71
- path .replace (drive_schema , '' )
72
- )
76
+ op .join (drv_info .WorkspaceLocation , path .replace (drive_schema , "" ))
73
77
)
74
78
75
79
@@ -157,8 +161,7 @@ def is_locked(path):
157
161
adc = _get_adc ()
158
162
item = _get_item (adc , path )
159
163
lock_status = _get_item_lockstatus (adc , item )
160
- return lock_status .State == API .LockState .LockedByOther , \
161
- lock_status .LockOwner
164
+ return lock_status .State == API .LockState .LockedByOther , lock_status .LockOwner
162
165
163
166
164
167
def unlock_file (path ):
@@ -178,13 +181,15 @@ def is_synced(path):
178
181
# see https://github.com/pyrevitlabs/pyRevit/issues/1152
179
182
# ADC version 15 changed property_id_value
180
183
# see https://github.com/pyrevitlabs/pyRevit/issues/1371
181
- prop_val = _get_item_property_id_value (adc , drive , item , 'DesktopConnector.Core.LocalState' )
184
+ prop_val = _get_item_property_id_value (
185
+ adc , drive , item , "DesktopConnector.Core.LocalState"
186
+ )
182
187
if prop_val is None :
183
188
# version older than ADC 15
184
- prop_val = _get_item_property_id_value (adc , drive , item , ' LocalState' )
189
+ prop_val = _get_item_property_id_value (adc , drive , item , " LocalState" )
185
190
# possible values, 'Cached', 'Stale', 'Modified'
186
191
# .Value is not translated
187
- return prop_val .Value == ' Cached' or prop_val .Value == ' Synced'
192
+ return prop_val .Value == " Cached" or prop_val .Value == " Synced"
188
193
189
194
190
195
def sync_file (path , force = False ):
0 commit comments